The Roofing Black Box

Overhead and Profit on Roofing Jobs: What to Actually Charge

Roofing Insights · 2026-08-07

Ask ten roofers what they mark up a job and you'll get ten answers, most of them wrong. "I add 10 and 10." "I do cost times 1.5." "I charge what the market takes." None of those are pricing. They're superstitions that happened to survive a few good years.

Overhead and profit aren't a markup you sprinkle on at the end. They're two separate numbers, calculated from your own books, and if you can't state both from memory you're bidding blind. Here's how to get them right.

Overhead is not "office stuff"

Overhead is every dollar you spend that doesn't attach to a specific job. Rent on the shop. Your estimator's salary. General liability and workers' comp base premiums. Truck payments, insurance, and fuel for vehicles that aren't dedicated to one project. Software. The bookkeeper. Your phone bill. Your own salary if you're not swinging a hammer full time.

What's not overhead: shingles, underlayment, fasteners, dumpsters, crew labor and burden on that job, the permit for that address, the crane rental, the lift. Those are job costs. They go in the estimate line by line.

The line matters because everything you misclassify as job cost is overhead you're not recovering, and everything you misclassify as overhead inflates your recovery rate and makes you look expensive. Two piles. Be strict.

Calculate your actual overhead rate

Pull last year's P&L. Two numbers:

Divide overhead by job cost. That's your overhead rate as a percentage of cost.

Say you did $2.4M in revenue, $1.68M in direct job cost, and $432K in overhead. Your overhead rate is 432,000 ÷ 1,680,000 = 25.7%. Every job you bid needs to carry roughly a quarter of its direct cost in overhead just to keep the lights on. Not to make money. To break even.

Most small-to-mid roofing companies land between 18% and 30%. If you're under 15%, either you're running lean out of a truck or you've got expenses hiding in job cost. If you're over 35%, you have an overhead problem that no pricing strategy will fix.

Profit is what's left, and it's a separate decision

Once overhead is covered, profit is the return on the risk you took. It's not a reward for showing up — it's the money that funds your next truck, absorbs the callback you eat next spring, and gets you through a slow Q1 without a line of credit.

Reasonable net profit targets by work type:

These are net, after overhead. That's the distinction most contractors blow.

The margin-vs-markup mistake that eats companies

This is the single most common way roofers underprice, and it's arithmetic, not judgment.

Markup is what you add to cost. Margin is what percentage of the sale price is your gross profit. They are not the same number and adding 20% does not get you 20%.

Job costs $10,000. Add 20% markup: sell for $12,000. Your gross profit is $2,000 on a $12,000 sale — that's a 16.7% margin, not 20%. You just gave away a third of what you thought you were making.

The formula: Selling price = Cost ÷ (1 − desired margin).

Want 40% gross margin on $10,000 cost? $10,000 ÷ 0.60 = $16,667. That's a 66.7% markup. Here's the conversion table worth taping to your monitor:

Putting it together: the actual number

Take the 25.7% overhead rate from above and a 15% net profit target. Direct cost on a job is $18,000.

The wrong way is to add 25.7% and then 15% sequentially and call it done. Do it as a margin calculation instead.

Your required gross margin has to cover overhead and profit as a share of the sale, not the cost. Work it in one step: divide direct cost by (1 − net profit target), after loading overhead.

Bid it at $26,600. Gross margin is 32.4%. Net profit is $3,993. If you'd "added 10 and 10" you'd have bid $21,780 — below break-even. You'd have worked a month to lose $846 and never known why the year felt so tight.

Where the number moves

The base rate isn't the final answer. Adjust up for:

Adjust down only for genuine efficiency: a repeat customer with known conditions, a simple gable you can crew in a day, three roofs on the same street next week. Never adjust down because you want the job. That's not a discount, that's a donation.

The overhead trap on small jobs

A $1,200 repair carries almost the same overhead load as a $12,000 reroof — same truck roll, same phone calls, same invoice, same warranty file. If you're applying a flat percentage across the board, your small jobs are being subsidized by your large ones and you probably don't know by how much.

Fix it with a minimum charge and a separate service rate structure. Most healthy roofing companies run a $500–$850 minimum on residential service and price repairs at a 30–40% net margin. If your repair division "isn't very profitable," this is almost always why.

Recheck the rate every year

Overhead rates drift. You hire a production manager, add a truck, move to a bigger shop — your rate climbs and your pricing doesn't follow. Or you grow volume 40% on the same overhead and your rate drops, which means you've got room to be competitive that your competitors don't have. Either way, you can only act on it if you know it.

Recalculate every January off last year's closed books, and again mid-year if you've made a significant hire or added equipment. Then check it against reality: at year end, did your actual net margin land where you priced it? If you bid at 15% and finished at 6%, the gap is either estimating error, production error, or overhead you never counted. Find out which before you set next year's number.

The short version

Overhead rate = annual overhead ÷ annual direct job cost. Load every bid with it. Then divide by (1 − your profit target) to get the sell price. Adjust for risk. Hold the minimum on small work. Recheck annually.

You don't need to be the cheapest bid in the stack. You need to be the one that's still in business in five years to honor the warranty — and that's a math problem before it's a sales problem.

Stop hand-building bids.
The Roofing Black Box turns your takeoff or measurement docs into a finished bid sheet and client-ready proposal in about a minute. Your first job is free.
Generate a bid →