Subcontractor Compliance Tracker Template
What this isโ
One spreadsheet, one row per subcontractor, one column group per document that expires. It tells you at a glance who is compliant, who is about to lapse, and who you should not be paying this week.
It is the manual version of what compliance software does. It works, it costs nothing, and it is honest about where it stops working.
When you use itโ
- Every month, as a standing review before the pay application cycle
- Before releasing any progress payment to a sub
- Before a sub mobilizes on a new job
- When an incident happens and you need to know what was in force on that date
- At annual requalification, to see who has been chronically late with documents
How to fill it inโ
One row per subcontractor, not per job. A sub on four of your jobs has one insurance policy. Track the policy once and list the active jobs in a column, so you know who to call when it lapses.
Use dates, not "current". The whole value of the sheet is arithmetic on expiry dates. A column that says "OK" with no date behind it is a column you cannot sort or automate.
Status should be computed from the date, not typed. In a spreadsheet, a formula comparing
the expiry date to today produces OK, EXPIRING, EXPIRED or MISSING. Typed statuses go
stale the day after somebody types them.
Never use color alone. Conditional formatting is useful, but the text marker is what survives printing, screenshots, color blindness and pasting into an email. Color on top of text, never instead of it.
Record the date you last requested a document. Two rows that both say EXPIRED are
different problems if one was chased yesterday and the other has been ignored for six weeks.
If a sub is EXPIRED on any required document, they do not get paid and
they do not mobilize. Enforcing that once, early, on a small sub, is what makes it work on
a big one later.
The most dangerous state is not EXPIRED. It is OK on a certificate that
was never checked for the required endorsements. An in-date certificate for a policy without
a completed operations additional insured endorsement passes this tracker and leaves you
uncovered. Verify endorsements at collection; the tracker only manages dates.
The templateโ
Build it in a spreadsheet. The tables below are the column specification.
Column specification โ identity and statusโ
| # | Column | What goes in it |
|---|---|---|
| 1 | Sub name | Legal name, matching the subcontract and the W-9 |
| 2 | Trade | Primary trade, for filtering |
| 3 | Overall status | Computed: worst status across all document columns |
| 4 | Active jobs | Job numbers where the sub is currently on site or under contract |
| 5 | On site now | Yes / No โ drives urgency |
| 6 | Prequal date | Date the current prequalification was approved |
| 7 | Prequal expires | Usually prequal date plus twelve months |
| 8 | Approval tier | Approved / Conditional / Limited / Do not use |
| 9 | Award limit | Dollar ceiling from the approval, if any |
Column specification โ documentsโ
Each document gets three columns: expiry date, status, and the date you last asked for it.
| # | Document | Columns | Notes |
|---|---|---|---|
| 10โ12 | General liability | Expiry, status, last requested | Also flag whether both additional insured endorsements are on file |
| 13โ15 | Automobile liability | Expiry, status, last requested | |
| 16โ18 | Workers' compensation | Expiry, status, last requested | The one that most often lapses, because it is billed monthly |
| 19โ21 | Umbrella / excess | Expiry, status, last requested | |
| 22โ24 | Contractor license | Expiry, status, last requested | Check the state board, do not trust the copy |
| 25โ27 | License bond | Expiry, status, last requested | Where the state requires one |
| 28โ30 | W-9 | Date on file, status, last requested | Does not expire, but changes when the entity changes |
| 31โ33 | Safety program | Date of the version on file, status, last requested | Treat anything over three years old as stale |
| 34 | Endorsements verified | Date you last checked the actual endorsement forms | |
| 35 | Notes | What was said, to whom, when |
Optional columns worth adding if they apply to your work: certified payroll status, OCIP or CCIP enrolment, prevailing wage registration, drug testing program, and any owner-specific requirement on a particular job.
Worked exampleโ
Five subs, mid-month, before the pay cycle. All names are fictional.
| Sub name | Trade | Status | Active jobs | Prequal expires | GL exp | GL | WC exp | WC | Auto exp | Auto | License exp | License | W-9 | Last requested | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ridgeline Mechanical | HVAC | OK | 24-118, 25-102 | 2027-02-14 | 2027-01-01 | OK | 2026-12-01 | OK | 2027-01-01 | OK | 2027-06-30 | OK | OK | 2026-02-14 | Clean file |
| Kestrel Electric | Electrical | EXPIRING | 25-102 | 2026-11-30 | 2026-09-12 | EXPIRING | 2026-09-12 | EXPIRING | 2026-09-12 | EXPIRING | 2028-03-31 | OK | OK | 2026-08-12 | Whole program renews 9/12, broker confirmed renewal in process |
| Two Rivers Drywall | Drywall | EXPIRED | 25-107 | 2026-10-04 | 2026-08-01 | EXPIRED | 2026-08-01 | EXPIRED | 2026-08-01 | EXPIRED | 2027-09-30 | OK | OK | 2026-08-05 | Third request sent. On site now. Payment held. |
| Alder Creek Concrete | Concrete | MISSING | 25-119 | 2027-04-22 | 2027-03-15 | OK | 2027-03-15 | OK | โ | MISSING | 2029-01-31 | OK | OK | 2026-08-18 | No auto policy on file; sub says hired and non-owned only, needs proof |
| Harbor Glass & Glazing | Glazing | OK | none | 2026-09-01 | 2026-12-31 | OK | 2026-12-31 | OK | 2026-12-31 | OK | 2027-05-31 | OK | OK | 2026-06-01 | Prequal expires in two weeks; not on site, low urgency |
Read the sheet in this order. Two Rivers is the problem: expired coverage, on site, working today. That is a phone call this morning and a payment hold, not an email. Kestrel is fine โ one renewal date, already in motion, diary it for the 13th. Alder Creek is a missing document, not an expired one, which usually means a misunderstanding rather than a lapse. Harbor Glass is an administrative task with no exposure attached because they are not on site.
Status definitionsโ
| Marker | Meaning | Rule |
|---|---|---|
OK | In force, more than 30 days to expiry | No action |
EXPIRING | In force, 30 days or fewer to expiry | Request renewal |
EXPIRED | Past the expiry date, no renewal on file | Hold payment, stop work if on site |
MISSING | Never received | Do not allow mobilization |
N/A | Genuinely does not apply, with a reason in notes | Requires a note, or it reads as a gap |
N/A should be rare and always explained. A sub with no vehicles still needs hired and
non-owned auto coverage, so N/A on the auto row is usually wrong.
Reminder cadenceโ
Set the reminders off the expiry date, not off a monthly sweep. Five touches:
| Days before expiry | Action |
|---|---|
| 60 | First request by email to the sub and copied to their broker |
| 30 | Second request, status moves to EXPIRING |
| 14 | Third request, phone call to the sub's office manager |
| 7 | Notice that payment will be held and that mobilization is blocked |
| 0 | Status moves to EXPIRED. Payment held. If on site, notify the PM and the superintendent |
Copying the broker on the first request is the highest-value habit in the whole cadence. Brokers issue certificates in minutes and subs forward emails in weeks.
The monthly routineโ
Thirty to sixty minutes, on the same day every month, before pay applications are processed.
- Refresh the computed status column and sort by status, worst first.
- Deal with every
EXPIREDrow on an active job first. Phone, not email. - Send the 60- and 30-day requests as one batch.
- Check the prequal expiry column and start requalification for anything within 60 days.
- Spot-check three certificates against the insurance requirements exhibit โ endorsements, not just dates.
- Update the notes column with what you did, so next month starts from a real position.
Request everything missing in one passโ
When you contact a sub, ask for every document you need from them, not the one that triggered the reminder. A sub whose general liability expired next week probably has an auto policy expiring the same day, a license renewal due, and a safety program from 2021.
Three consequences of doing it this way:
- One email instead of four spreads over four weeks
- The sub's broker can issue one certificate covering everything
- You stop being the GC who emails constantly, which is why subs start ignoring you
Keep a saved template for the request. Name the documents, name the expiry dates, name the date you need them, and say plainly what happens if they are late.
Keeping historical certificatesโ
This is the part most people get wrong, and it is the part that costs money.
Never overwrite a certificate when a renewal arrives. File the new one alongside the old one. The tracker holds the current expiry date; the file holds every certificate you have ever received, each labelled with its effective and expiry dates.
The reason is simple. When a claim is made, the policy that responds is the one in force on the date of the occurrence, not the one in force today. If a fall happened on 14 March 2024, you need the certificate and the endorsements that covered 14 March 2024 โ and if you overwrote them with the 2025 renewal, you cannot prove the sub had coverage, cannot prove you were an additional insured, and cannot tender the claim. Your own carrier then pays, and your loss history carries it for years.
The same applies at audit. Your general liability audit will assess premium on payments to uninsured subcontractors. Producing a certificate covering the period in which you paid the sub is what keeps those payments out of the audit. A current certificate does not prove anything about the year being audited.
Practical filing rules:
- One folder per sub, one subfolder per policy year
- File names carry the coverage, the effective date and the expiry date
- Store endorsement forms with the certificate they belong to, not separately
- Keep certificates for at least the length of your state's statute of repose for construction defect claims, which is often longer than you expect
- Never delete a certificate because a sub is inactive; inactive subs are exactly who claims arrive about
Systems that let a renewal overwrite the previous record are common, including some document management setups. Check what yours does before you rely on it.
Notes and common mistakesโ
Tracking dates and not endorsements. The tracker manages expiry. It does not tell you the coverage was ever right. Verify endorsements when the certificate arrives and record the date you did it.
Letting the sheet live on one person's laptop. It should be on a shared drive, and a second person should know how it works. Compliance tracking that depends on one employee is one resignation away from a gap.
Chasing by email only. Email is the first two touches. After that it is a phone call, and after that it is a payment hold. Subs respond to payment holds.
Not enforcing it. A tracker whose EXPIRED rows still get paid trains everyone that the
sheet is decorative. Enforce it the first time and you rarely have to enforce it again.
Starting from scratch instead of from your current subs. Load your active list first, then backfill. A tracker covering the fifteen subs on site now is more useful today than a perfect one covering ninety subs next quarter.
Where this stops workingโ
Be honest about the ceiling. This sheet works well up to roughly 25 to 30 active subcontractors. Past that, the arithmetic still works, but the chasing does not โ you are sending fifty reminder emails a month, tracking who replied, re-reading certificates, and doing it around a job that also needs running.
At that point the failure mode changes from "we do not have a system" to "we have a system and nobody has time to run it", which is harder to see and more expensive. Software that emails subs directly, collects the documents, and reads the dates off them pays for itself somewhere in that range, and the cost is usually less than the hours you are already spending.
Use this template until it hurts. Then stop doing it by hand.
For the collection process behind the sheet, see the COI collection workflow. For what to check on each certificate, see subcontractor insurance requirements.
Related Resourcesโ
- COI Collection & Tracking โ process behind the sheet
- Insurance Requirements Exhibit โ limits to compare against
- Certificates of Insurance โ line-by-line certificate review