Margin Leakage Is Visible. The Cause Is Fragmented.
Margin leakage is hard to diagnose because the number shows up in one place and the cause lives somewhere else. The cost report shows bid margin versus actual margin but the explanation is spread across estimates, change order logs, project notes, and the decisions someone made while the job was moving.
That's the frustrating part. You know margin is leaking throughout the business. But knowing the jobs missing margin isn't the same as knowing why - and what you can do about it.
Was the estimate wrong? Did the field run into conditions nobody priced? Did the customer approve a change order that never got billed? Did the PM absorb labor to preserve the relationship? Did the schedule get compressed by the customer or GC?
The report tells you what happened, not what to do
Most services businesses already have the data to diagnose margin leakage - it's just not sitting in one place. The cost summary has the numbers, the estimate has the assumptions, and the change order log shows what changed. The project notes usually hold a real story: access constraints, rework, field realities.
That's why margin reviews drift toward anecdotes. Meanwhile, finance remembers the variance, the PM remembers the customer delay, and the field remembers the condition behind the wall. But unless someone has time to put all of that together, the business leaves the meeting with a story, not the pattern that tells the real story.
A variance is just a variance. Evidence turns it into a diagnosis.
AI can help explain margin leakage by looking at all the data holistically and connecting the dots. And it can do it near instantly. The useful output isn't just a ranked list of bad jobs, it's a diagnosis for each job and account: root cause (with evidence), recoverable dollars, and the next action.
I tested with a synthetic dataset for a fictional regional fire and life safety company. It closed 214 jobs across the quarter. I filtered the cost file down to the 25 worst margin problems.
The top job leaked $28,000 of gross profit against bid. The cost file showed the variance. The notes and change order log explained it.
The job had schedule acceleration, weekend overtime, and a pending change order for $4,800 that still hadn't been signed. So the diagnosis wasn't "labor was high." That would be true, but not all that useful on its own. The diagnosis was schedule delay, partially recoverable, with a specific action: chase the pending overtime change order and document the labor gap from acceleration work that was never fully covered.
Recoverable margin should not wait for a quarterly review
Across the 25 synthetic jobs, the analysis found $280,500 in margin erosion. About $57,600 was potentially recoverable through pending or unbilled change orders. The separation was based on what evidence existed: a pending change order with documented scope and a recent date sat in the recoverable bucket; an unsupported variance on a job closed six months ago didn't. Realistic recovery, however, is lower than the $57,600 ceiling because some of those change orders are old, weak, or likely to be rejected.
Some leakage is gone. If the estimate was too thin, or the PM absorbed the labor, or material escalation risk sat with you contractually, the money probably isn't coming back. This still needs to be understood because it changes how you'd bid the next job.
But some leakage is sitting in the business right now as unfinished paperwork: a pending change order, an unbilled premium, a documented scope item the PM hasn't sent yet, or a field note with enough evidence to revise an underpriced change order.
Operators should chase margin leakage that's both material and still recoverable. A $20,000 variance with no pending change order may be a lesson for the next bid. A $6,000 pending or unbilled change order on a recently closed job is an action item for this week.
Patterns are where the business changes
The individual job diagnosis is useful, but the pattern view is where the operating lesson shows up. In the synthetic data, the strongest pattern was labor overrun in occupied or schedule-constrained environments: hospitals, senior living facilities, academic buildings, government sites, and commercial towers. The constraint around the work was itself underpriced.
Another pattern we found was retrofit discovery risk: corroded pipe, failed conduit, undocumented zones, older building conditions. The estimate might include contingency, but the contingency was often too light for what the notes later showed.
A third pattern was branch-specific. Across the 25 worst jobs, the Charlotte branch's labor hours ran about 19% over bid versus 12-14% at the other two branches. Charlotte is the branch focused on retrofits in occupied buildings, and that first pattern was clustering there. It's a branch operating question, not a single-job problem.
These are the patterns this dataset surfaced. Your data will obviously show different ones because every business is unique. The point is that none of them require a new system or anything complicated - they just require the existing data to be read together often enough that the business can respond while the information is still fresh. And this can be done with the AI chat tool you already have.
Try it yourself
To do the analysis, I used our Margin Leakage Starter Kit, which has the prompts and checklist so you or someone on your team can run this on your own closed-job data. The workflow uses four files you likely already have: job cost summary, original estimates, change order log, and project notes. 25 jobs is the recommended run size. It's enough to see patterns, but small enough that the AI can keep job IDs, notes, and change orders straight.
Pick your 25 worst margin jobs from the quarter, run the prompts, and see what your data tells you about what leaked, why it leaked, and what's still recoverable.
If you try it and get stuck, reach out. We answer questions.
Practical AI in your inbox
Video walkthroughs, blog posts, and a look at how we do things — weekly.
Subscribe to the Newsletter