Every project business eventually finds out what a job really made. The honest number arrives weeks after the work is done, stitched together from invoices, time sheets, and the owner's memory. By then the job has closed, the next one is priced from the same gut feel, and the margin that quietly leaked out is already gone.
Case Study, not Delivered Project.
How we'd approach this kind of problem. See delivered projects →
You probably have this problem if…
- You can quote a job confidently but cannot tell, mid-build, whether it is still on track for the margin you priced.
- Supplier bills sit in Xero unallocated to a job, or get coded to a generic cost account because the job reference is unclear.
- Site changes and customer upgrades are discussed in WhatsApp, photos, and notebooks, and some of them never reach the final invoice.
- Labour hours are recorded somewhere, but nobody compares them to the hours in the quote until after handover.
- Your month-end profit number depends on the owner spending a Sunday afternoon stitching it together.
Any two of those is a strong signal. All of them and you are pricing next year's work with last year's gut feel.
How the pattern works
Imagine a quiet bookkeeper who sits with every live job. They read each supplier bill as it lands, tie it to the right job, watch the hours booked against the quote, notice the site notes that look like an unbilled extra, and tap you on the shoulder when something is drifting. The number you usually see at month-end appears every morning instead. That is the system.
Four things have to work for it to be useful.
1. It pulls costs, labour, and materials into one place
Three feeds, three different shapes. From Xero the system reads supplier bills, credit-card transactions, and subcontractor invoices through the official Accounting API, keyed by tracking category or project code where one exists. From the job-management platform (ServiceM8, Tradify, simPRO, Joblogic, Powered Now, or similar) it reads time entries, job references, and site notes. From any standalone purchasing or materials tool it reads delivered quantities and prices. Each feed is normalised to the same shape. Source, job reference, date, amount, who recorded it.
2. It assigns every line to a job, and flags the ones it cannot
Where the job reference is clear, the system attaches the cost to the job automatically. Where it is not, the line goes into a short review queue with the system's best guess attached. A language model reads the bill description, the supplier history, the dates, and the active jobs, then proposes a match with a confidence score. The office confirms or corrects in a click. Uncertain costs stay visible rather than getting silently absorbed into overhead. That is the difference between a margin number you can trust and one you cannot.
3. It compares actuals against the quote, by category
The quote already encodes a small commercial model. Quoted revenue, allowed labour hours, allowed materials, allowed subcontractor spend, contingency, target gross margin. Pulling that into the same database gives the system both halves of the picture. For each live job it produces a running view of quoted versus actual, broken out by category, with extras held in their own bucket so they do not pollute the comparison. When a job drifts, the drift has a shape. Labour is twelve hours over allowance. Materials are eight hundred pounds above the order. One approved extra is sitting unbilled.
4. It surfaces what needs attention, before the job closes
Nobody wants another accounting report sitting in their inbox. The point of the live view is to make the next decision obvious. Jobs with margin drift past a threshold. Jobs with unassigned costs older than fourteen days. Site notes that read like an extra was agreed but no variation was raised. Jobs ready for close-out with an unbilled extras queue still open. Each card opens into the full breakdown, and the owner's whole portfolio fits inside a five-minute review.
The default stack
Two choices that matter most.
Custom ETL over a heavy data platform for typical SMB volumes. Fivetran and Airbyte both have Xero connectors. They are excellent if the rest of the data stack already uses them. For a single trades business, a small scheduled function that hits Xero and the jobs API every hour, with webhook top-ups for new invoices, costs roughly nothing to run and is faster to debug than a managed pipeline. Move to Airbyte when the number of connectors crosses about five.
Postgres and Metabase over a bespoke dashboard, at first. Putting the unified job table in Postgres and pointing Metabase at it gives the office a working view in days, not weeks. A custom React dashboard comes later, once the owner knows which views actually get used. Most do not need it. The ones that do, get a much better second iteration for the investment.
When this isn't the right fit
The pattern is powerful, but it is the wrong tool for some problems.
Job volume too low to justify the build. Below roughly twenty live jobs a month, a tidy Xero Projects setup with proper tracking categories will get you most of the way. The investment in a custom layer pays back when there are enough jobs that nobody can hold them all in their head.
Quotes that bear no resemblance to the work delivered. If half of every job is bespoke variations agreed verbally on site, the quote baseline is too noisy to be useful. Fix the variation workflow first. The margin layer assumes the quote means something.
No structured cost data at source. If supplier bills arrive as photos of receipts and labour is recorded on paper, the bottleneck is data capture, not analysis. A receipt-scanning workflow and a simple time-tracking habit come before margin dashboards.
Cash-accounting businesses with no quotes. Pure cash-in, cash-out trades who price on the day do not have a quoted baseline to compare against. The pattern relies on the gap between what was promised and what was spent.
What to expect
If this pattern fits your team
A Pare Audit is the way to find out whether it does, and what a delivery would look like in your specific situation. We spend a focused few days with you, look at how jobs and costs actually flow through Xero and your job-management tool, and come back with a written recommendation, a scoped build, and a costed plan.