AI can pre-code supplier invoices to jobs and cost codes, flag costs that look wrong, recalculate a work-in-progress (WIP) schedule and draft retainage reminders. It cannot judge percent complete, approve a variation or release retainage. Your accountant still signs off the WIP schedule, the retainage balances and any journal that changes the books.
The mistake that costs most is letting an assistant write straight into QuickBooks or Xero. Keep the ledger as the record: the AI works on exports and hands back a list, someone holding the contract approves each item, and the bookkeeper posts it. Retainage is called retention in many contracts; either way, the contract rather than the software sets the percentage and the release terms.
Month end for a contractor with five live jobs and a bookkeeper in two days a week looks the same every time: about forty supplier invoices to code, a WIP spreadsheet updated from memory, and a retainage balance nobody has opened since the last release. Each of those is a check an assistant can run in minutes, provided it gets tidy inputs and a short list of rules.
The tools are modest: a spreadsheet, a business-plan assistant and exports from your accounting product. Allow an afternoon for the first run through five jobs, and expect later months to go faster, because the coding key, the prompts and the retainage register carry over.
Four checks, and the line AI never crosses
Month-end work in a construction firm splits into four checks, and the split shows where AI helps and where it has to stop. The table lists each check, what an assistant can do with an export, and the judgement that stays with a person.
| Check | What AI can do | What a person must decide | Where the result lives |
|---|---|---|---|
| Job cost coding | Match invoice lines to a job and cost code from your key, flag duplicates and odd dates | Which job a shared delivery belongs to; whether an invoice is a cost or a prepayment | Bookkeeper posts to the ledger |
| Job cost exceptions | List costs with no job, codes over budget, jobs with cost but no invoice | Whether an overrun is real or a posting error, and whether the client should pay for it | Variation and query log |
| WIP schedule | Recalculate percent complete, earned revenue and over or under billing; compare with last month | The estimated cost to complete, and whether a loss is coming | Accountant's signed schedule |
| Retainage | Reconcile amounts held to invoices, list release dates, draft reminders | Whether the release conditions have been met; whether to release a subcontractor's share | Retainage register and ledger |
Every item in the third column depends on a signed document or on someone who has stood on the site. That is the line. Keep a one-line record of who approved each AI suggestion (initials and a date in a column on the sheet is enough) and the audit trail takes care of itself.
Build the coding key before the first prompt
An assistant codes badly when it may invent categories, so give it a closed list. Here is a sample key for a small building contractor; use your own numbering and wording. The right-hand column does the most work, because it holds the vocabulary that appears on real invoices.
| Code | Cost code | Words that usually appear on the invoice |
|---|---|---|
| 010 | Site set-up and welfare | cabin, fencing, temporary power, signage |
| 020 | Demolition and waste | skip, breaker hire, tipping |
| 030 | Groundworks and concrete | readymix, rebar, digger hire, hardcore |
| 040 | Masonry | bricks, blocks, lintels, mortar |
| 050 | Carpentry and roofing | timber, joists, sheathing, felt, battens |
| 060 | Windows and doors | glazing units, frames, ironmongery |
| 070 | Mechanical and electrical | cable, pipework, boiler, fittings |
| 080 | Finishes | plaster, paint, tiles, flooring |
| 090 | Subcontract labour | labour only, day rate, application number |
| 099 | Overhead, not job cost | office rent, van insurance, software |
Next comes a job list: each job's code, start date, contract value including approved variations, and a budget for every cost code. The budgets power the exceptions check below. If you do not have budgets by code yet, the tutorial on building a job costing sheet in Excel with AI help shows how to set one up.
Keep the exports clean. Invoice lines need a description, supplier type, amount, date and any job reference, but no bank details, no payroll and no customer personal data. If the export arrives with merged cells or mixed date formats, tidy it first using the steps in cleaning messy data. Use a business plan rather than a free chatbot: ChatGPT Business and Claude Team both list at $25 a user a month billed monthly or $20 billed annually, with a two-seat minimum, and neither trains on business content by default. The assistant built into your accounting product is the other route.
Coding eight invoice lines: prompt, output and fixes
Start with a prompt that gives the assistant a closed list, an exit when it is unsure, and instructions to flag rather than fix. Paste your own key and job list where the brackets are.
You are helping a small building contractor's bookkeeper pre-code supplier invoices.
Use ONLY the job codes and cost codes below. Never invent a code.
If a line could belong to more than one job, or nothing fits, write NEEDS PERSON and give the reason in five words.
Flag, never delete or merge: possible duplicates (same supplier and amount within 10 days), lines dated before the job's start date, and any line over $2,000.
JOBS: J104 Kitchen extension (start 3 Feb); J107 Garage conversion (start 17 Mar); J112 Shopfront refit (start 5 May); J115 Rear extension (start 10 Mar); J118 Bathroom refit (start 2 Jun)
COST CODES: [paste the key]
INVOICE LINES (no | supplier type | description | amount | date | job reference on invoice):
1 | Concrete supplier | 6 cubic metres readymix, delivered | $1,128.00 | 12 Mar | J104
2 | Timber merchant | 22 joists 4.8 m, noggins | $1,842.60 | 14 Mar | J104
3 | Skip hire firm | 2 skips, exchanged | $540.00 | 14 Mar | none; delivery note lists two sites
4 | Plant hire firm | breaker hire, 3 days | $615.00 | 15 Mar | none
5 | Tile supplier | porcelain floor tiles 14 m2, adhesive | $1,236.40 | 28 Apr | J112
6 | Fuel card statement | diesel, 14 transactions | $1,094.20 | 31 Mar | none
7 | Joinery firm | 3 composite doors, supplied | $3,960.00 | 18 Mar | J107
8 | Timber merchant | 22 joists 4.8 m, noggins | $1,842.60 | 18 Mar | J104
Return a table: line no | job | cost code | confidence (high, medium, low) | flag.
A typical answer from a general-purpose assistant looks like the table below; yours will vary in wording, but the shape should match.
| Line | Job | Cost code | Confidence | Flag |
|---|---|---|---|---|
| 1 | J104 | 030 | High | None |
| 2 | J104 | 050 | High | None |
| 3 | NEEDS PERSON | 020 | Low | Delivery note names two sites |
| 4 | J115 | 020 | Medium | Job not named; fits the demolition phase |
| 5 | J112 | 080 | Low | Dated 28 Apr, before the 5 May start |
| 6 | NEEDS PERSON | none | Low | Fuel card, no job references |
| 7 | J107 | 060 | High | Over $2,000, needs approval |
| 8 | J104 | 050 | Medium | Possible duplicate of line 2 |
Six of the eight lines carry a flag, which is a sensible result for a deliberately awkward batch. Four of them need real decisions, and here is what you would do with each.
- Line 3: ask the site manager how the two skips were used, then split the $540 by what the delivery note shows. Never let the assistant split a cost by guesswork.
- Line 4: the assistant guessed J115 from the phase of work. Check the site diary before accepting a medium-confidence guess.
- Line 5: a legitimate pre-order, but the tiles will sit in a store until the job starts. Materials bought and not yet installed can push a cost-to-cost percent complete ahead of real progress, so tell your accountant how you want them treated.
- Line 6: allocate fuel from the vehicle log, or treat it as overhead under 099. That is a policy choice, not something to infer.
Line 8 shows why the prompt says flag, never delete. In this batch the supplier's statement showed a second, genuine delivery of the same order, so asking was the right call. Had the instruction been "remove duplicates", an assistant could quietly drop the second invoice. J104's timber cost would then come in $1,842.60 light, and the gap would only surface when the supplier's statement failed to tie to the ledger.
Five job-cost exceptions worth catching before month end
Once invoices are coded, a second prompt can scan the whole month against the job list and the budgets by code. These five checks catch most of what makes a job look more or less profitable than it is.
- Blank job or blank cost code. The count should be zero before anyone builds a WIP schedule. A blank is the commonest reason a job looks better than it is.
- Costs dated outside the job window. Anything before the start date or after practical completion is either a pre-order, a late invoice or a miscoding.
- Code over budget. Flag any code at or above 90% of its budget while the job as a whole is under 70% complete. Those thresholds are a starting point to tune, not a rule.
- Same supplier, same amount, within ten days. Flag for a human decision, as in line 8 above.
- Cost with no invoice raised. A job with material cost and no sales invoice for 45 days usually means a stage was reached and nobody billed it.
A month's output, kept to what needs a decision, might look like this:
| Job | Exception | Amount | Who resolves it |
|---|---|---|---|
| J118 | Cost recorded, nothing invoiced | $9,000 cost | Contracts manager: raise the stage invoice |
| J104 | Code 050 at 94% of its $24,000 budget while the job is 65% built | $22,600 | Site manager: wrong budget or over-ordered? |
| J115 | Estimated total cost is above the contract value | $9,000 gap | Project manager and director: is there a variation to claim? |
| J112 | Tile invoice dated before the job start | $1,236.40 | Bookkeeper: confirm pre-order and treatment |
For deeper profit analysis once the exceptions are cleared, the tutorial on finding which jobs actually made money picks up where this check stops.
A WIP schedule for five jobs, recalculated
A WIP schedule says, job by job, how much revenue the work done so far has earned compared with how much you have invoiced. One common method is cost to cost, which uses three lines of arithmetic.
- Percent complete = cost to date ÷ estimated total cost.
- Earned revenue = percent complete × contract value, including approved variations.
- Over or under billing = billed to date − earned revenue. A positive figure means you have billed ahead of the work (a liability); a negative figure means work has been done and not yet invoiced (an asset).
Here are the five jobs at month end, with illustrative numbers. Negative figures are in brackets.
| Job | Contract | Estimated total cost | Cost to date | Complete | Earned | Billed | Over / (under) |
|---|---|---|---|---|---|---|---|
| J104 Kitchen extension | $186,000 | $150,000 | $97,500 | 65.0% | $120,900 | $120,000 | ($900) |
| J107 Garage conversion | $64,000 | $51,000 | $42,500 | 83.3% | $53,333 | $48,000 | ($5,333) |
| J112 Shopfront refit | $142,000 | $118,000 | $35,400 | 30.0% | $42,600 | $56,800 | $14,200 |
| J115 Rear extension | $92,000 | $101,000 | $70,700 | 70.0% | $64,400 | $62,000 | ($2,400) |
| J118 Bathroom refit | $38,500 | $30,000 | $9,000 | 30.0% | $11,550 | $0 | ($11,550) |
| Total | $522,500 | $450,000 | $255,100 | $292,783 | $286,800 | ($5,983) |
The totals hide four stories, and a good assistant should surface all of them without being told where to look.
- J118 is 30% complete on cost and has no invoice, so $11,550 of earned revenue is sitting unbilled.
- J112 is billed $14,200 ahead of the work, most likely a front-loaded deposit. That money is a liability until the work catches up, and it flatters cash.
- J115 is the loss job: estimated cost $101,000 against a $92,000 contract. On the numbers so far it has lost $6,300 (cost $70,700 less earned $64,400), but the full expected loss is $9,000. Most accounting frameworks want a foreseen loss recognised in full, so ask your accountant about the remaining $2,700 now rather than as the job finishes.
- J107 is 83% complete on cost and $5,333 underbilled, so an application is probably due.
For a fuller explanation of each column, and a layout your accountant may prefer, see how a WIP report works and how AI builds one.
The estimate to complete is the number AI cannot supply
Percent complete is driven by one input that nobody can calculate from the ledger: the estimated total cost. Take J104. If the project manager raises the estimate from $150,000 to $160,000, percent complete falls from 65.0% to 60.9%, earned revenue falls from $120,900 to $113,344, and a $900 underbilling becomes a $6,656 overbilling. A $10,000 change in one estimate moved the schedule by $7,556.
So give each project manager a five-minute review before the schedule is built, with three questions per job: what is left to buy, how many labour hours are left, and what could still go wrong (provisional sums, unresolved design points, access). The manager enters the new estimated total cost and a one-line reason. The assistant never guesses it.
The recalculation prompt, and what to ask next
Below is our WIP schedule (columns: job, contract value, estimated total cost, cost to date, billed to date) and last month's schedule.
1. Recalculate percent complete (cost to date / estimated total cost), earned revenue and over or under billing for every job. Show your arithmetic for any job where your figure differs from mine by more than $50.
2. List jobs where estimated total cost exceeds contract value.
3. List jobs where cost to date exceeds 90% of estimated total cost.
4. List jobs where the estimated total cost or contract value changed by more than 3% since last month and say whether a variation number is shown.
5. List jobs with cost to date and nothing billed.
Do not change any input. Do not estimate anything I have not given you.
The last two lines of the prompt matter. Telling the assistant not to estimate stops it from "helpfully" inventing a cost to complete, and asking it to show arithmetic only where it disagrees keeps the answer short enough to check. Then add a request that pays for itself every month: "Write a half-page commentary on what changed since last month, job by job, using only the figures supplied." Your accountant gets a draft explanation to correct, rather than a grid of numbers.
Retainage: two balances, two release clocks
Retainage is the slice of each progress payment a customer holds back until the job, or a defects period afterwards, is finished. Most contractors carry two balances: retainage receivable (held by your customers) and retainage payable (held from your subcontractors). Each has its own release trigger, and the sums only reconcile if you track them separately.
A register is more reliable than memory. This one holds 5% of billed to date on each job, and its release terms are invented for the example; yours come from your contracts.
| Held by or from | Job | Held to date | Release trigger | Next action |
|---|---|---|---|---|
| Client | J104 | $6,000 | Half at practical completion, half after a 12-month defects period | Diary the certificate date; request the first half when it is issued |
| Client | J107 | $2,400 | All at practical completion | Request on issue of the certificate |
| Client | J112 | $2,840 | All, 30 days after the completion certificate | Check the clause before invoicing |
| Client | J115 | $3,100 | Half at practical completion, half at final account | Final account not agreed; flag to the director |
| Subcontractor (electrical) | J104 | $1,150 payable | With the final payment after your sign-off | Do not release before your own certificate is in |
| Subcontractor (plumbing) | J107 | $480 payable | With the final payment after your sign-off | Check it has not already been paid |
The reconciliation is where assistants earn their keep. Give one your ledger balances and the register, and ask it to list differences. Here the receivable side agrees at $14,340, but the ledger shows $1,150 payable against the register's $1,630. The $480 gap is the plumber's retainage on J107, which had been paid out with an interim payment against the subcontract. The assistant found the difference in seconds; only a person could decide whether to recover it or accept it.
To fill the "release trigger" column, an assistant can read the contract text and quote the retention terms. Ask for quotes rather than summaries:
Read the contract text below. List every clause that mentions retention or retainage, in any wording.
For each, give: clause number, percentage, what it applies to, when it is released, who certifies the release, any cap or interest, and the exact sentence.
If a point is not stated, write NOT STATED. Do not interpret or fill gaps.
Also list any clause, schedule or special condition that could amend these terms.
Take this sample clause: "14.3 Five per cent of each certified amount is retained. One half of the retained sum is released within 14 days of the practical completion certificate; the balance is released within 14 days of the end of the defects period of twelve months." A good answer quotes 14.3, gives 5%, certified amounts, two release events, no cap stated, and then adds: "Special Condition 3 on page 31 may amend this clause; not read." That last line is why the prompt asks for amendments. If the assistant misses it, the reminder you send could cite terms that no longer apply, so read the special conditions yourself and ask your solicitor about anything unclear.
Once a person has confirmed that the trigger has happened, the reminder is easy to draft. This template keeps it factual:
Hello [first name], the practical completion certificate for [job] was issued on [date].
Under clause [number] of the contract, the first half of the retention, $[amount], falls due for release [timing from the contract].
Please confirm the payment date, or tell us what is outstanding so we can resolve it.
Kind regards, [your name]
Never let a reminder go out on the assistant's say-so alone. Date arithmetic is a weak spot for these tools, so check the due date against a calendar, and have a person confirm that the certificate really was issued. For the wider routine around chasing release, the tutorial on tracking retainage and chasing release with AI reminders goes further.
What QuickBooks and Xero cover, and where the sheet takes over
The checks above work from exports, so they run beside whichever accounting product you use. The product matters for how much of the job structure lives in the ledger. This is what the vendors' own pages show in October 2026, at list prices in USD (both run introductory discounts that change often).
| Plan | List price a month | Job and project features on its pages | Gaps to know about |
|---|---|---|---|
| QuickBooks Online Plus | $140 | "Track project profitability" | No construction financials listed |
| QuickBooks Online Advanced | $340 | A construction financials solution: job costing, AIA-style billing (progress claims set out against a schedule of values), WIP reporting and change orders, which Intuit says shipped in August 2026; a project agent that can set up a project from existing documents | Intuit's pages do not mention retainage or committed costs; Intuit Intelligence is labelled beta |
| Xero Established | $97 | Xero Projects: link costs to jobs, compare them with budget, track time and see profitability | Projects is included on this plan only; check how WIP and retainage would be reported |
| Xero Early and Growing | $27 and $59 | No project tracking on these plans; Smart Document Capture on all three plans | Early is limited to 20 invoices and 5 bills |
QuickBooks Simple Start ($38) and Essentials ($85) sit below Plus and have no project features listed. Because Intuit's pages are silent on retainage, assume a register like the one above stays necessary unless your accountant has set up a ledger treatment for it. If you want to compare the wider field, best AI for a small construction company's financials and QuickBooks weighs the options.
One caution about connections. Intuit has published a QuickBooks connector for Claude and a plugin for ChatGPT, and both can act in your account, not only read it. The connector's listing in Claude's directory says it can create, update and send invoices, import transactions from uploaded files and even set an employee's base pay; the only confirmation step it describes is the preview before a payment link or reminder is sent. Before enabling either, read exactly which actions it can take without asking you. These checks need only exports, and exports cannot post anything by accident.
A rule for choosing between upgrading and staying with a sheet: the sheet stops being enough when you cannot keep it current, meaning that committed costs, progress billing and retainage take longer to maintain than the checks take to run. Until then, a tidy sheet plus an assistant plus your accountant beats a bigger plan nobody has time to configure.
The hand-off pack and sign-off checklist for your accountant
The pack is short. Send it as one folder, with these items in this order:
- The WIP schedule, with every input changed since last month highlighted and a reason beside each.
- The assistant's recalculation list, marked with how each difference was resolved.
- The retainage register and the reconciliation to the ledger, including any difference like the $480 above and what you decided about it.
- The exceptions list from the cost check, with an owner and a status for each item.
- The change-order log: approved, pending and rejected, with values.
- Any known accruals, such as subcontract work done but not yet invoiced.
- The half-page commentary on what moved.
Then the accountant's sign-off checklist, which you can paste at the top of the pack:
- Contract values match the signed contracts plus approved variations only.
- Each estimated total cost is the project manager's current figure, with a date.
- One method for percent complete is used on every job, and uninstalled materials are treated as agreed.
- The WIP total ties to the ledger accounts for over and under billing.
- Retainage receivable and payable tie to the register.
- Every loss job has been considered for a provision.
- A sample of AI-coded invoices has been checked by a person.
For that last point, use a sampling rule you can defend: check every line the assistant marked medium or low confidence, every line above $2,000, and a random one in ten of the rest. Record how many were wrong.
If more than one in twenty of the high-confidence lines needed recoding, tighten the coding key before next month rather than checking harder. These are working rules to tune with your accountant, not industry standards.
Measures that show the checks are working
Four numbers, written down monthly, tell you whether this is saving effort or just moving it.
- Journals after review: how many entries your accountant had to change after receiving the pack. This should trend down.
- Recode rate: lines recoded divided by lines coded. A falling rate means the key and the prompt are improving.
- Days from month end to a signed WIP: the real prize is finding a loss job in week one rather than month three.
- Surprise swings: jobs whose over or under billing moved sharply with no change noted by the project manager. Each one points to a missed estimate or a missed invoice.
If the recode rate stays high after two months, the problem is usually the key, not the assistant: codes that overlap, or invoice wording your key never mentions. Fix the key first. If the surprise swings persist, the problem is upstream, in how estimates to complete are collected.
Questions owners ask before letting AI near the books
Can I paste a WIP schedule into a free chatbot?
Treat a WIP schedule as commercially sensitive: it shows contract values, margins and losses by job. Free consumer plans can use chats to improve models unless you switch that off, so use a business plan (ChatGPT Business or Claude Team, two-seat minimum) or the assistant inside your accounting product, and remove client names where the sums do not need them.
Why does the AI's WIP total differ from my accountant's?
Usually the inputs differ, not the arithmetic. Compare four things line by line: whether approved variations are in the contract value, whether both of you used the same version of the estimated total cost, how materials delivered but not yet installed are treated, and whether retainage sits inside or outside billed to date. Agree one treatment, write it on the schedule, and the totals will tie.
How often should I run these checks?
Code invoices weekly so the pile never builds, run the job-cost exceptions check just before month end, and do the WIP and retainage checks once the month's books are closed enough to trust. Add a retainage check whenever a completion certificate is issued, because that is when release rights usually start.
Should my accountant know I use AI on the books?
Yes. Tell them which checks it runs, what data it sees and what it never touches, and give them the list of items it flagged with how each was resolved. If a bank or bond provider asks for a WIP schedule, send the version your accountant has signed, not the assistant's output.
Further reads
- Roofing Accounting Software: Deposits, Progress Invoices, Job Costing, AI — Deposits and progress invoices for one specialist trade.
- AI Driven Accounting Software for Contractors: What Job Costing Needs — What job costing demands of the software itself.
- Best AI App for General Contractors: Site and Office Tools Compared — Site and office AI tools priced per month for a six-person firm, each with a worked example, plus four stacks from $189 a month.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: QuickBooks Online pricing page and Intuit's QuickBooks Advanced pages for construction (October 2026); the QuickBooks connector listing in Claude's connector directory; Xero pricing and Xero Projects pages (USD list prices, October 2026); ChatGPT Business and Claude Team plan pricing pages (October 2026). WIP treatment is general guidance, so confirm it with your own accountant.