May 1, 2026
Job cost reports should be reviewed for variance between estimated and actual costs by category (labor, materials, subcontractors, equipment), billing completeness relative to scope, and margin by job type and project manager. Patterns across multiple reports — not individual job anomalies — reveal systemic issues that cost the company money on every job.
This is one of the most common situations I encounter in diagnostics: a company with a competent job management system, reasonably accurate data entry, and job cost reports that are technically available — and an owner who hasn’t opened one in six months. Not because the owner is negligent. Because nobody told him what to look for, and looking at job cost data without knowing what you’re looking for is an exercise in confusion rather than insight.
The company was doing $3.2M annually. The owner had been using the same software platform for four years. The job cost data was current and reasonably clean. In approximately forty-five minutes of looking at the trailing 12-month job cost history, I found three patterns that were costing the company more than $200,000 per year in recoverable margin. The data had been sitting there the entire time.
The company did mitigation, reconstruction, and mold remediation. When I broke the job cost variance by service line, one pattern stood out immediately: mold remediation jobs were consistently running 25–35% over their estimated labor budget. Not occasionally. Consistently, across 31 jobs in the prior 12 months.
Mitigation jobs were close to estimate. Reconstruction jobs were within 5–8 points. Mold jobs were bleeding labor. The cause, once we investigated: the company’s mold labor estimates were built on a rate card developed three years prior, before the company upgraded to a more thorough post-remediation verification standard that added 4–6 hours per project for air quality testing, clearance documentation, and client walkthrough. The standard had changed. The estimate template hadn’t.
The fix took one afternoon: update the mold estimate template to reflect current scope. Every mold job from that point forward was estimated with an accurate labor budget. The overruns disappeared.
The second pattern was in equipment billing. The company was tracking equipment placement and pickup in the field management app. When I compared equipment hours logged in the field to equipment hours billed on the corresponding invoices, there was a consistent gap on jobs over 7 days in duration — the equipment log showed more hours than the invoice reflected.
The gap wasn’t fraud or error in the field. It was a billing process failure: the person generating invoices was using the original estimate’s equipment duration rather than reconciling against the actual field log. On a short job, this rarely matters. On a 10–14 day drying job, the difference between estimated and actual equipment hours could represent $800–$1,500 in unbilled revenue per job. Across 40+ jobs per year in this category, the total was significant.
When I sorted the job cost data by PM, the third pattern appeared. The company had three PMs handling comparable job mixes. PM1 averaged 44% gross margin. PM2 averaged 41% gross margin. PM3 averaged 29% gross margin. The gap between PM1 and PM3 was 15 points — on similar jobs, in the same market, with the same estimating team.
This wasn’t visible before because nobody had sorted the data by PM. The company’s overall average looked normal — slightly below target, explainable by market conditions, easy to rationalize. Sorted by PM, it was obviously not a market condition problem. It was a specific performance problem with a specific person that was dragging the company average down by 4–5 points.
These are the questions that turn job cost data from noise into signal:
1. What’s the average actual gross margin by service line? If mitigation, reconstruction, and mold have different average margins, that’s expected. If one service line is consistently 10+ points below the others, you have a pricing or cost problem specific to that service.
2. What’s the distribution of margin by PM? Sort by PM and look for the gap. If one PM is consistently 10+ points below the others on similar jobs, the problem is in their workflow, not the market.
3. Which cost category drives the most variance from estimate? Labor, materials, subs, or equipment — pick the category with the highest average actual-vs-estimate variance and investigate what’s driving it.
4. What’s the average billing completeness on closed jobs? Take revenue billed divided by total estimated scope (including supplements) for each closed job. Any consistent gap between scope and billing is revenue left on the table.
5. What do the outlier jobs (top 10% and bottom 10% margin) have in common? The best jobs teach you what conditions produce good margins. The worst jobs teach you what conditions produce losses. Pattern-matching across outliers often reveals controllable factors.
Monthly at minimum, with a quick scan weekly during active periods. The monthly review should analyze patterns across all jobs closed in the period. The weekly scan should focus on any open job flagging variances — estimated vs actual cost running ahead of completion percentage. Waiting for quarterly reviews means operating 90 days behind the problems your data is already showing you.
Estimated vs. actual gross margin by job; cost category variance (which of labor/materials/subs/equipment drove overruns); billing completeness (scope billed vs. scope completed); PM-level patterns across multiple jobs; and service line margin differences. These five data points turn a job cost report from a historical record into a diagnostic tool.
Look at the distribution, not just the average. Sort jobs by the metric you’re investigating (labor variance, margin by PM, etc.) and look for clustering. A one-time anomaly shows up as an isolated outlier. A pattern shows up as a cluster — multiple jobs in the same range, with the same cost category driving the variance, across different time periods. Ten jobs with the same problem is a system failure. One job with the same problem is a bad day.
Common platforms include Jonas, Xactimate integrated with accounting systems, Dash, RMS Cloud, and general small business accounting software with job costing modules. The reporting limitations are consistent across platforms: job cost data is only as accurate as the labor and materials entered in the field, and most platforms don’t automatically analyze patterns across jobs — that analysis requires a human review of exported data. The software tracks. The owner (or advisor) has to interpret.
A P&L shows company-level financial performance over a period — total revenue, total costs, net profit. It tells you whether the company made money. A job cost report shows job-level financial performance — estimated vs. actual costs and revenue for a specific project. It tells you where the company made or lost money and why. P&Ls are for measuring outcomes. Job cost reports are for diagnosing causes. You need both; most owners only look at the P&L.
Mike McCabe is a restoration business consultant and the founder of Profit Detective. He works with restoration operators to find and fix the margin leaks that don’t show up until it’s too late.
Most engagements pay for themselves within the first week.