Track subcontractor insurance certificates as one row per subcontractor with four fields: which coverages they carry, the limits, the earliest expiry date across their policies, and the date you last verified that certificate with the broker who issued it. Reminders go out at 60, 30 and 15 days before that date. Then attach the whole thing to accounts payable, because a subcontractor who ignores four emails about a lapsed policy will answer within an hour when a cheque does not arrive.
Almost everything written on this topic is published by a certificate tracking vendor for an enterprise risk team managing hundreds of certificates. That is not the problem most contractors have. The problem most contractors have is eleven subs, one office admin, and a filing system that is technically an inbox.
What a missed certificate actually costs
Start with the money, because it is the part that converts this from admin into a line item.
When you pay a subcontractor who cannot prove they carried workers compensation, your insurer does not treat that as the subcontractor's problem. At your annual premium audit the auditor reclassifies what you paid them as your own payroll and bills you premium on it. Premium audit guidance published by SubDoc lays out the formula auditors work from: the gross subcontract invoice multiplied by a labour ratio, multiplied by the class code manual rate per $100 of payroll, multiplied by your experience modification rating.
The labour ratio is where contractors get hurt. If the invoice is not itemized into labour and materials, the auditor cannot take your word for the split, and default ratios get applied instead, commonly 50 percent and as high as 100 percent when nothing is segregated.
| Subcontract | Invoice | Default labour ratio | Auditable payroll | Estimated back premium |
|---|---|---|---|---|
| Roofing | $40,000 | 50% | $20,000 | about $5,456 |
| Residential framing | $50,000 | 50% | $25,000 | about $4,538 |
| Drywall | $35,000 | 50% | $17,500 | about $1,771 |
| Excavation | $60,000 | 33.3% | $20,000 | about $1,628 |
| Electrical | $25,000 | 50% | $12,500 | about $798 |
By the numbers
Figures from SubDoc's published premium audit worksheet, at sample class rates with an experience modifier of 1.10. Your numbers move with your jurisdiction, class codes and modifier, but the shape holds: the higher the hazard, the more a missing certificate costs.
That is the arithmetic. Here is the lived version. In a r/GeneralContractor thread on workers comp audits, a contractor posting as OrdinaryAverageGuy2 described his first year in business: he used subs, reported them honestly at the audit, and had certificates of insurance for all of them. It still cost him over $10,000, because the certificates did not show the subs carrying their own workers comp and he had no signed subcontractor agreements. In his words, "they had no pity."
He was not disorganized. He collected documents. He collected the wrong ones, with nothing contractual behind them.
The second cost is worse and rarely mentioned. A contractor in r/Insurance_Companies described what happened to someone he knew when a sub's workers comp expired and an accident happened on site. The general contractor's own insurance paid the claim, then dropped him, and he struggled to find new workers comp coverage. The back premium is a bill. Losing your carrier is a business problem.
A subcontractor with insurance can still count as uninsured
This is the part almost no COI guide covers, and it is why careful contractors still get surprised.
Builders Mutual, a construction insurer, published an audit explainer with Kevin Steger, its premium audit technical manager. Citing general liability payroll inclusion rule 24.E.2 from the Insurance Services Office, it lists subcontractors whose payments count as uninsured on your general liability audit even when they carry general liability insurance, because of the direction and control you exercise over them:
- Crane with operator. You decide what gets lifted and where it goes. Included at 33.33 percent of what you paid, the remainder discounted as equipment expense.
- Concrete pumping. Same logic. Included at 33.33 percent.
- Temporary agencies. Included at 100 percent, because they supply labour only.
- Leased employees. Included at 100 percent.
Then there is the threshold rule. Any subcontractor whose general liability limits fall below what your carrier requires is considered underinsured and treated as uninsured. Builders Mutual ties the required limits to your policy prefix: some policies require subs to carry at least $300,000 per occurrence and $600,000 aggregate, others require subs to match or exceed your own limits.
That changes what your tracking sheet has to hold. Recording that a sub is insured is not enough. You have to record the limits and compare them against a number your own carrier sets. A tick box that says "COI on file" will not save you.
Watch out
Steger notes one asymmetry worth knowing. There are no required workers comp limits for subcontractors: if a sub has workers comp at all, they count as insured on the comp audit regardless of limits. General liability is where the threshold bites.
Nobody is going to tell you when the policy cancels
Here is the structural problem with a certificate file, and it is not laziness.
A certificate is true on the day it is printed and says nothing about the day after. The current ACORD 25 states plainly that it is issued as a matter of information only and confers no rights upon the certificate holder, and that if the certificate holder is an additional insured, the policy itself must be endorsed.
On cancellation, the form now says only that should any of the described policies be cancelled before the expiration date, notice will be delivered in accordance with the policy provisions. Older versions carried language about the insurer endeavouring to notify the certificate holder, and even that was non binding. The obligation runs to the policyholder, not to you.
It goes further than the form being silent. Insurance educator Bill Wilson reports that agency errors and omissions experts advise agents not to notify certificate holders of cancellations at all. Their relationship is with their insured, not with you, and an agency that habitually notifies certificate holders and then misses one creates its own liability. Wilson also notes that no ISO additional insured endorsements require notice to the certificate holder.
So the practical assumption is this. Between the day a certificate is issued and its printed expiry date, the coverage behind it can vanish, and the system is built so that you hear from nobody. A project manager in r/ConstructionManagers put the felt version well: the frightening part is not storing the documents, it is realizing something expired two weeks ago and only finding out because someone asked for it.
That is why the verified date belongs in your sheet as its own column, separate from expiry. Expiry is when the paper says coverage ends. Verified is the last time anyone confirmed it was still real.
Certificate holder is not additional insured
Two boxes on the same page, routinely confused, and the difference decides who pays.
The certificate holder box says who asked for the certificate. That is all it says. Additional insured status gives you actual rights under the subcontractor's policy, so a claim can go to their insurer rather than you suing the subcontractor and hoping. It takes an endorsement on the policy itself. Additional insured language typed into the description of operations box is a claim to be verified, not proof: ask for the endorsement document, and give it a column.
Note also whether each policy is occurrence or claims made. Occurrence responds to incidents that happened during the policy period no matter when the claim arrives. Claims made only responds to claims filed while it is active, so a sub whose claims made policy lapses after the job leaves you exposed on work that was covered when it happened.
If your subcontractor compliance lives in a spreadsheet that nobody owns, the fix is usually not another spreadsheet. We build custom CRMs where the sub record, the expiry dates, the signed agreement and the payment approval sit on the same screen, so a lapsed certificate stops a cheque automatically instead of surfacing at audit.
In Ontario, the COI is only half the file
Every guide ranking for this topic is American, which leaves Canadian contractors solving the wrong problem carefully.
If you hire subcontractors for construction work in Ontario, a certificate of insurance does not cover your WSIB exposure. That takes a clearance certificate, a separate free document, and the WSIB's published rules are specific:
- A clearance protects you from the sub's unpaid premiums. By issuing one, the WSIB waives its right to hold the principal liable for unpaid premiums and other amounts the contractor owes.
- Clearances are valid for up to 90 days and must cover the full length of the job. If the work outlasts the clearance, you get a new one.
- Most clearances expire on the 20th of February, May, August and November. Four dates a year, not fifty scattered ones, which makes them far easier to schedule around than COIs.
- Working without one is an offence for both parties. The WSIB states that if construction work goes ahead without a valid clearance number, both the contractor and the business that hired them are committing an offence, with a maximum fine on conviction under the WSIA of $100,000.
- The obligation flows down the chain. If your subcontractor hires their own sub, they become the principal for that work and need a clearance of their own.
- There is a residential exemption. A contractor hired directly by a home's resident, occupant or a family member for repairs or renovations does not require a clearance certificate.
That last point changes the scope. A renovation company working directly for homeowners has a narrower obligation than a builder acting as principal on a chain of subs. Know which you are before building the process.
The WSIB runs the tooling itself: keep a contractor list, search by certificate number, and subscribe to notifications that email each new clearance as it is generated. For a stable roster of subs, that does a large slice of the job for nothing.
The seven step system
1. Put the requirement in the subcontract before you put it in a spreadsheet
The $10,000 lesson from r/GeneralContractor was not a tracking failure. It was a contract failure. Collecting certificates for subs who had no signed agreement obliging them to carry anything gave him documents with nothing behind them.
Your subcontractor agreement should name the coverages, the minimum limits, the additional insured requirement and the obligation to give you renewal certificates. Everything downstream is enforcement of that clause. Without the clause, you are asking favours.
2. One row per sub, five columns
Not one folder per project. Subs renew on their own schedule, so the tracking unit is the subcontractor.
The columns: coverages carried, limits for each, earliest expiry across all policies, additional insured endorsement received, date last verified. A contractor in r/Insurance_Companies keeps his deliberately blunt, with a checkmark column for "meets requirements" and one for soonest expiration date, and says under 20 subs that is entirely sufficient.
3. Fire reminders on a cadence, to both sides
Two cadences show up repeatedly from people actually doing this: 60, 30 and 15 days before expiry, or a tighter 30, 14 and 7.
Send it to the subcontractor and to yourself. The project manager in r/ConstructionManagers who described his ideal system ranked one thing above dashboards and AI: both sides getting nudged before it becomes a problem. A reminder that only reaches your inbox creates work. One that reaches the sub creates a certificate.
4. Gate the cheque, not the site
This is the step that makes the other six work.
Blocking site access sounds stricter and fails in practice, because the person enforcing it is a foreman with a schedule to hit. Payment is different. It is enforced by the office, it lands late enough that the sub is fully motivated, and it does not stop the job that day.
One contractor in r/GeneralContractor runs it as policy: he tells his guys plainly that if they do not carry workers comp, he cannot pay them. He also explains the ghost policy option, an inexpensive workers comp policy written with the owner excluded, which produces a valid certificate for audit purposes without providing the owner injury benefits. That is worth being able to explain to a one person sub, because "get insurance" sounds expensive and "get a ghost policy" is a cheap, specific instruction.
5. Verify the certificate came from the broker
Take the certificate from the producer, the agency named in the top left of the form, not as a forwarded PDF from the sub. When in doubt, call that agency with the policy number.
Altered expiry dates and coverage limits are the most commonly forged fields, because faking them means editing a handful of characters on an otherwise genuine document. Other signals worth a second look: inconsistent formatting or crooked fields, misspelled carrier names, and NAIC numbers that do not match the insurer.
6. Keep expired certificates, filed by date
Do not overwrite. General liability includes a products and completed operations aggregate, the coverage that answers for claims arising from finished work, and those claims land long after the crew has gone. The certificate you will need is the one in force on the dates the work was performed.
File by subcontractor and by date range, so you can answer "what coverage did this sub have in August 2024" and not only "what do they have now."
7. Pre build the audit folder
Your premium audit is annual and its date is known. The gathering takes the time.
One contractor described spending four or five hours "dialing for COIs" before each audit, calling each sub's insurer individually because they all renew on different dates. Another in the same thread replied with the whole thesis in six words: "Just did my audit in 10 min. Stay organized."
If your tracker holds the verified date and the certificate for every policy period, the audit folder is a filter, not a project.
When the spreadsheet stops being enough
There is a real threshold, and a contractor in r/Insurance_Companies has done the honest arithmetic on it. At 20 subs, asking only for general liability and workers comp, he estimated 2 to 3 hours a month. At 50 subs, wanting general liability, workers comp, auto and endorsements, he put it at 15 to 25 hours a month, most of the variance coming from chasing the right documents. He pays about $40 a month for a tool that also holds W-9s and signed agreements, and his conclusion was pragmatic rather than evangelical: not everyone needs software, but once it takes a few hours here and there, the maths stops being close.
A commenter in the same thread flagged why small contractors rarely find a tool that fits. The well known platforms are built for enterprise portfolios and have historically wanted a minimum of around 200 tracked certificates, which prices out smaller teams entirely. That is also why the search results for this topic read the way they do. They are written by companies that will not sell to you.
Another operator running 40 to 60 active vendors said a spreadsheet plus alerts at 60, 30 and 15 days is still manageable, but only with one dedicated person updating the master sheet weekly. That condition does all the work in the sentence. A contractor in r/GeneralContractor admitted that on a project that went sideways he gave up on daily reports, subcontracts, schedule and COIs together. Compliance is the first thing dropped when a job goes wrong, which is exactly when your exposure peaks.
The structural fix is to stop treating compliance as separate admin and attach it to something that has to happen anyway. Payment has to happen. If the sub record and the payment approval live in one system, a red row blocks a cheque without anyone remembering to check. Same reasoning as moving job tracking out of paperwork, and if you also supply certificates upward, the same file answers property manager credentialing requests the day they arrive.
The 10 minute audit readiness checklist
Run it once a quarter. Ten minutes per subcontractor the first time, two minutes after that.
- Does every active sub have a signed subcontractor agreement naming required coverages and limits?
- Does every certificate show workers comp, not just general liability? If a sub is exempt, do you hold the state or provincial exemption document or a ghost policy certificate rather than a verbal assurance?
- Do the general liability limits meet or exceed the threshold your own carrier requires?
- Where your contract requires additional insured status, do you hold the endorsement, not just wording typed into the description box?
- Are any policies claims made rather than occurrence? If so, what happens when they lapse?
- Is the earliest expiry date across all policies in your tracker, with reminders set?
- In Ontario, is there a valid WSIB clearance covering the full duration of each active job?
- Are subcontractor invoices itemized into labour and materials, so an auditor cannot apply a default labour split against you?
- Are expired certificates archived by date rather than overwritten?
- Can a cheque be released today for a sub whose row is red? If yes, fix that before you fix anything else on this list.
Item 8 is the quiet one. Even when a sub turns out to be genuinely uninsured, itemized material receipts reduce the payroll basis the auditor assesses you on. Requiring itemized invoices costs nothing and caps the damage on the day something else has already gone wrong.
