Download the CSV template
How to import
Have your spreadsheet as CSV or Excel
Open the importer

Import, at the top right of Subcontractors.

The importer. Nothing is saved until you have checked what was read.
Check what was read
1M/2M in every general liability cell, is said once above the rows, with the rows it is true of, and those rows are not counted under Need checking for it.Under What each column was read as, each field WatchMyCover imports shows the heading it was read from, using the same names as the template’s columns (Company name, Email, Expiration date, GL each occurrence and so on). If one is wrong, choose the right heading, or Not imported. The preview is read again with your correction.Beneath the headings, a note names any limit or endorsement that no column of the sheet was read as. Nothing is recorded for such a limit, so a subcontractor whose requirements ask for it will read as short of it. Such an endorsement is recorded as stated and not confirmed, as a blank cell is. If the sheet does have the column, choose it above the note.The note opens with a sentence of its own where the workers’ compensation cells that were read say only that the policy is carried (Statutory, a state fund’s name, Yes) and none gives an employers’ liability figure. The sentence is not shown where the sheet has a column that may hold the figure. One cell in the workers’ compensation column that says the policy is carried and then more can take it away too, whether or not that cell was read: Yes - cancelled, Yes - exempt, Statutory? and Old BWC do, and Cancelled, Statutory - expired and Yes - lapsed do not. With the sentence or without it, an import records each policy that is said to be carried with no limit, so a subcontractor whose requirements ask for that limit will read as short of it until a certificate is recorded. Where the note does open that way, the free spreadsheet check does not hold the sheet to that limit: it lists the limit once as not checked. So a row that read Needs review there can read Non-compliant once it is imported.
The preview: the counts, then the heading each field was read from.
Choose a project and requirements

Set every row to gives every row the same requirements; change the exceptions at the end of each row.
Import
Download the rows to fix
When rows carry a note in the preview, or were not imported, choose Download rows to fix for a CSV of just those rows: Row (its row number in your file), Company name, Outcome (Check before importing, Imported, check this row or Not imported) and Reason. Open it beside your spreadsheet, correct the rows, and import the sheet again; rows already imported are matched by company name rather than duplicated. While chasing is off, importing sends no email: subcontractors are only emailed once you switch chasing on. If chasing is already on, the imported subcontractors are checked like any other, and whatever is due for them is chased straight away.Excel files
An .xlsx file is read in your browser and goes through exactly the same preview as a CSV:- Only the first worksheet (the leftmost tab) is read. Move the subcontractor list to the first tab, or copy it into a new workbook.
- Cells formatted as dates are read as dates, month first (
12/31/2027), whatever the cell’s display format. - Numbers are read as the full number stored in the cell, never in scientific notation: a limit shown as
$1,000,000or1E+06is read as1000000. - A formula is read as the value Excel last calculated and saved.
- Older .xls files and password-protected workbooks cannot be read. Save them as .xlsx or CSV first.
Column reference
These are the headings in the template, in order. Only Company Name is strictly required; Email is needed for chasing, and Expiration Date for a certificate. Leave any other cell blank when you do not know it.A row for each policy
Some offices keep one row for each policy: the company’s name repeats down the rows, and a column says which policy the row is (General Liability, WC, Auto, Umbrella / Excess). Such a sheet is read as one subcontractor for each company, holding each policy with the limit, expiry date and policy number from its own row. Rows read in the preview then counts companies, and each company has one line. A policy with no date on its row is not recorded. A row for a policy the importer has no column for, such as Professional Liability, adds nothing. The preview says both on the company’s line, with the row’s number in your file.
A company with a policy that has no date shows missing under Expiration date and is counted under No expiration date, even when its other policies have dates. Those are still recorded, each with the date on its own row: in the Limits column only the policy with no date is marked no date read, so not recorded.
Where two rows give the same policy for one company, one of them is used, and the company’s line in the preview names both rows and says which. A row that shows no policy is used before one that shows it: a row with an empty limit, or with words there that do not say the policy is carried, such as Cancelled or TBD. So a row kept for a renewal and not filled in yet leaves that policy unrecorded until the row is filled in or taken out. Between two rows that both show the policy, the one with no date, the earlier date or the lower limit is used. A workers’ compensation row that says Statutory and an employers’ liability row with a limit are one policy and are read together. An employers’ liability row with an empty limit shows no policy, so it is the one used and no workers’ compensation is recorded: write the limit on it, or take the row out.
What an imported certificate looks like
A certificate is created for a row only when it has an Expiration Date and at least one policy: a limit in GL Each Occurrence, Workers Comp Each Accident, Auto Combined Single Limit or Umbrella Each Occurrence, or a cell there that says the policy is carried, such asStatutory or Yes (see Amounts). An aggregate on its own does not count. Then:
- Every coverage with a limit, or said to be carried, is recorded. One said to be carried is recorded with no limit. Each has the row’s expiry date, or its own where the sheet has an expiry column for that coverage (see Dates).
- The effective date is taken as 365 days before the expiry date, or the import day, whichever is earlier, so an imported policy never starts in the future.
- The issue date is the import day.
- The certificate is noted “Imported from a spreadsheet (row n)”.
Amounts
An amount is recorded as the number in the cell and shown in your company’s currency. Nothing is converted. It is kept as a whole number: the cents of$1,000,000.50 are dropped, not rounded up.
Accepted: $1,000,000, 1000000, 1M, 1.5M, 1MM, 500K. Also Excel’s scientific notation (1E+06) and space- or dot-grouped thousands (1 000 000, 1.000.000).
A figure may have a currency’s sign before it, whichever currency it is, and is read as it is under the dollar’s sign, in full or in shorthand: £1,000,000, ₹10,00,000, ¥1,000,000, €1.000.000, £1M, €500K.
Your own currency’s mark is read the same way where it is written with letters, in front of the figure as the app writes it: C$1,000,000 in a Canadian workspace, R 1,000,000 or R1M in a South African one, CHF 500K in a Swiss one. So the example of a limit that the import shows you is a cell it reads. A mark of letters alone is also how a policy number begins, so after one a long run of digits with nothing to break it up is still asked whether it is a number: R1000000 is read, R1,234,567 is read, and R1234567 is taken as a policy or account number and flagged. A full stop written after the mark is read with it (Rs. 5M, Rs.10,00,000). Straight before a figure in shorthand it may be that figure’s decimal point, so Rs.5M, Rs.25000K and R.5M are not read, and the row is told that the full stop is why: write Rs 5M or Rs. 5M for five million, or R0.5M for half a million. A mark written with letters is read only in the workspace whose currency it is. In any other, and on the free spreadsheet check, which has no workspace and is worded in US dollars, its letters are a word the reader does not know: the cell is not read and the row is flagged. So is a mark after the figure (1,000,000 R), and a currency’s three-letter code where that is not the mark the app writes (CAD 1,000,000 in a Canadian workspace, whose mark is C$). USD 1,000,000 is the exception, and is read in every workspace. Write those figures with your currency’s mark in front, or with no letters at all.
- Words such as
N/A,None,TBD,See attached,Per contractorSee COIare not an amount, and no limit is recorded for that coverage. In a limit column the row is flagged, except forN/A,Noneor a dash, which are taken to mean the coverage is not carried. Yes,XorIncludedin a limit column says the policy is carried. It is recorded with no limit, and the row is flagged, or the column is noted once above the rows where more than one row is written that way. So does a yes followed only by words that say nothing against it: where the proof is or who gave it (Yes - on file,Yes, see cert,Yes per agent), which policy it is in (Included in GL), or that it stands (Yes - current,Yes - verified,Yes - approved). A yes followed by a word that is not one of those, by a figure, by a mark such as a star, or by a question mark does not say the policy is carried:Yes - cancelled,Yes - exempt,OK per Tom,OK - agent on it,Yes per contract,Yes*andYes?are left unread, no policy is recorded from the cell, and the row is flagged.Statutory(orper statute) under workers’ compensation, or the name of a state fund, means the policy is carried. It is recorded with no limit, and the row is flagged, or the column is noted once above the rows where more than one row says so. A fund’s name with a number beside it is flagged on its own row, unless an EL column beside it gives the limit. An amount after the word, as inStatutory / 1M, is read as the limit, and so is one after a dash of any kind that stands off from the figure (Statutory - 1,000,000). A limit after the word that is grouped by dots or by spaces, or written with an exponent (Statutory 1.000.000,Statutory 1 000 000,Statutory 1E+06), is not read there: the policy is recorded with no limit, and the row is told to write the figure with commas. A cell that says more than that is not read as carried: a word such asexpired,NoorOld(Statutory - expired,No BWC,Old BWC), a question mark or a mark such as a star (Statutory?,BWC*), or a date, a policy period or a year (BWC 6/30/2025,BWC 9/1-9/1,Statutory 2019,BWC '25), whatever stands between it and the word (BWC/9/1,Statutory, 2019,BWC 9-1) or after it (BWC 9/1 / 9/1,Statutory 6/30 / 1,000,000). A date is seen with a full stop (BWC 9.1,BWC 12.2019), with spaces round its slash or hyphen (BWC 9 / 1), with its day, month and year standing apart (BWC 9 1 25), as a day and a month apart with nothing between them (BWC 9 1), or as four small figures joined by slashes, the two dates of a period (BWC 9/1/9/1). The row is told that the date is why, and to write the word or the fund’s name without it. A figure of four digits that begins 19 or 20 reads as a year, soStatutory 2000is not a limit of 2,000: write the limit in full (Statutory 2,000,000). After#such a figure is the fund’s number, hard against it or with a space, a colon, a full stop or a dash between the two (BWC #2019,BWC #: 2019). Two figures with a full stop between them read as a date where they can be a day and a month, soStatutory 1.5is not read: write the limit with its unit or in full (Statutory 1.5M,Statutory 1,500,000). Five to eight figures run together beside the word or a fund’s name may be a date with nothing between its day, month and year, with a nought before a lone figure or without one (BWC 090125,BWC 09012025,BWC 90125,Statutory 101000). Beside a fund’s name they may as well be its account number, and afterStatutorythe limit. Where they can be a date, the two cannot be told apart: the cell is not read, and the row is told to write#before an account number (BWC #090125,BWC #: 090125), or the limit with commas (Statutory 101,000). A run that cannot be a date is still the fund’s number, or the limit afterStatutory(BWC 80012345, which has no month 80;Statutory 500000). So is a run that ends in three noughts and fits a date only with no nought before a lone figure, which would be in the year 2000 (Statutory 12000). Before a fund’s name only its state, a yes, or words that say the policy is with it (covered by,with,w/,carrier,coverage,policy) are read past, and a figure there leaves the cell unread. A cell that opens withIsorHasand then names what it asks about is a question, with its question mark or without, and is left unread (Is the policy with BWC);Is with BWCandHas coverage with BWCare read. The fund that pays the workers of uninsured employers is not a state fund’s name.- A word beside an amount is read past only when it is one an office puts beside a limit:
occ,per occurrence,each,agg,CSL,limit. The amount beside it may be in full or in shorthand, whatever its size:1M occ,1000K occand25000K CSLare read as1M,1000Kand25000Kare. Shorthand is worked out to the dollar it says, whatever the decimals before the unit:1.5Mis 1,500,000,12.5Kis 12,500 and1234.567Kis 1,234,567. What is under a dollar is dropped, not rounded up:1.2345678901Mis 1,234,567 and99.9999999Mis 99,999,999. A cell that opens with shorthand and holds more than that one amount and its words (25000K (2),1M occ 2M agg) is not read, and the row is flagged: write the amount alone in the cell, or two amounts with a slash between them. Where a figure in full stands first, it is the one read, and the row is told the first of several was used (1,000,000 25000K), unless the cell’s own words give two amounts as the aggregate and each occurrence (below). Any other word, as inNeed 1Mor1,000,000 pending, a question mark, as in1,000,000?, or a mark such as a star or a less-than sign, as in1,000,000*or<1,000,000, leaves the cell unread: no limit is recorded and the row is flagged. AnEis read past only inside a figure in scientific notation, so2000000Eis left unread. A figure with a minus, or in brackets as a ledger prints a negative, is not an amount, alone in its cell or after a word that is read past:-1,000,000,(1,000,000),USD (1,000,000),$(1,000,000),USD -1,000,000,GL (1,000,000)andGL -1,000,000are not read, and the row is flagged. After a word, the row is told that the minus or the brackets are why, and to write the amount without them. Brackets count wherever the cell’s first figure opens one, or closes one that was not opened:GL - (1,000,000),(1,000,000 occ),(1,000,000and1,000,000)are not read. Brackets round a marker, round words, or opened by a word are a remark and are read past:(2) 1,000,000,1,000,000 (per occ),(occ 1,000,000). After a label, a dash that stands off from the figure, or joins the label to it, is a dash and not a minus:GL - 1,000,000andGL-1,000,000are read, and so is shorthand written that way (GL - 1M,Umb - 5M). After a currency’s sign orUSD, a dash before the figure is always a minus:USD - 1,000,000andUSD-1,000,000are not read. AfterStatutory, a minus written against the figure, or brackets round it (Statutory -1,000,000,Statutory (1,000,000)), leaves the policy recorded with no limit, and the row is told that the minus or the brackets are why. - A limit cell holding several amounts, such as
$1,000,000 / $2,000,000or1M/2M, is read in full and flagged, on the row or once above the rows where more than one row of the column is written that way. Under general liability and umbrella the first is each occurrence and the second the aggregate, unless the aggregate column gives one or the cell’s own words say otherwise (1M agg / 2M occ). Two amounts in full with no slash between them, one besideaggand the other besideoccoreach, are read by those words too, in either order (2,000,000 agg 1,000,000 occ,Occ: 1,000,000 Agg: 2,000,000). Three amounts under either give the first as each occurrence and no aggregate. Under workers’ compensation the first is used, and three bare figures such as500/500/500are read in thousands. Three figures under automobile liability are split limits: the policy is recorded with no limit. Under a coverage with no aggregate, where a cell of two amounts calls the first the aggregate and the second each occurrence, the second is the one used. Where the second of two amounts is the lower, no limit is recorded. - One amount that the cell calls the aggregate, such as
2M aggunder general liability, is recorded as the aggregate, with no each-occurrence limit. A cell that speaks of the aggregate and gives no amount (Agg TBD) is flagged. An amount after a slash with nothing before it (- / 1,000,000) is not read: the cell gives no first amount. - A limit under $10,000 is not recorded, and the row is flagged. A sheet that gives its limits in thousands (
1,000for a million) has to be written in full. - A bare run of digits of 10,000 or more that is not a whole number of thousands, such as
80012345orGL1234567, is taken as a policy or account number. So is a figure after#(#80012345,#2,000,000), unless the#is a marker of one to three figures with an amount after it (#2 $1,000,000); a figure with a short suffix, of one to three figures or beginning with a nought (2000000-01,2000000-0001); and a figure of 10,000 or more beforeKthat is not a whole number of thousands (80012K;1234Kis read as 1,234,000). It is not an amount: no limit is recorded from it, and the row is told which of these it was. Where such a number stands after an amount in the same cell (1,000,000 80012345,$2,000,000 GL1234567), the amount is read, and the row is told that a number beside it was passed over, or the column is noted once above the rows where more than one row is written that way. A figure written as money, with a currency sign or with commas between its thousands ($112,500,1,250,500), is read as the amount it says. A figure grouped by spaces or by dots is not written as money by the sign before it, because a space or a dot also stands between the figures of split limits:1 000 000,$2 000 000,1.000.000and€2.000.000are read, and$112 500,£1 250 500,$100 300 100,€1.250.500and$100.300.100are flagged. Write such a figure with commas. A figure grouped by dots with the currency’s sign after it, or with cents after a comma (1.000.000 €,1.000.000,00), is not read either, and the row is told to write it with commas. - Shorthand that comes to a hundred million or more, such as
500Mor100M/300M/100M, is not read. On older forms an M is a thousand, so the figure may be meant either way: no limit is recorded and the row is flagged. Write the amount in full. - In the two aggregate columns, words alone are ignored without a note. A figure there that is not an amount is flagged.
- An amount over $1,000,000,000 is not recorded.
- A date in a money column is not read as money.
Dates
- Month first:
12/31/2027,12-31-2027,12.31.2027, or with a two-digit year,12/31/27(years 00–69 are read as 2000s). - Years from 1990 to 2100. A date outside that range is not read.
- ISO:
2027-12-31. - Written months:
31-Dec-2027,Dec 31, 2027. - Excel date serial numbers.
3/15/26 - 3/15/27 is read as its end, a date followed by a word such as renewed as that date, and so is one written exp. 3/15/27 or thru 3/15/27. A cell that still cannot be read as a date is flagged “Could not read … as a date”. Under a heading that names a coverage it leaves out that coverage and no other; in the row’s one expiry column it leaves the row with no certificate. If a row has several expiry columns and their headings name a coverage (GL Exp, WC Exp, Auto Exp), each date is used for the coverage its column names. A coverage with no expiry column of its own is given the earliest date on the row, because that is the one that decides compliance, and so is every coverage when the headings name none. The preview says this once, above the rows. A coverage that has an expiry column of its own, a limit, and no date in that column on a row (an empty cell, N/A, TBD) is not recorded for that row, and the row is flagged: it is not given another policy’s date. Columns about licenses, contracts, bonds, permits, experience mods, lien waivers, prequalification, W-9s, effective dates or issue dates are not treated as expiry dates.
Endorsement columns
The three endorsement columns apply to every coverage in the row.No when the endorsement is missing; a blank cell is recorded as stated. See Endorsements and evidence levels.
Re-importing and matching
- Subcontractors are matched by company name, ignoring capitalization. A matching row updates the subcontractor’s trade, contact name, email and phone (blank cells change nothing) and applies the requirements chosen for that row, rather than creating a duplicate. If you chose a project for the import, the matched subcontractor is put on it too.
- A row whose policy is already on file, with the same expiry date for a coverage in the row, adds no new certificate. Re-importing the same sheet does not replace certificates you have recorded by hand.
- A row with a different expiry date adds a new certificate, whether the date is later or earlier, so import your current sheet rather than an old one. An older certificate is set aside only if the new one fully replaces it; see Renewals and several certificates.
- A row matching an archived subcontractor is not imported: “Matches an archived subcontractor. Restore it first to update it from a spreadsheet.”
Limits
- Up to 500 rows per file. For a longer file the preview says only the first 500 will be imported; split the file and import each part.
- Files up to 4 MB. An Excel file is measured after it has been read as CSV.
- Your plan’s subcontractor limit applies row by row. Rows past the limit are listed as “Your plan’s subcontractor limit was reached”.
Common mistakes
Every subcontractor shows Needs review after import
Every subcontractor shows Needs review after import
Workers' comp shows with no limit stated
Workers' comp shows with no limit stated
$1,000,000) in Workers Comp Each Accident, or record the certificate when it comes in.Subcontractors show as expired on the wrong day, or far in the future
Subcontractors show as expired on the wrong day, or far in the future
31-Dec-2027 or 2027-12-31 and import again; rows already on file with the right expiry are left alone.Rows are flagged as written day first, or as a date that could be two days
Rows are flagged as written day first, or as a date that could be two days
25/05/2026, so dates that could be read either way were not imported. Those subcontractors were imported without a certificate. Write the dates as 31-Dec-2027 or 2027-12-31 and import again.The limit column read an expiry date or a policy number
The limit column read an expiry date or a policy number
# before it, no short suffix after it and no letters beside it but the ones an office puts beside a limit (GL-2000000, 80012000); a figure written as money is, with a currency sign or commas between its thousands ($80012345); a figure in Excel’s scientific notation (8E+07); and a round number with a longer number after it (2000000-2025) or a marker of one to three figures before it (# 12 2000000). Look down the Limits column of the preview for a figure that is not a limit.Rows were imported with no email
Rows were imported with no email
Duplicates after re-importing
Duplicates after re-importing
References
- Import or export text (.txt or .csv) files. Microsoft Support: saving an Excel sheet as CSV.
- Create, view, or download a file. Google Docs Editors Help: downloading a Google Sheet as .xlsx or .csv.