The template is a CSV — open it in Excel, Google Sheets or Numbers. No signup, no email gate.
Download the CSV templateWhat is in it
Most COI spreadsheets fail for the same reason: one row per vendor. Policies do not renew together — a general liability policy can run to March while the workers' compensation policy expires in September, and a single expiration column cannot represent that. This template uses one row per vendor per coverage line, which is the smallest change that makes the sheet honest.
| Column | What goes in it |
|---|---|
| Vendor legal name | The exact entity on the contract, including LLC/Inc |
| Trade / tier | Which requirement set applies to this vendor |
| Coverage line | General liability, auto, workers' comp, umbrella, other |
| Carrier | Insurer named on the certificate |
| NAIC # | Carrier identifier — lets you verify admitted status |
| Policy number | What you quote when you email the producer |
| Effective date | Policy start |
| Expiration date | Drives every reminder in the sheet |
| Each occurrence limit | Per-claim limit for this line |
| Aggregate limit | Annual limit, shared across all the vendor's work |
| Products-completed ops aggregate | The limit behind post-completion claims |
| Required limit met? (Y/N) | The verdict, recorded rather than remembered |
| AI ongoing ops on file? | CG 20 10 or equivalent, endorsement seen |
| AI completed ops on file? | CG 20 37 or equivalent, endorsement seen |
| Primary & non-contributory? | Endorsement seen, not description-box text |
| Waiver of subrogation? | GL and workers' comp separately |
| Producer agency | Who issued the certificate |
| Producer email | Who you chase — the agent, not the vendor |
| Certificate file link | Where the PDF and endorsements live |
| Last verified date | By whom, and when — this is your audit trail |
| Notes | Exclusions, owner-officer exclusions, per-project aggregate |
The two formulas worth adding
Once the sheet is open, add a Days to Expiry column and a Status column. In Google Sheets, with the expiration date in column H:
- Days to expiry: =IF(H2="","",H2-TODAY())
- Status: =IF(H2="","MISSING",IF(H2<TODAY(),"EXPIRED",IF(H2-TODAY()<=30,"EXPIRING","OK")))
Then apply conditional formatting on Status — red for EXPIRED and MISSING, amber for EXPIRING, green for OK — and sort by Days to expiry ascending. That view, opened every Monday, is the whole job.
Where the spreadsheet stops being enough
Honestly: below about twenty-five vendors with one requirement tier, a spreadsheet plus a weekly calendar block is a legitimate system, and you do not need software. It breaks down when the requirement set stops being uniform, when more than one person edits the file, when vendors span properties with different requirements, or when you need the history rather than the current state — because a cell that changed from red to green keeps no record of when, or why, or who decided.
When the sheet stops keeping up, the same columns exist as a system that reads the certificates and sends the reminders itself.
Spreadsheet vs software — an honest comparison