top of page

5 Common Job Costing Mistakes for Roofers (and How to Fix Them)

Writer: Wendy Okie
Wendy Okie
Sep 27
6 min read

Here's a pattern we see over and over when we open up a roofing company's books: the owner is busy, the crews are booked out, the dumpsters keep rolling in… and the bank account doesn't match the hustle.


It's rarely a sales problem. More often, it's a job costing problem.


Job costing simply means tracking every dollar of labor, materials, and overhead that goes into a specific job, then comparing it to what you billed. Do it well and you know your true gross profit margin on every roof repair, every tear-off, and every commercial roofing project. Do it poorly and you're pricing blind.


The good news? Most job costing problems come from a handful of recurring mistakes. And every one of them has a practical fix.


Want to know what your roofs are really earning? Book a discovery call and we'll walk through how your job costing is set up today.



Mistake #1: Inaccurate Labor Tracking


Labor is one of the biggest costs on any roof. It's also one of the easiest to get wrong.


Picture this. It's Friday afternoon, and your foreman is sitting in the truck trying to remember where his crew spent their hours this week. Monday's repair "felt like" half a day. The roof replacement on Elm Street probably took most of Tuesday and Wednesday. He writes it down, turns it in, and calls it good.


That's labor drift: small gaps between the hours actually worked on a job and the hours recorded against it. A half hour here, an hour there. Across several crews and a full season, it adds up to real money that never lands where it belongs. And your estimates never improve, because the data behind them is guesswork.


If you use subcontractor crews paid by the square, the risk looks a little different. Their invoices still need to land on the right job, or your labor costs end up just as scrambled.


The fix: Real-time mobile time tracking by job


Give your crews a mobile app that lets them clock in and out of each job as it happens. In the QuickBooks world, that's QuickBooks Time, which crews use through the QuickBooks Workforce mobile app. Time tracking is included with QuickBooks Online Payroll Premium and Elite, and hours can be assigned to specific customers and projects.


Then set one rule: no job, no clock-in. For subcontractor crews, the same rule applies to invoices: no job number, no payment.


Mistake #2: Materials That Never Land on the Right Job


For most roofers, materials leak out in two places.


The first is leftover stock. Bundles, underlayment, flashing, and drip edge from one job end up on a trailer or in the shop, then get used on the next one, and nobody records the move. The second is the mid-job supply run. The crew comes up short on ridge cap, someone grabs a few bundles from the supplier, and the charge shows up weeks later as one line on a monthly statement.


Either way, the cost lands in a general materials account, and the job looks more profitable than it was. Returns work the same way in reverse: if the credit for unused bundles never gets applied to the job, that job looks worse than it really was.


The fix: Tag every purchase and pull to a job number


Require crews to tag every supplier purchase, every shop pull, and every return to a job number. For each roof replacement, issue a purchase order tied to the job before the delivery is scheduled.


Then reconcile weekly. Match supplier invoices and credits against open jobs, and chase down anything untagged. In QuickBooks Online Plus or Advanced, you can assign bills and expenses directly to a project, so those costs show up in that job's profitability numbers.


A consistent cost code structure helps here too. Splitting costs into categories like tear-off and disposal, decking, underlayment, shingles or membrane, flashing, and permits shows you where a job went over budget, not just that it did. Track your actual waste factor as well. If you estimate 10% waste on a cut-up hip roof and actually burn through more, you'll see it in the numbers instead of wondering where the margin went.


Mistake #3: Leaving Overhead Out of Job Costs


If you only count labor and materials, a $15,000 roof replacement with $9,000 in direct costs looks like a 40% margin. But that job also used your trucks, trailers, ladders, fall protection gear, insurance, estimator, office staff, and the marketing that brought in the lead. None of that is free, and none of it shows up on the job unless you put it there.


That's how a roofing company can be "profitable on every job" and still come up short on cash at month end.


The fix: Build a burden rate and apply it to every labor hour


Start with labor burden: what an employee costs you beyond their hourly wage, including employer payroll taxes, workers' compensation insurance, and benefits. This matters more in roofing than in most trades, because workers' comp rates for roofing work are typically among the highest in construction. Then handle overhead allocation. Total your annual overhead and divide it by the billable labor hours you expect for the year.


Here's a simplified example using made-up numbers:


  • A roofer earns $30 an hour, and labor burden adds 40%, for a fully burdened labor cost of $42 an hour.

  • Annual overhead is $400,000, and your crews expect 8,000 billable hours. That's $50 an hour in overhead.

  • Your break-even hourly rate is $92. Any labor hour priced below that loses money before you've bought a single bundle.


If your crews are paid by the square, run the same math per roofing square (100 square feet of roof) instead. Using the same $400,000 in overhead, 4,000 installed squares a year works out to $100 a square in overhead.


Your real numbers will differ, so recalculate at least once a year. Whether you bill roof repairs time-and-materials or sell replacements by price per square, this number belongs in your pricing. Your price per square is only as accurate as the costs baked into it.


Mistake #4: Undocumented Change Orders and Extra Work


You quote a tear-off. The crew strips the first slope and finds rotted decking. Or there's a second layer of shingles nobody saw from the ground. Or the homeowner decides mid-job they want to upgrade to a ridge vent.


Your crew handles it. Nobody wants to leave a roof open while they talk about money.


Then the invoice goes out at the original price, and your company quietly absorbs the extra labor and materials. A few of those a month can wipe out your margin.


The fix: A simple change order process


Put a change order process in place. It doesn't need to be fancy. Before any added work begins, write down the new scope and the new price, and get the customer's approval. A signature on paper or an e-signature on a tablet both work. Many roofers also price decking replacement per sheet right in the original contract, so the approval is fast when rot turns up.


On storm restoration work, the same discipline applies to insurance supplements, which are requests for items the original claim estimate missed. Document the added scope with photos before it's covered up, and follow your state's rules for working on insurance claims.


On larger jobs like commercial roofing projects, pair approved change orders with progress billing, invoicing in stages as work is completed, so added scope never piles up unbilled.


Mistake #5: Reports That Show Up Too Late


Many roofing business owners find out a job lost money weeks, sometimes months, after it closed. By then, the same estimating mistake has been repeated on five more roofs.


The fix: Review estimated vs. actual costs regularly


Make job profitability review a standing habit, weekly or at least monthly. For each job, compare estimated costs with actual costs for labor, materials, and overhead. Then look for patterns:


  • Are steep-pitch tear-offs consistently taking longer than your estimates assume?

  • Is your actual waste factor running higher than the one in your estimates?

  • Are certain crews or job types regularly falling below your target gross profit margin?


In QuickBooks Online Plus and Advanced, the Projects feature shows income, costs, and profit for each job. QuickBooks Online Advanced adds project cost estimates and an estimates vs. actuals report, so you can see exactly where a job drifted from the plan.


Then adjust your price per square, estimates, or processes before the same mistake repeats.


Stop Guessing and Start Knowing Your Numbers


Here's what we've noticed: the roofing companies that grow profitably aren't always the busiest ones. They're the ones that know what every job actually costs.


None of these fixes is complicated. But each one takes a system, and someone keeping that system clean month after month.


That's where we come in.


Ready to see which roofs are making you money and which ones aren't? Book a discovery call and we'll look at your job costing setup together and show you where profit may be leaking.



 
 
 

Comments


bottom of page