A roofing job's margin usually looks best the day you sell it. Say you bid a reroof at 38 percent. By the time you've been paid and closed out the job, the real number's often a few points lower. That usually isn't one big mistake. It piles up during the job, from small costs that never make it back onto the estimate.
It slips by because most owners check a job's margin when they price it, then never look again once the crew's rolling. So the estimate ends up standing in for the final number, even when the two don't match. Getting roofing job profitability under control starts with seeing that gap, then figuring out which costs cause it.
Sold margin versus delivered margin
Every job has two margins. Sold margin is what the estimate promised. Delivered margin is what's left after every real cost clears: labor, material minus returns, subs, change orders, and anything the job drags in after it's done. On a clean job they're close. When they're not, the job can still look fine in your books while the cash that shows up comes in lower than you figured.
The delivered number's harder to see because it's scattered everywhere. Labor hours are in one place, material invoices in another, change orders buried in a text thread, and the credit for returned material usually never makes it back to the job at all. Putting that together by hand takes time, so most shops don't bother, and the sold number ends up being the only one anybody trusts.
Six common places roofing margin leaks
The gap's usually a bunch of small losses, not one big one. These six show up on roofing jobs more than any others, roughly in the order they happen.
The estimate wasn't priced well to begin with
Sometimes the problem starts before the job does. A bid assumes a clean tear-off, a full crew, and dry weather, and real jobs don't always play along. It's worse when a salesperson can discount to win the work and nothing flags it. If there's no minimum margin on the estimate, points come off to close the deal, and you don't see the shortfall until the job's done.Material you paid for and never returned
Over-ordering's normal, since a second delivery costs more than a few extra bundles. You lose the money on the return trip. If nobody tracks the credit for leftover material and ties it back to the job, that overage just turns into cost. Over a year of production, it's one of the most common leaks, and one of the easiest to fix.Labor that ran longer than the bid
A job you bid at three days that takes four gives back a full day of crew cost, and it usually happens without anybody deciding it should. If you're not tracking crew hours against the actual job, the overrun just shows up as a vague sense that the month was tight, which is too fuzzy to act on.Purchasing changes no one recorded
Prices move between the estimate and the order. A supplier swap, a rush fee, a code upgrade the inspector wanted. Each one's small and makes sense on its own. If your purchase orders aren't matched back to the estimate, they just land in the general cost pile and never get charged to the job that caused them.Extras the crew gave away
A little extra flashing, a run of fascia that was worse than expected— a lot of the time that's the right call for the customer, and going the extra mile is worth it. But, 20LF of flashing @ $15/LF adds up, a resealed pipe boot doesn't. Understanding the difference makes or breaks your margins.The callback after the job closed
A leak on a finished roof pulls a crew off a paying job to go fix one you already marked done. Since the file's closed, that cost rarely gets charged back to the original job. So it looks profitable in your books even though it lost money.
How to measure roofing job profitability on your own jobs
You don't need a new accounting system to find your leaks. Pull your last ten completed jobs and put the sold margin next to the delivered margin on each one. Ten jobs is plenty to show the pattern.
For each job, write down the contract price and everything it actually cost to deliver: labor, material minus returns, subs, and any callback work.
Figure the sold margin and the delivered margin, and note the gap between them.
For any job with a gap worth caring about, sort it into the six buckets above.
Add up each bucket across all ten jobs. One or two usually cause most of the damage.
Fix the biggest one first, then run the same check next quarter and see if it moved.
Most owners who do this find the damage is bunched up in one or two spots instead of spread out, which is good news, because it means the first fix is worth real money. Doing it by hand once a quarter is enough to see where your money's going. The harder part is keeping that delivered number in front of you while the job's still open, so you catch a leak in week two instead of at year-end. That comes down to tracking costs against the job as they hit, keeping returned material tied to its job, and setting a margin floor so an estimate can't go out underwater. Some shops run that off spreadsheets; others use job-management software like ContractorHUB to handle it for them.
Whatever you're using, run the ten-job check this quarter. Measuring roofing job profitability this way is the quickest way to find which of the six leaks is costing you the most, and the fix is usually a small change to how you work, not a big investment. If you want a hand seeing your own sold-versus-delivered gap, book a walkthrough at on our site and we'll go through a few of your recent jobs together.