Keep one tracker with a row per document, not per subcontractor: policy type, insurer, limit, expiry date and status. Have AI read each new certificate into those fields and draft reminders for 60, 30 and 7 days before expiry, while a named person approves every certificate. Nothing is approved, rejected or locked out automatically.
Per-document rows matter because a subcontractor is rarely simply "insured" or "not insured". Liability cover can be current while workers' cover lapsed last Friday, and a certificate that expires before the project ends is a problem on day one, not on day 200. The AI's job is reading and drafting. The approval, and the decision to let a crew onto site, stay with a person.
The document pack: what every subcontractor sends before day one
Start with the list, because the tracker is only as good as the pack behind it. Tailor it by trade: a roofer needs working-at-height method statements, a decorator probably does not need professional indemnity. This is the base version, with what a reviewer checks on each item.
| Document | What the reviewer checks | Expires? |
|---|---|---|
| Signed subcontract | Entity name and signatory match the subcontractor; scope and price match the quote | No |
| General or public liability certificate | Limit against your minimum, policy period, named insured, activities covered, extra wording your contract asks for | Yes |
| Employer's liability or workers' compensation, whichever applies | In force for the crew size, named insured, policy period | Yes |
| Vehicle cover, if vehicles come on site | Covers business use; policy period | Yes |
| Professional indemnity, design-responsible trades only | Limit, period, and any retroactive date shown | Yes |
| Trade licence or registration | Number, scope of work it covers, expiry | Yes |
| Safety policy and a method statement or risk assessment for this job | Current, and written for this work rather than generic | Per project |
| Training and competency cards for the crew | Names match the site list; expiry dates | Yes |
| Payment details form | Bank details confirmed by a call to a number you already hold, never by email alone | Re-check on any change |
| Site induction record | Date, who delivered it, who attended | Per project |
Six of those ten items carry an expiry date, which is why the unit of tracking is the document. AI in contracting: a subcontractor paperwork chasing checklist covers the paperwork you chase beyond insurance, and can ChatGPT draft a subcontractor agreement is the place to settle the insurance minimums the tracker will test against.
Build the tracker: a row per document, formulas that count days
Use a spreadsheet you already have. The columns are: subcontractor, project, document type, issuer, policy number, limit, start date, expiry date, project end date, days left, status, covers project end, limit check, approved by, approved on, link to the file, notes. The formulas below work in both Excel and Google Sheets. They assume expiry is in column H, project end in I and limit in F, with your minimum liability limit in cell $Q$1.
Days left (J2): =IF(H2="","",H2-TODAY())
Status (K2): =IF(H2="","Missing",IF(H2<TODAY(),"Expired",IF(H2-TODAY()<=30,"Due soon","Current")))
Covers project end (L2): =IF(OR(H2="",I2=""),"",IF(H2>=I2,"Yes","No"))
Limit check (M2): =IF(F2="","n/a",IF(F2>=$Q$1,"Meets","Below"))
Colour the status cells red for Expired and No, amber for Due soon and Below, green for Current and Yes. Leave "approved by" and "approved on" as typed cells with no formula, so that only a person can fill them. Here is an illustrative slice as at 10 March, for a project ending 15 June with a $2,000,000 minimum liability limit:
| Subcontractor | Document | Limit | Expiry | Days left | Status | Covers project end | Limit check |
|---|---|---|---|---|---|---|---|
| Electrical | Liability | $2,000,000 | 30 Apr | 51 | Current | No | Meets |
| Electrical | Workers' cover | n/a | 12 Mar | 2 | Due soon | No | n/a |
| Roofing | Liability | $1,000,000 | 18 Nov | 253 | Current | Yes | Below |
| Roofing | Vehicle | n/a | 3 Mar | -7 | Expired | No | n/a |
| Plumbing | Liability | $5,000,000 | 22 Jun | 104 | Current | Yes | Meets |
| Plumbing | Trade licence | n/a | blank | Missing | n/a | ||
| Drywall | Liability | $2,000,000 | 9 Apr | 30 | Due soon | No | Meets |
| Drywall | Training cards | n/a | 1 Oct | 205 | Current | Yes | n/a |
Read what the sheet catches that a plain "current or expired" view would not. The electrical subcontractor's workers' cover lapses in two days, and its liability, though current, ends six weeks before the job does. The roofer's liability is current and covers the project, but the limit is half your minimum. The roofer's vehicle cover expired a week ago. The plumber's licence was never supplied. The drywall liability is thirty days out and also falls short of the project end. Six of the eight rows need a human action, and a status column alone would show Current against two of those six.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowLet AI read the certificate, then check its reading
Certificates arrive as PDFs, phone photos and scans of paper. Reading them into fields is the dull job AI does well enough to save time and badly enough to need a check. Use a prompt that forbids guessing and makes the tool show its assumptions:
Read the attached certificate of insurance and return one table row with these fields:
Policy type | Insurer | Policy number | Named insured | Limit each occurrence | Limit aggregate | Policy start | Policy expiry | Certificate holder | Additional wording shown (yes/no, quote it) | Certificate issue date
Rules
- Copy dates exactly as printed, then give the date in YYYY-MM-DD and state which day/month order you assumed and why.
- If a field is not shown, write NOT SHOWN. Never infer or fill in a likely value.
- List any text you could not read.
- Do not say whether the cover is adequate. Only report what the page says.
An illustrative output for a general liability certificate: named insured "[subcontractor name] Ltd"; limit $2,000,000 each occurrence and $4,000,000 aggregate; policy start printed 01/05/2026 and expiry 30/04/2027, read as day/month because 30 cannot be a month; additional wording NOT SHOWN; certificate issue date 14/02/2027; unreadable: last three digits of the policy number. That is a useful row, and it still needs a person to open the PDF beside it.
The reason is that mistakes are quiet. Picture a certificate that prints an expiry of 04/03/2027 in day/month order, meaning 4 March. A model that assumes month/day reads it as 3 April, and the tracker shows a month of cover that does not exist. Because the prompt demands a stated date order, the assumption is visible in the output, and an approver comparing the PDF with the row catches it in under a minute. Make that comparison the rule for every new entry:
- Dates. Policy period against the row, in the order printed. An expiry earlier than the start, or a start in the future, is a red flag.
- Named insured. Must match the entity that signed the subcontract. A sister company or a parent is not the same insured.
- Limits. Each occurrence and aggregate are different numbers. Check the model has not swapped them.
- Scans and photos. Image-only scans are the hardest case. The main assistants accept PDFs and photos, but OpenAI's file-upload FAQ does not say how well ChatGPT reads a scanned page with no text layer, and no vendor promises an accurate reading of a crooked or low-resolution scan. Test a handful of your own scans and compare each by eye before trusting the output.
The gap check: compare each certificate with your minimums
Keep your minimums on one small sheet, taken from your subcontract: liability limit per occurrence, workers' cover or employer's liability, vehicle cover where vehicles attend, any extra wording you require, and the number of days' notice of cancellation you ask for. Then ask the model to compare, with a three-way answer and no approval language:
Compare this extracted certificate row with our minimum requirements below.
For each requirement, answer one of: APPEARS TO MEET, APPEARS NOT TO MEET, CANNOT TELL.
Give the exact text or number you relied on. If the answer is CANNOT TELL, say what a person should check.
Do not use the words approved or compliant.
Requirements: liability $2,000,000 each occurrence; policy must run to [project end date]; named insured must be [subcontract entity]; ...
On the earlier sample, an illustrative result reads: limit APPEARS TO MEET; period APPEARS NOT TO MEET because expiry is 30 April and the project ends 15 June; named insured CANNOT TELL, because the certificate shows a trading name and the subcontract shows a registered name. Each result gives the approver a specific question, not a verdict.
A certificate is a summary issued by a broker or insurer. It does not show every exclusion or endorsement. For high-risk trades or large subcontracts, ask for the relevant policy pages or a written confirmation from the broker. Where the answer is "not yet", use a Conditional status with a date: approved to start only once the missing item arrives by the stated deadline, set by a person and logged. For the wider routine of handling this paperwork, carrier packet onboarding with AI is a close cousin, and its insurance checks transfer almost unchanged.
When the limit is short: three ways to settle it, and the log entry
Take the roofer from the sample: liability at $1,000,000 against a $2,000,000 minimum, with the project running to June. The gap check says APPEARS NOT TO MEET. Three outcomes are normal, and the decision belongs to a person:
- Top up. The subcontractor asks the broker for an excess or umbrella policy, or raises the primary limit, and sends a new certificate. The status stays Conditional until it arrives, with a date.
- Waive in writing. A named senior person accepts the lower limit for a low-risk scope, records why and sets an end date for the waiver. Do this rarely, and never let the tool propose it.
- Decline. The subcontractor is not approved for this project, and the reason is logged in factual terms ("liability limit below project minimum; no top-up offered by [date]"), not as a judgement of the firm.
Whichever path you take, write the decision into a log the whole team can see. An illustrative entry: "Roofing, liability $1,000,000 against $2,000,000 minimum. Status: Conditional until 24 March. Condition: certificate showing excess cover that brings the total to $2,000,000 or more, naming [subcontract entity]. Decided by [approver], 10 March. If not received by 24 March: not approved for this project; project manager informed." That entry has a condition, a date, a named decider and a default outcome. Those four things are what make a later conversation short.
Reminder emails: 60 days, 30 days, 7 days and expired
Four short emails, each with one ask, one deadline and one place to send the certificate. Have AI draft them from your subcontract's insurance clause, then fix the tone and the consequences yourself. Use "[first name]" and "[your name]" placeholders, not real names. Here are illustrative versions:
60 days. Hi [first name], a quick heads-up that your liability certificate on file expires on [date]. No action today. When the renewal comes through, please send the new certificate to [shared inbox] so we can update our records. Thanks, [your name]
30 days. Hi [first name], your liability certificate expires on [date], 30 days from now. Please send the renewal to [shared inbox] by [date]. Our subcontract needs current cover on file before your crew is on site, so it is worth asking your broker now. [your name]
7 days. Hi [first name], your certificate expires in 7 days, on [date]. Under clause [number] of our subcontract we cannot have your crew on site after that date without a current certificate. If renewal is in progress, a written confirmation from your broker helps us. I will phone you tomorrow. [your name]
Expired. Hi [first name], our records show your liability cover expired on [date] and we have no renewal. Please send the current certificate to [shared inbox] today. Until it is received and approved, we cannot allow work on site. If there is a reason for the gap, call me on [number]. [your name]
The seven-day and expired emails state a consequence, so check that the consequence is the one your contract actually gives, and have a solicitor review that wording before it becomes standard. A model asked for a "firm" email tends to invent threats such as withholding payment or terminating the subcontract. Tell it to quote the clause and add nothing.
Draft four reminder emails (60 days, 30 days, 7 days, expired) for a subcontractor's liability certificate.
Facts: our inbox is [shared inbox]; the contract clause is pasted below; we phone at 7 days.
Rules: plain words, under 90 words each, one ask, one deadline, no threats beyond the clause, do not say anything is approved, use [first name] and [your name] placeholders.
Clause text: [paste clause]
The sum shows why this is worth doing. Say a general contractor has 24 active subcontractors with four expiring documents each: 96 documents. If each renews once a year and gets up to three reminders, that is up to 288 emails. Written by hand at four minutes each, that is about 19 hours a year. With four templates, a mail merge and one minute of review per email, it is about five hours. All of these numbers are illustrative, and the saving comes from the templates and the sheet, with AI mostly speeding up the first drafts.
Onboarding stages, with one status that only a person can change
Treat onboarding as a line of stages with one owner each. The tracker above covers insurance documents, and the same status column can run the whole pack.
| Stage | Who | What happens | Typical time (illustrative) |
|---|---|---|---|
| 1. Invited | Project coordinator | Subcontractor receives the pack list and the shared inbox or folder link | 10 minutes |
| 2. Pack received | Coordinator | Files logged, one tracker row per document | 15 minutes |
| 3. AI pre-check | AI, run by coordinator | Certificates read into fields; gap check against minimums; list of questions produced | 2 minutes a certificate |
| 4. Human review | Named approver | Opens each PDF beside its row; answers the AI's questions; makes calls | 10 to 15 minutes a subcontractor |
| 5. Decision | Named approver | Types Approved, Conditional (with date) or Not approved, with name and date | 1 minute |
| 6. Induction | Site manager | Induction recorded; crew list matched to training cards | Per site |
| 7. Active | Site manager | Subcontractor appears on the site access list | Reviewed weekly |
Two rules keep this honest. First, stage 5 is typed by a person and no formula, automation or AI can write it. Second, the site access list is a filter of subcontractors who are Approved and have every document Current, and the site manager reads it every Monday before anyone is turned away or let in. If a subcontractor drops off the list because a document lapsed, a person picks up the phone, not a script.
Where the tracker fails: six realistic breakdowns
- The wrong company. The certificate belongs to a parent or sister company, while the subcontract was signed by a different one. The AI row looks perfect because the certificate is fine; the problem is who it covers. Fix: the named-insured check against the subcontract, every time.
- The invisible gap. A renewal arrives with a start date a week after the previous policy ended. Read one at a time, both certificates look current. Fix: when you log a renewal, compare its start date with the old expiry and note any gap.
- The poor scan. A crooked phone photo with a thumb over the limit. A model may fill the field with a plausible number. Fix: the NOT SHOWN rule in the prompt, plus the PDF-beside-the-row check.
- The cancelled policy. A subcontractor changes insurer part-way through the term and the earlier policy ends, but the certificate on file does not change. No spreadsheet can see this. Fix: for long projects, ask for a broker's confirmation at set points, and put a spot check on the Monday routine.
- Reminder fatigue. Three emails to the same general inbox are ignored. Fix: send to the named insurance contact, make each email a single ask, and phone at seven days.
- One person holds the process. The coordinator is on leave and the tracker stops being read. Fix: write the Monday routine below on one page and name a deputy.
The Monday routine: fifteen minutes a week
- Open the tracker and filter the status column to anything other than Current. Also filter "covers project end" to No for active projects.
- For each row, check whether a reminder has already gone and whether the next one is due. Paste the contact and dates into your reminder prompt and review each draft before sending.
- Phone anyone at seven days or less with no renewal in hand. Log the call in the notes column.
- Read the site access list against the week's site plan. Anyone expected on site who is not Approved or has an Expired document goes to the site manager the same morning.
- Once a month, pick five approvals at random and compare each PDF with its row. Record what you found in a short log, including the cases where nothing was wrong.
- Once a year, revisit your minimums with your broker and update the requirements sheet, then let the tracker's limit check run against the new numbers.
On cost, the tracker is free if you already pay for a spreadsheet, and the AI part sits inside any chat plan you have. Certificates carry policy numbers and business addresses, so read them in a workspace on a business plan. ChatGPT Business, Claude Team and Microsoft 365 Copilot keep business content out of training by default; on a personal plan you would have to find and switch off the training setting yourself. ChatGPT Business and Claude Team each list at $20 a seat a month billed annually or $25 monthly, for two seats or more, so check whether a plan your office already holds covers this before adding seats.
Collecting the documents without friction
Pick one place where documents land. A dedicated inbox such as the shared address in the reminder emails keeps every certificate together, and a folder per subcontractor keeps the files tidy. If you collect through a form, Google's help page says a file-upload question requires respondents to sign in to a Google account, and that the files are stored in a folder in the form owner's Drive. Plenty of subcontractors will not or cannot sign in, so give them an email route as well.
Keep bank and tax details out of AI tools altogether. The insurance check needs only the certificate. The payment details form is verified by a phone call to a number you already hold, because a changed bank account in an email is a classic fraud route.
Once the tracker works, the same pattern extends to the front of the funnel: building and scoring a prequalification questionnaire decides who gets invited, and getting payroll and subcontractor records ready for a workers' comp audit shows the other time these certificates are asked for. If you are writing a policy for how your team uses AI on this paperwork, an AI policy for a construction company sets out what staff may paste where.
Questions contractors ask about tracking subcontractor cover
Can AI approve a certificate automatically?
It can pre-check one, but it should not approve. An approval says your business accepts the risk of that subcontractor being on site, and the tool cannot know your contract's exceptions, your project's risks or what the broker told you by phone. Let AI fill the fields and flag gaps, and have a named person type the approval and the date.
How far ahead should expiry reminders go?
Sixty, thirty and seven days before expiry works for most firms, because renewals often take a few weeks and brokers are slow in busy months. Add a fourth message the day after expiry. Send reminders to the person who handles insurance at the subcontractor, copy the broker if you hold the address, and phone at seven days if nothing has arrived.
What if the subcontractor's broker sends the certificate?
That is usually better, since the broker can issue it quickly and it comes from the party that holds the policy. Treat it exactly like any other certificate: log it in the tracker, check the named insured against the subcontract, and have your approver confirm. Ask the subcontractor to tell the broker your shared inbox address once, so renewals arrive without chasing.
How long should I keep expired certificates?
Keep them at least as long as your contract, your own insurer and any record-keeping rules that apply to you require, and ask your adviser for the exact period. Store them with the date approved and who approved them. A superseded certificate can matter years later if a claim relates to work done while it was in force.
Further reads
- AI for Building Contractors: Chasing Subcontractors and Progress Updates — Chasing subcontractors for progress as well as paperwork.
- Contractor Insurance Renewal: Gather the Figures Before Your Broker Calls — Your own insurance renewal, with the figures to gather first.
- Pay Applications for Subcontractors: Schedule of Values With AI — What to do once approved subcontractors start billing.
- Use of AI in Quantity Surveying: Comparing Subcontractor Quotes — Compare quotes from the subcontractors you have approved.
- ChatGPT for General Contractors: 10 Prompts for Bids, Subs and Updates — More prompts for bids, subcontractors and client updates.
- Can AI Draft a Barber Chair Rental Agreement? What to Check — Draft a barber chair rental agreement with AI from your own terms, then see the status, lease, insurance and notice points a solicitor must check.
- AI Contract Management Software Demo: 10 Questions for Contractors — Ten demo questions for contractors, each with an example: data location, clause accuracy, retention dates, scans, export, price and cancellation.
- CIS Monthly Return: Software, Accountant or an AI-Built Sheet? — What you need to file a CIS monthly return, the April 2026 nil-return change, and how software, an accountant and an AI-built sheet compare.
- AI Tools for Contracting Businesses: Subcontracts and Change Orders — A small contractor's routine for AI on subcontracts and change orders: a clause comparison, a date tracker, a priced draft and what a lawyer still reviews.
- AI Tools for Home Builders: Build Schedules, Delays and Sub Chasing — A weekly routine for small home builders: sub-chasing messages, a delay log with float, selections worked back from lead times, plus the tools and prices.
- Apprentice Off-the-Job Training Log: What to Record and How AI Helps — An employer-side training log: the fields, a filled-in week, sign-offs, a month-end check against the provider's records, and where AI helps.
- Apprentice Training Plan for Trades Firms: Sign-Offs and Reviews With AI — A skills matrix, four-stage sign-offs and a weekly review sheet for a small trades firm, with AI drafting the paperwork and the owner signing.
- CIS Deduction Statement Template: Fill It From Your Payment Sheet With AI — The fields, the 14-day deadline and a payment-sheet method for a CIS deduction statement per subcontractor each month, with AI doing the checking.
- How Can AI Help Construction Project Managers? Submittals and Sub Chasing — A small-job guide to AI for project managers: submittal logs, subcontractor chasers and delivery confirmations, plus what must stay with a person.
- How Can AI Help General Contractors? Ten Jobs, Ranked by Effort — Ten jobs for a small contractor in three effort tiers, each with a worked example and the check that keeps a person in charge of the result.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Google's help page on Forms file upload questions (read in early November 2026), OpenAI's file-uploads FAQ, and vendor privacy defaults recorded for ChatGPT Business, Claude Team and Microsoft 365 Copilot. The tracker formulas were written for this tutorial and work in both Excel and Google Sheets.