
Roofing Job Costing: Where Your Profit Leaks
Roofing Job Costing: Where Your Profit Leaks
You bid the job at a 35% margin. It closed, it got built, the customer was happy, and when the numbers came in you made 19%. Nobody stole anything. There was no disaster. The profit leaked out through a dozen small gaps, and because roofing job costing is the one system most contractors never build properly, you cannot point at which ones.
Roofing job costing means tracking every dollar of material, labor, subcontractor, and job-specific overhead against a single job, then comparing that to what you estimated. Without it you are running on blended averages, and blended averages hide exactly the jobs that are hurting you.
Key Takeaways
- If you cannot compare estimated versus actual margin per job, you are guessing at pricing.
- Labor is where most roofing margin leaks, and it is the hardest cost to attribute honestly.
- Small unbilled extras are the most common leak and the easiest to fix.
- Material waste on complex roofs is systematically underestimated at bid time.
- The point of job costing is to change what you bid next time, not to explain the past.
What does roofing job costing actually track?
Four buckets, and the accuracy of the fourth is what separates real job costing from an accounting exercise.
| Cost bucket | What goes in it | Where it usually leaks |
|---|---|---|
| Materials | Shingles, underlayment, flashing, fasteners, disposal | Waste factor set too low on cut-up roofs |
| Direct labor | Crew hours or contract price for this job | Return trips and punch-list work not attributed |
| Subcontractors | Anything you subbed out on this job | Change orders agreed verbally and never billed |
| Job overhead | Permits, dumpster, equipment, fuel, supervision | Supervision time treated as general overhead |
That last row matters more than it looks. If your production manager spends two extra days on a difficult job, that time belongs to the job. Absorb it into general overhead and the job looks more profitable than it was, so you keep bidding that kind of work at the same price.
Where does the profit actually go?
In roofing, the recurring leaks are consistent enough to list.
Return trips. The crew comes back for a punch item, a missed vent boot, a piece of trim. Each trip is a couple of hours and some fuel, and it never gets attributed anywhere. Three trips on a job can quietly erase several points of margin.
Verbal extras. A homeowner asks for something small mid-job, the crew does it because it takes twenty minutes, and it is never written up or billed. Individually trivial, collectively significant, and completely invisible without job costing.
Waste on complex roofs. Cut-up roofs with multiple valleys and dormers waste far more material than simple gables. Contractors who use one standard waste factor for everything systematically underbid their most complicated work — which is also the work they are proudest of.
Crew inefficiency you never measured. If one crew consistently takes longer on comparable jobs, that is a real cost. Without per-job labor tracking it registers as a vague sense that some jobs "go slower."
Supplements never filed. On insurance work, legitimate items get discovered mid-job and never submitted, because filing them is friction and the job is already moving.
How do you set it up without a big software project?
You do not need enterprise software to start. You need a consistent structure and the discipline to close every job out.
1. Give every job a number and use it on every purchase order, invoice, and timesheet. This one habit does most of the work.
2. Capture labor per job. Crew hours by job number, or a contract price per job if you pay by the square.
3. Code materials to the job at purchase, not at month end. Retroactive allocation is guesswork.
4. Close out every job within two weeks — actual costs against estimate, in writing.
5. Review the variance monthly across all closed jobs and look for patterns, not one-offs.
Step five is the one that converts data into money. A single job at 19% is a story. Eight cut-up roofs averaging 16 points below estimate is a pricing decision.
What do you do with what you find?
Change the bid. That is the entire purpose. If complex roofs consistently come in low, raise the waste factor and the labor allowance for that roof type. If a customer type generates return trips, price it in or stop pursuing it.
This is also where pricing discipline meets sales discipline. Our guide on how to price roofing jobs for profit covers building the number, and job costing is how you find out whether that number survived contact with reality.
If your margins are fine per job but the business is still not growing, the constraint is elsewhere. Why roofing companies stop growing covers the other bottlenecks, and how many roofing crews you actually need covers the capacity question that job costing data should drive.
For material cost context beyond your own supplier quotes, the Bureau of Labor Statistics producer price index for construction materials tracks input costs and is a useful check on whether a margin change is you or the market.
How long before it pays off?
You need roughly ten to fifteen closed jobs before patterns are reliable. One job tells you nothing — every job has something unusual. The value shows up when you can say "this category of work runs eight points under estimate, every time," because that is a sentence you can act on immediately and permanently.
Most contractors who do this discover something uncomfortable in the first quarter: a service line or a customer type that has been running near break-even for years. That discovery is worth more than the effort of the whole system.
Get the full playbook
Job costing is one piece of building a roofing company that is actually profitable rather than just busy. The Roofing Secrets Black Book covers the whole system — pricing, sales, crews, and the operational structure behind them.
Get the Roofing Secrets Black Book for $7.95 — digital copy with a 30-day guarantee.
