You need to know, on any given day, which subs on site have cover that actually spans the job — not cover that was current when someone last checked. The trick is comparing expiry against the completion date, not against today.
Key takeaways
The honest answer is that you track four dates and one relationship, per sub, per project — and that a certificate of insurance is weaker evidence than most people assume, so what you build has to account for that weakness rather than paper over it.
It tells you that on the day it was issued, a broker believed a policy of a certain type existed, with certain limits, expiring on a certain date. It is a summary produced by an intermediary. It is not the policy, it does not contain the exclusions, and it does not stop the policy being cancelled the following week.
This matters most for additional insured status, which is the part everybody assumes and few verify. Being listed on a certificate and being an additional insured under the policy wording are different things, and the difference surfaces at the worst possible moment. Treadstone Law sets out what being an additional insured means and how it affects a coverage dispute.
A tracker that works is boring. Per subcontractor, per project: insurer and policy number; coverage type; limits; effective and expiry dates; whether your entity is named, and in what capacity; the project dates the cover has to span; and the date the certificate was issued, which tells you how stale your evidence is.
The comparison that catches problems is between the last two groups. A certificate expiring in March on a job running to August is not a compliant certificate; it is a compliant certificate today and a gap in five months. Any tracker that only alerts on expiry has already let the scheduling decision happen.
Certificates arrive as PDFs, scans and photographs of paper, in every broker’s house format. This is the classic document-understanding problem and there are named services for it. Azure Document Intelligence supports custom document models trained on your own labelled examples, so the fields you defined are the fields returned; Google’s Document AI documents its Enterprise Document OCR processor for reading text and layout out of scanned documents.
The part to design deliberately is what happens when the model is unsure. Microsoft’s documentation explains that a confidence score is an estimated probability between 0 and 1 that a prediction is correct, that a value of 0.95 means the prediction is likely correct 19 times out of 20, and that in accuracy-critical scenarios confidence can be used to decide whether to accept a prediction automatically or flag it for human review. It also recommends targeting an estimated accuracy of 80% or higher, and closer to 100% for more sensitive cases, with a human review stage for critical workflows.
Translated into a practical rule: the expiry date and the named-insured line are the two fields where a wrong extraction has consequences, so route those to a person whenever confidence is below your threshold. The other fields can flow through. That is a design decision you make once.
The four checks worth automating
Expiry before the job ends — compare the policy expiry with the scheduled completion date, not with today.
Named correctly — the legal entity on the certificate matches the entity on your subcontract, spelling and all.
Limits meet the subcontract — extracted and compared against what the contract required, rather than eyeballed.
Renewal received — a chase sent before expiry, and a hold on scheduling and payment if it does not arrive.
A frequent and expensive conflation. Liability insurance is a commercial contract with an insurer. WSIB coverage is a statutory scheme, and in Ontario construction the clearance is what evidences it. The WSIB explains that a clearance shows a business, contractor or subcontractor is registered and up to date with the WSIB and is valid for up to 90 days, so it needs its own renewal cycle in your tracker rather than being folded into the insurance row.
The statutory basis for that liability sits in the Workplace Safety and Insurance Act itself, not just in board policy: a person who directly retains a contractor or subcontractor is liable for the contractor’s unpaid WSIB obligations to the extent the contractor does not comply with them, under section 141.1. A liability policy does not touch that exposure at all — it is a separate statutory obligation to a different body, and no certificate of insurance is evidence of compliance with it.
Tracking is enforcement of something the contract already requires. Standard-form contracts handle this explicitly: the Canadian Construction Documents Committee describes CCDC 2 as covering insurance requirements among its general conditions, and points users to CCDC 41, its insurance requirements document. Whatever form you use, the subcontract should state the coverage required, the limits, the parties to be named, and the obligation to provide evidence of renewal — because a tracker without a contractual right behind it is just a list of things you would like.
Ontario’s guidance for renovation businesses makes the same point from the small-firm end, listing proof of insurance among the paperwork a contractor should always have to hand.
Illustrative, and not a measured outcome.
A mechanical contractor runs eleven active jobs with about forty subcontractor relationships. Certificates arrive by email. A rule routes anything with “certificate” or “COI” in the subject to a shared folder; extraction reads each one and writes insurer, policy number, limits, effective date and expiry into the compliance table against the matching sub. Two fields — expiry and named insured — are held for confirmation when the extraction confidence falls below the threshold, which is a few seconds of a coordinator’s attention rather than a retype.
The table then does the work nobody was doing before: it compares every expiry against the scheduled completion date of each job that sub is assigned to, and raises the gap in advance rather than on the day. When a certificate is missing, the sub does not appear on next week’s schedule, which is a far more effective chase than an email.
Treat it as evidence, not as the policy. It reflects a position on the date it was issued. If the exposure on a particular job is significant, ask for the policy wording or an endorsement confirming the status you were promised, rather than a summary of it.
Far enough that a renewal can actually be produced before the gap opens, which in practice means weeks rather than days, and a second chase if the first is not answered. The specific interval is a business decision; the principle is that the alert has to fire before the work is scheduled, not after the certificate lapses.
Blocking scheduling is the safety control and it should be automatic. Blocking payment interacts with your payment obligations under the contract and the legislation, so it should be a decision a person makes with the contract in front of them, not a rule the software applies on its own.
A 30-minute call is enough to tell you whether AI pays for itself here.