Construction & Contracting// diagnostic

The insurance certificate expired three weeks before anyone noticed

In short

An expiry that escapes is nearly always a data-shape problem: the system holds 1 renewal date per subcontractor, while the real world holds one per policy, per project, per requirement. Build the matrix — sub by policy type by project, earliest expiry first, crews on site flagged — and the holes show in one screen.

Key takeaways

  • One expiry date per company cannot represent 4 policies renewing on 4 different dates.
  • Most renewals arrive as a certificate alone, so the file quietly reverts to unverified while looking green.
  • Requirements differ per project, so a sub can be compliant on one job and not on the next that afternoon.
  • Route the alert to whoever can hold a payment or the gate. Everyone else forwards it.
  • A compliance state that gates nothing is documentation. The gate is what makes it a control.

The certificate did not expire quietly. Your record of it did. Nearly every escape has one cause: the system stores a single expiry per subcontractor, while that subcontractor carries several policies renewing on different dates, against requirements that differ from project to project. One date cannot represent that, so it represents whichever one somebody happened to key in.

Build the matrix before buying alerting. Rows are subcontractor and policy type, columns are the projects each is engaged on, cells hold the expiry and the verification state, sorted with the earliest expiry at the top and anyone with a crew on site this week flagged. Most contractors find the hole inside 5 minutes, and it is rarely the sub they were worried about. What proves the cover in the first place is the endorsement rather than the certificate; this page is about the dates.

The matrix that shows the hole in one screen

  1. List active subcontractors per project from executed subcontracts and open commitments, not from the vendor list. The vendor list contains everyone you have ever paid; you need everyone who can walk through a gate this month.
  2. List the policy types each project actually requires, taken from that project's own insurance exhibit rather than from a company-wide default.
  3. For every cell, record 4 things: the document on file, the expiry printed on it, whether the endorsement is present, and the date a named person verified it.
  4. Flag every subcontractor with labour on site in the next 14 days. That flag is what turns the matrix from a report into a morning's work.
  5. Sort by earliest expiry and count the cells that are empty, the cells that are stale, and the cells where a date exists but no document does.
  6. Do it manually the first time, on 1 project, before commissioning any system. The pattern of the holes is what tells you which of the causes below you have.

Five ways an expiry gets past you

CauseSignature in the matrixWhat closes it
Expiry stored on the company1 date on the vendor record; policies with different real dates behind itMove the date onto the policy, and the policy onto the project engagement
Renewal arrives as a certificate onlyCurrent expiry, endorsement field empty or holding last year's fileTwo acceptance states: date updated, and evidence verified by a person
Project requirements not modelledSame sub compliant on one job, non-compliant on another with the same fileA requirement set per project, versioned with the contract exhibit
Alerts go to somebody with no leverageAlerts were sent for weeks and nothing changedRoute to the person who can hold a payment or refuse the gate
Compliance state gates nothingEverything documented, work proceeding regardlessBind the state to site access and to payment release
Ranked by how often each is the real cause when a lapse is found late

One date on the company record is the defect

The shape the problem actually has is 4 objects, and most systems ship with 1. Until they exist separately, every fix downstream is a workaround.

  • The entity. The legal entity holding the policy, which is not always the name on your purchase order and is almost never the trading name on the sign.
  • The policy. One row each, with its own insurer, number and expiry, because general liability, workers compensation, commercial auto and any excess layer renew on their own clocks.
  • The evidence. The documents themselves, each with an issue date and the date a person verified it — 2 dates that answer different questions.
  • The requirement. What this project demands, versioned with the contract exhibit, so a change in requirements re-opens the check rather than silently passing against last year's rule.

With those 4 in place, the matrix is a join rather than a spreadsheet somebody maintains. Without them, you are storing a status where a relationship belongs, and every subsequent report inherits the error.

The renewal that arrives without the part that matters

This is the failure that hides best. The broker sends a fresh certificate a week before renewal, somebody updates the expiry, and the row turns green. The endorsement was never reissued, or was reissued and never sent. The file now looks healthier than it did last month while proving strictly less.

A renewal that updates the date and not the evidence makes the file look healthier at exactly the moment it proves less.

The mechanical fix is to make renewal reset 2 states rather than 1. A new expiry sets the date state; only a person who opened the endorsement can set the evidence state, and their name and the date go on the row. Any bulk import that sets both at once should be impossible, because that is precisely how 200 cells end up verified on the same afternoon.

Send the alert to somebody who can stop something

Alerts fail on routing more often than on timing. A project engineer who receives 30 reminders a week and can neither hold a payment nor refuse a gate forwards them, and the forwarded message arrives without the authority that made it worth reading. The subcontractor's broker, meanwhile, owes you nothing at all and will act on their own client's instruction, not yours.

  1. At 45 days, request the renewal from the subcontractor with the project's requirement attached, so they can hand their broker something specific rather than a reminder.
  2. At 30 days, chase the named contact and copy the project manager. Ask for the endorsement explicitly, by name, because otherwise a certificate is what comes back.
  3. At 14 days, escalate to whoever approves their payment application, and record the escalation on the row.
  4. At 7 days, send the notice that says what happens: the next application does not release and site access is suspended on expiry. Send it to the person who signs, not to the site.
  5. On the day, apply it. A threat that lapses twice is a threat the pool has learned to ignore, and after that no cadence works.

A state that gates something, or it is just a folder

Two enforcement points actually work: the gate and the money. Both need the subcontract behind them, which means the right to withhold is decided at buyout rather than invented later by whoever maintains the register — the checkpoints for that sit in running buyout from award to executed subcontract. Whether to withhold in a given case is a question for your counsel, not for a workflow rule.

  • Site access reads the compliance state directly. If badging, induction or the visitor log runs on a separate system, that system needs the state, not an email about it.
  • The payment application workflow blocks with a named override rather than a silent bypass, and the override records who granted it and why.
  • Every override expires. An exception with no end date is a permanent hole with a person's name on it.
  • Non-compliance is visible on the project dashboard the superintendent already looks at, not only in the compliance module nobody opens.

If 6 years of this currently lives in spreadsheets, resist migrating the sheets as they stand — they encode the 1-date-per-company defect, and importing them reproduces it in a new system. Rebuild the matrix as 4 objects and load the documents against it, which is the same discipline as moving six years of job history off spreadsheets.

There is a bidding-side tail to this too. Requirements are priced at bid time, and a bidder who cannot meet them either absorbs the cost or excludes it, which is one route by which the low bid turns out to be missing scope. Whether that difference is even visible across bidders depends on having somewhere to record it, which is levelling sub bids without a fresh spreadsheet each time.

Built, this is a document store, 4 tables, a nightly job and 2 integrations — payment and the gate. Unglamorous, and the kind of scope we take on as internal tools and operations. This page sits in bidding, prequalification and subcontractor management, part of our construction and contracting work.

Frequently asked questions

Short answers to the follow-ups this page tends to raise.

Why do subcontractor insurance certificates expire without anyone noticing?

Because the expiry is usually stored once, on the company record, while the subcontractor carries several policies that renew on different dates against requirements that differ per project. The single date gets updated whenever any document arrives, so the record looks current while a specific policy has lapsed. The second most common cause is a renewal that arrives as a certificate with no endorsement behind it.

When should we start chasing a subcontractor's renewal?

Around 45 days out, and with the project's requirement attached rather than a generic reminder. Brokers need something specific to act on, and the subcontractor is the one who has to instruct them. Escalate at 30 days to the project manager, at 14 days to whoever approves their payment application, and at 7 days send the notice that states what happens on the expiry date.

Can we hold a subcontractor's payment when their insurance lapses?

Only if the subcontract gives you that right, which is why it is a buyout question rather than a compliance-module setting. Whether to exercise it in a given case is a matter for your counsel and your risk manager. What the system can do without any judgement is make the state visible at the moment the payment application is processed, block it with a named override, and record who released it.

Can certificate tracking be automated?

The dates, the chasing and the routing can be. Reading an endorsement and deciding whether it satisfies your contract cannot, and any tool claiming otherwise is doing the part that requires a broker's or a lawyer's judgement. Build the automation around extraction that drafts and a person who confirms: the system proposes the expiry and the document type, and a named human sets the verified state.

  • compliance
  • subcontractors
  • risk
  • operations
// shipped work

The work behind this page

Builds from our portfolio that this page draws on.

Working on something in this space?

Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.

Start the conversation