Skip to main content

Roofing Job Costing: Where Margin Actually Leaks (and How to Plug It)

Emily Crawford, Home Maintenance Editor··32 min readRoofing Business Operations
On this page

Ask a roofing owner what their margin is and you'll usually get a confident number. Ask them what the margin was on the third tear-off they ran last Tuesday and the room goes quiet. That gap, between the margin you think you're making and the margin you actually made on a specific job, is where the money lives. It's also where it dies.

Margin in roofing rarely disappears in one dramatic event. Nobody forgets to charge for an entire roof. Instead it bleeds out in fractions: a waste factor that was a point too low, a labor crew that ran a half-day long, a supplement that never got documented, a dumpster that got billed to the wrong job, a change order the homeowner agreed to verbally and the office never wrote up. None of these feel fatal in the moment. Stack twelve of them on one job and a roof you bid at 38% gross walks out the door at 19%.

Job costing is the discipline of catching those fractions, job by job, before they become a pattern you can't see. Done well, it tells you more than whether you made money this month; it tells you which kinds of work make you money and which quietly subsidize the rest. This is a working breakdown of every place margin leaks in a roofing operation, why it leaks there, and the specific controls that stop it. It's written for the owner or production manager who already knows roofs and now wants to know their numbers with the same precision they know a deck.

What job costing actually is (and what it isn't)

Job costing is assigning every dollar of cost to the specific job that caused it, then comparing that real cost against what you bid. That's it. The output is a per-job profit-and-loss statement, not a company-wide one.

The distinction matters because company-level accounting hides everything useful. Your year-end P&L might show a healthy 30% gross margin. That single number is an average, and averages lie. Inside it you might have retail re-roofs running at 42% and insurance restoration jobs running at 14%, and the only reason the blended number looks fine is that the retail work is carrying the restoration work on its back. The company P&L will never tell you that. Only job costing will.

Here's the vocabulary, because people use these words loosely and then make pricing errors because of it:

  • Direct costs (job costs): Costs that exist because a specific job exists. Materials, the labor that installed them, the crew's burden, the dumpster, the permit, the crane rental, subcontractors. If the job vanished, these costs vanish with it.
  • Overhead (indirect costs): Costs that exist whether or not any single job runs. Your office rent, your estimator's salary, your truck payments, insurance, software, the owner's pay. These get allocated to jobs but aren't caused by any one.
  • Gross profit / gross margin: Revenue minus direct costs. This is the number job costing measures.
  • Net profit: Gross profit minus overhead. This is what's actually left.
  • Markup vs. margin: The most expensive confusion in the trade, covered in its own section below.

What job costing isn't: it isn't your accounting software's job-profitability report run once a quarter. By the time that report exists, the job is closed, the crew is three jobs downstream, and nobody remembers why the labor ran over. Real job costing is closer to real time. The leak gets found while the evidence is still warm.

The two ways roofers actually track job costs

Before the leaks, a word on method, because the method determines whether you'll ever catch them.

The shoebox method (most small shops). Receipts go in a folder or a truck console. At month-end a bookkeeper enters them into accounting software, maybe tags them to a job, maybe not. Labor comes from payroll, which is grouped by pay period, not by job. The result is a company P&L that's roughly right and a job-level picture that's a guess. You feel your margins; you don't measure them.

Committed-cost tracking (shops that have decided to grow). Costs get assigned to a job the moment they're committed, not when the invoice clears. The day you order shingles, that purchase order hits the job's cost ledger even though you won't pay the supplier for 30 days. The day a crew clocks in on a roof, those hours hit that job. This is the only method that lets you see an overrun while the job is open, which is the only time you can do anything about it.

The gap between these two is the difference between an autopsy and a check-up. You can run a real roofing business on the shoebox method up to a point, but the leaks below will be invisible to you, and invisible leaks are the ones that close companies. The rest of this assumes you want to see them.

A practical middle path for a shop not ready for full construction-accounting software: a single shared spreadsheet per job with five committed-cost buckets (material, labor, equipment/dumpster, subs, permits), updated by whoever commits the cost the day they commit it. It's clunky. It still beats finding out in March.

Leak #1: The estimate was wrong before anyone touched the roof

The largest margin leaks are baked in at the bid. A job that's mis-bid by 8% cannot be recovered by a heroic crew; they'd have to install for free to make the number. So the bid is where costing discipline starts.

Mismeasured squares

The foundational number in every roofing estimate is the square count, and it's wrong more often than estimators admit, especially on hip roofs, multiple facets, and steep pitches where the footprint understates the actual surface. A 2,400 sq ft footprint on a 9/12 pitch is not 24 squares of roofing; the pitch multiplier alone pushes the actual roof area up meaningfully, and that's before hip and valley cuts.

The fix is to standardize how squares get counted and to stop trusting a single source. Aerial measurement reports (the satellite/drone measurement products) are excellent and fast, but they have known failure modes: they can miss recent additions, misread tree-obscured sections, and under-report on very complex roofs. Treat the report as a strong first draft, not gospel. On any roof over a certain complexity threshold, the estimator should sanity-check the report's total against a rough hand calculation. A 6% measurement error on a 40-square roof is more than two squares of material and labor you either eat or didn't charge for.

Pitch and complexity not priced in

Labor on a 4/12 walkable roof and labor on a 10/12 are different costs, and a flat per-square labor rate prices them the same. Crews slow down on steep pitch, need more fall protection setup, and produce more cut waste at hips and valleys. If your estimating template uses one labor number regardless of pitch, every steep job is underpriced and every walkable job is overpriced. Your steep jobs are subsidizing your easy ones, and your competitors who price pitch correctly will out-bid you on the easy work and let you keep the money-losers.

Build a pitch/complexity matrix into the estimate. A simple version:

Pitch Complexity Labor multiplier vs. base
3/12–5/12 Simple gable 1.00
6/12–7/12 Some hips/valleys 1.15
8/12–9/12 Cut-up 1.35
10/12+ Steep + complex 1.60+

The exact numbers are yours to calibrate from your own completed-job history, which is the entire point of job costing: it gives you the real multipliers instead of guesses.

Forgotten line items

The quiet bid killers are the small components nobody puts on the takeoff. Pipe boots, step flashing, counter-flashing, drip edge, ice-and-water on every eave and valley (and the code-required width up the slope), ridge vent, starter strip, the right number of nails per shingle for the wind zone. Each is cheap. Forgetting four of them on a job is a few hundred dollars of material and the labor to install components you never charged for.

Use a non-negotiable estimating checklist that the estimator physically checks off every component on. The discipline isn't the list; it's that the bid can't be sent until every box is addressed, even if the answer is "not needed on this roof."

Leak #2: Waste factor, the most misunderstood number on the bid

Waste factor is where estimators either bleed margin or bleed competitiveness, and most do one or the other because they treat it as a single fixed percentage.

Waste is real material you pay for and install but that doesn't end up as finished roof: the off-cuts at hips, valleys, and rakes; the starter you cut from field shingles; the breakage; the partial bundles. A common default is to add a flat 10% to the field shingle quantity. The problem is that 10% is correct for almost no actual roof.

A simple gable roof with long, straight runs and few cuts might genuinely waste only 7–8%. A heavily cut-up roof with multiple hips, valleys, dormers, and short runs can waste 15–18% because nearly every course has a cut at both ends and the off-cuts are too small to reuse. If you bid both at a flat 10%, you over-buy on the gable (a small, recoverable loss, since unopened bundles can sometimes return) and under-buy on the complex roof, which is the expensive failure: the crew runs short mid-install, someone makes an emergency supply run, the job pauses, and you eat both the extra material and the lost productivity.

How to set waste factor honestly

Drive waste off roof geometry, not habit. The two variables that matter most are the total length of hips and valleys relative to roof area, and the dominant run length.

Roof character Hip/valley density Suggested field-shingle waste
Simple gable, long runs Low 8–10%
Moderate, some valleys/dormers Medium 12%
Cut-up, many hips/valleys, short runs High 15–18%

Then track it. When the job closes, compare bundles ordered to bundles actually installed (count the leftovers and the trash). If you consistently order 15% waste on simple roofs and find 7% in the dumpster, you're tying up cash and shrinking margin on every retail bid. If you order 10% on complex roofs and crews keep running short, your waste factor is causing supply runs that cost far more than the material. The dumpster is a data source. Make crews report leftover-bundle counts on the close-out sheet and the right waste factor reveals itself within twenty jobs.

Note on specialty materials: certain architectural and designer shingles, metal panels, and tile have different and often higher waste characteristics, and some shingle warranties or manufacturer instructions speak to coverage that affects your quantities. Don't carry an asphalt waste factor onto a metal or tile bid.

Leak #3: Labor burden, the cost you're probably not fully loading

Ask an estimator what a roofer costs and you'll often get the hourly wage. That's the single most common margin leak in the trade, because the wage is maybe 60–70% of what the employee actually costs you. Everything you pay on top of the wage is labor burden, and if it's not in your labor rate, every labor hour you bid loses money before the crew leaves the yard.

Labor burden includes, at minimum:

  • Employer payroll taxes (Social Security and Medicare/FICA, federal and state unemployment).
  • Workers' compensation insurance, which for roofing is among the highest-rated classifications in the trades. A roofing workers' comp rate can run a substantial multiple of the rate for office work; it is charged per dollar of payroll and it is large.
  • General liability insurance allocable to labor.
  • Paid time off, holidays, and any sick leave.
  • Health insurance or other benefits, if offered.
  • Training, safety equipment, and any per-diem.

Worked example

Take a roofer at a $25.00 base wage:

Component Amount
Base hourly wage $25.00
Employer FICA (~7.65%) $1.91
Federal + state unemployment $0.45
Workers' comp (illustrative roofing rate applied to wage) $7.50
General liability allocation $0.60
Paid time off / holidays (prorated) $1.20
Benefits (if offered) $1.50
Fully burdened hourly cost ~$38.66

The burden here is roughly 55% on top of wage, and that's before any benefits-heavy plan. Your actual workers' comp rate depends on your state, your experience modifier, and your classification, so calculate yours specifically; the published rates and your mod factor come from your carrier and your state's rating bureau. But the structural point holds: if you bid labor at $25 and it costs $38.66, you are losing roughly $13.66 every hour the crew works, and a four-person crew on a two-day job burns over 64 hours. That's nearly $900 of pure leak on one ordinary job, entirely from using the wrong labor rate.

The fix is mechanical: build your fully burdened labor rate once, recalculate it whenever your comp rate or benefits change (at least annually), and make sure the estimating template uses that number, never the wage. If you pay crews by the square (piece rate) rather than hourly, you still must add burden on top of the piece rate, because comp, taxes, and liability apply to piece-rate pay too.

Subcontractor crews don't eliminate burden

Many shops run 1099 subcontractor install crews and assume that erases labor burden. It reduces some of it, but it introduces its own leaks: you need to verify the sub carries their own workers' comp and liability, because if they don't, your carrier may charge you comp on their pay at audit anyway, and you carry the liability exposure regardless. The "cheaper" sub crew that's uninsured isn't cheaper; it's a deferred bill that arrives at your insurance audit with interest. Cost the sub at their invoice plus your real exposure and verification overhead.

Leak #4: Markup vs. margin, the arithmetic that quietly underprices half the trade

This one is pure arithmetic and it costs roofing companies more than any other single conceptual error.

Markup and margin are not the same thing, and using markup percentages as if they were margin percentages systematically underprices every job.

  • Markup is added to your cost. "Cost plus 30%."
  • Margin is the share of the selling price that's gross profit.

If your cost is $10,000 and you add 30% markup, you sell at $13,000. Your gross profit is $3,000. But $3,000 on a $13,000 selling price is only 23% margin, not 30%. The owner who thinks "I mark up 30%, so I make 30%" is making 23% and doesn't know it.

Here's the conversion table every estimator should have taped to the wall:

Markup on cost Resulting gross margin
20% 16.7%
30% 23.1%
40% 28.6%
50% 33.3%
67% 40.0%
100% 50.0%

To hit a 40% gross margin, you need roughly a 67% markup on cost, not a 40% markup. The shop marking up 40% and targeting 40% margin is leaving over 11 points of margin on every job, which on a million dollars of installed work is more than a hundred thousand dollars that simply evaporated into bad math.

The formula to price from a target margin: Selling price = Cost ÷ (1 − desired margin). For a 40% target on $10,000 of cost: $10,000 ÷ (1 − 0.40) = $10,000 ÷ 0.60 = $16,667. Memorize that you divide by one minus the margin. Everything else follows.

Leak #5: The field, where the bid meets reality

A perfect bid still leaks if the field doesn't execute to it. Production is where committed costs turn into actual costs, and the gap between them is the production manager's whole job.

Labor overruns nobody logged

The single most common field leak is labor running past the budgeted hours, and the reason it stays a leak is that nobody compares actual hours to budgeted hours until payroll, by which point the cause is forgotten. The crew that took an extra half-day because the old decking was rotten and had to be replaced created a real, billable condition, but if no one logged it as a change, you ate the labor and the plywood both.

The control is a daily production log per job, even a photo of a handwritten sheet texted to the office: crew size, hours, squares completed, and any condition encountered that wasn't in the scope. Run completed squares against budgeted squares-per-day midway through the job, not after. A crew that's behind pace on day one is a problem you can still fix; a crew that finished three days late is a number you can only mourn.

Material that walks

Material leaks in three ways: theft and "shrinkage" off open job sites, over-delivery that gets installed on the next job and never re-billed, and damage from improper storage (felt and ice-and-water left in the sun, shingles stored in a way that causes sticking or breakage). Deliver as close to the right quantity as your waste factor allows, count what's left at close-out, and reconcile leftovers against the job they were charged to. Material delivered to Job A and installed on Job B makes Job A look unprofitable and Job B look like a hero, and both numbers are lies that corrupt your historical costing data.

Rework and callbacks

A callback is a job you do twice and bill once. Leaks here are the second trip's labor, the replacement material, and the reputational cost. Track callbacks by crew and by cause, because the data tells you whether you have a training problem, a materials problem, or an estimating problem (e.g., crews rushing because the job was bid too tight on hours). Callback cost is real job cost and should be charged back to the original job in your records so the job's true margin is visible. A crew that's fast but generates callbacks may be your least profitable crew once the second trips are counted.

Equipment and dumpsters billed to the wrong job

Dumpster rental, crane time, lift rental, and fuel are direct costs that frequently get lumped into overhead because they're small and annoying to allocate. Lumping them into overhead means your per-job margins all look slightly better than they are and your overhead looks worse, which leads to over-marking-up to cover "overhead" that's actually unallocated job cost. Assign the dumpster and the crane to the job. It takes thirty seconds and keeps every job's margin honest.

Leak #6: Change orders and the verbal-agreement trap

If there is one leak that drains restoration and re-roof work more than any other, it's the change order that happened in real life but never happened on paper.

The scenario is universal: the crew tears off and finds rotted decking, or two layers where the bid assumed one, or a soft spot around a chimney that needs new flashing and framing repair. The homeowner is standing right there. The crew lead says "we found bad plywood, it'll be about eight sheets," the homeowner says "yeah, do whatever it needs," and everyone moves on. The decking gets replaced. The labor gets spent. And it never gets written up, priced, signed, or billed, because the office wasn't there and the crew was focused on the roof.

That's not a small leak. Decking replacement on a meaningful section, plus the labor, plus the crew time lost dealing with it, is real money, and verbal "do whatever it needs" is not collectible. You did the work for free and the customer genuinely believes they paid for it.

A change order process that actually gets used

The process has to be fast enough that a crew lead on a roof will actually do it, or it won't happen.

  1. Photograph the condition before touching it. The photo is the documentation and the justification in one.
  2. Log it immediately via a simple form or app on the crew lead's phone: address, condition found, what it requires, rough quantity. Text or app, not a paper form that lives in a truck.
  3. Price it against a pre-built unit-cost menu. Decking per sheet installed, fascia per linear foot, flashing per location. If the prices are pre-loaded, the crew or office can generate a change-order number in minutes instead of "figuring it out later," which means never.
  4. Get written or e-signed approval before proceeding wherever the condition allows a brief pause. Even a texted "yes, approved, $X" from the homeowner is worlds better than a verbal nod, because it's collectible.
  5. Attach it to the job's cost record so the change's cost and its revenue both show up and the job's margin stays accurate.

For insurance restoration work specifically, found conditions like decking, additional flashing, or code-required upgrades are frequently legitimate supplement items, and the documentation workflow is the same discipline. The contractor's job is to document the condition thoroughly and write an accurate, line-item repair estimate aligned to standard estimating practice, then hand that documentation to the homeowner. The homeowner files it with their carrier and the carrier decides coverage. That's the lane, and it matters that you stay in it: a roofer documents damage and writes an accurate estimate for repairing their own scope; a roofer does not, for a fee, negotiate or "handle" the claim, interpret the policy or what's covered, promise a specific payout or that the work will be approved, promise that the deductible is waived or absorbed, or advertise a "free roof." Those last items aren't just bad practice; for a contractor they can amount to unlicensed public adjusting under many state statutes. Thorough photos and an accurate Xactimate-aligned estimate are entirely yours to produce and are exactly the documentation that protects your margin on found conditions. The payout decision belongs to the carrier and the filing belongs to the homeowner.

Leak #7: The close-out gap, where finished jobs hide their losses

The job is done, the crew's gone, the customer's happy, and the leak you'll never find is the close-out you didn't do.

Close-out is the step where you reconcile what the job actually cost against what you bid, while you still remember the job. Skip it and the job's real margin is never computed; it just dissolves into the quarterly average. The shops that never improve their estimating are the shops that never close out, because close-out is the feedback loop that makes next quarter's bids better.

A close-out checklist that takes fifteen minutes

  • Final material reconciliation: ordered vs. installed vs. leftover, by SKU for the big items (shingles, ice-and-water, underlayment).
  • Final labor: actual job hours from the production logs vs. budgeted hours, with reasons for any variance.
  • Equipment and dumpster: confirmed billed to this job.
  • Change orders: all found-condition work written up, priced, and billed; no "we'll catch it later" items left open.
  • Subcontractor invoices: received and matched to the job, not still floating.
  • Final job P&L: revenue (including approved change orders) minus all of the above = actual gross margin.
  • Variance note: a one-line plain-English reason this job beat or missed its bid. "Steep pitch ate labor." "Waste factor too low, ran short." "Clean retail, hit the number."

That variance note is the gold. Twenty close-outs with honest variance notes will tell you your real labor multipliers, your real waste factors, and which job types actually make money, which is the entire return on doing this.

Putting numbers on it: a worked job, bid vs. actual

Concrete beats theory. Here's an ordinary 30-square architectural-shingle re-roof, retail (not insurance), moderate complexity, bid and then close-out.

The bid:

Line Bid amount
Shingles + accessories (30 sq + 12% waste) $7,500
Underlayment, ice-and-water, drip edge, vents $1,400
Labor (budgeted 70 burdened hours @ $38.66) $2,706
Dumpster + permit $650
Total direct cost $12,256
Sell price (priced at 40% target margin) $20,427
Bid gross profit / margin $8,171 / 40%

The close-out (what really happened):

Line Actual Variance
Shingles + accessories $7,720 +$220 (waste ran to 15%, roof more cut-up than measured)
Underlayment / accessories $1,400 flat
Labor (actual 84 burdened hours) $3,247 +$541 (steep section + 8 sheets decking handled by crew)
Dumpster + permit $650 flat
Decking change order (8 sheets + labor) $0 billed crew never wrote it up; material + labor already in the lines above
Total actual direct cost $13,017 +$761
Revenue (no change order added) $20,427 $0
Actual gross profit / margin $7,410 / 36.3% −$761 / −3.7 pts

The job still made money, which is exactly why this leak is dangerous: it doesn't bleed visibly. But 40% became 36.3%, and the entire gap is two leaks: a waste factor a few points too low (Leak #2) and an unbilled change order (Leak #6). Had the decking been written up at even a modest $1,200, the job would have beaten its margin instead of missing it, because the customer would have happily paid for plywood they could see was rotten. Multiply that one missed change order across a season of tear-offs that all find some bad decking and you've located six figures of pure, recoverable margin.

Leak #8: Overhead you never allocated, so you never priced for it

Everything so far has been about direct cost, the cost of the job itself. But gross margin isn't take-home. Your overhead, the office, the estimators, the trucks, the software, the owner's pay, insurance you carry whether or not a single roof goes on, has to come out of gross profit before anything is actually yours. The leak here is subtle: shops price to a gross-margin target without ever calculating what gross margin they need to cover overhead and still net a profit. They pick 30% because it sounds healthy, then wonder why a year of 30%-margin jobs left almost nothing in the bank.

The arithmetic is straightforward and most shops have never done it. Add up your annual overhead, everything that isn't a direct job cost. Then estimate your annual revenue. Overhead divided by revenue is the share of every dollar that's spoken for before profit. If your overhead is $400,000 and you do $2,000,000 in revenue, overhead eats 20 cents of every dollar. A job at 30% gross margin nets you 10 points after overhead, if your revenue assumption holds. Have a slow quarter and revenue falls while overhead stays fixed (that's what makes it overhead), and the overhead share climbs, and that same 30% job now nets you almost nothing.

Two practical consequences. First, your target margin should be set from your real overhead rate plus your desired net profit, not pulled from the air; if you need to cover 20 points of overhead and net 10, you're bidding to a 30%+ gross margin floor and treating anything below it as a job you're choosing to lose money on, deliberately or not. Second, watch what happens when volume drops: the fixed nature of overhead means margins have to rise in slow seasons to net the same profit, which is the opposite of what most shops do (they cut price to win work and bleed faster). Knowing your overhead rate is what keeps you from chasing revenue that loses money once the office is paid for.

A related allocation trap: don't bury true direct costs (dumpsters, cranes, fuel, the items from Leak #5) in the overhead bucket. Doing so inflates your overhead rate, which makes you over-mark-up to cover it, which makes you uncompetitive on bids, all because a cost that belonged to a specific job got smeared across the company. Keep direct costs on jobs and overhead as the genuinely shared costs, and both your job margins and your overhead rate stay honest.

Insurance and restoration jobs cost differently than retail

Restoration and storm work carries cost dynamics that retail re-roofs don't, and shops that cost both the same way consistently misread which line of business is actually carrying them.

The first difference is the administrative load. A retail re-roof is sold, scheduled, installed, and closed. A restoration job adds inspection documentation, detailed line-item estimating to standard estimating practice, photo packages, supplement documentation for found conditions, and a longer cycle time before the work is even authorized. That administrative time is real cost, usually overhead, and if you don't account for it, restoration jobs look more profitable on a gross-margin basis than they are once the office hours are counted. A 35% gross-margin restoration job that consumed three times the office time of a retail job at the same margin is not the same job.

The second difference is cycle time and cash. Restoration jobs often sit longer between sale and completion, which ties up your money and can mean carrying material costs before any revenue arrives. Longer cycles also mean more chances for scope to drift and for found conditions to appear, which is exactly why the change-order discipline from Leak #6 matters even more on this work.

The third is the documentation itself is the margin protection. On restoration work, found conditions like additional decking, code-required upgrades, and extra flashing are frequently legitimate items, but only if they're documented thoroughly and written into an accurate, line-item estimate before the work is buried under shingles. The discipline is identical to a retail change order: photograph the condition, price it on the unit-cost menu, document it cleanly. The contractor produces thorough photos and an accurate repair estimate for their own scope and hands it to the homeowner; the homeowner files it and the carrier decides what's covered. Stay in that lane, document like your margin depends on it (it does), and never drift into negotiating the claim, interpreting coverage, promising approval or a payout, erasing a deductible, or advertising a free roof. The estimate and the photos are yours to make excellent; the coverage decision is the carrier's.

Cost these jobs with their full administrative burden loaded in, segment them separately in your reporting, and you'll finally know whether your restoration line makes money or whether your retail work has been quietly carrying it the whole time.

Five costing mistakes that look like bad luck

Some leaks masquerade as random misfortune. They're not; they're systematic, which means they're fixable.

  1. "Crews just ran long on that one." If crews run long on a particular pitch or roof type repeatedly, that's not luck, it's an estimating error in your labor multiplier for that type. Lucky overruns don't repeat; systematic ones do. The variance notes from close-out tell them apart.
  2. "Material prices jumped on us." Shingle and accessory prices move, and a bid honored months after it was written can be underwater on material through no field fault. The fix is a bid-expiration window (e.g., quotes valid 30 days) and a note in the estimate that pricing is subject to change beyond it, so material inflation doesn't silently eat a margin you locked in last quarter.
  3. "We ate a little on the supplement." Found conditions that get installed but documented late or never are not bad luck; they're a broken change-order process. Every "little" you ate was a written estimate you didn't produce in time.
  4. "That customer was just difficult." Scope creep, the extra requests that get done to keep a customer happy and never get billed, feels like personality. It's a process gap: anything beyond the signed scope is a change order, period, and pricing it isn't unfriendly, it's how the job stays profitable enough to do well.
  5. "Insurance only paid so much." This one's a costing-and-lane issue at once. If your documentation was thin, legitimate items may not have been written into the estimate the homeowner filed. The contractor's control is the quality and completeness of the documentation and estimate, not the carrier's decision. Tighten the documentation; don't try to work the claim.

Every one of these is a number you can move with process. None of them improve by hoping for easier jobs.

The metrics worth watching, and the targets that mean something

Job costing produces numbers; these are the few worth steering by.

  • Gross margin per job, by job type. Segment retail re-roof, insurance restoration, repair, and commercial separately. The blended number is a comfort blanket. The segmented numbers are a strategy.
  • Estimate-to-actual variance. For each job, actual direct cost vs. bid direct cost, in dollars and percent. Track the trend: if variance is consistently negative on a job type, your bidding model for that type is wrong, not your crews.
  • Labor hours: actual vs. budgeted. The earliest warning of a field or estimating problem. A persistent overrun on steep roofs means your pitch multiplier is too low.
  • Material waste: ordered vs. installed. Closes the loop on your waste factor and surfaces shrinkage.
  • Change-order capture rate. What share of jobs that hit found conditions actually generated a written, billed change order? If tear-offs find decking on 40% of jobs but only 10% of jobs have a decking change order, you've quantified a specific leak.
  • Callback rate by crew. Hidden labor cost and a quality signal in one number.

A caution on benchmarks: published "average roofing margins" vary widely by region, job mix, and how each shop defines overhead, so treat any external benchmark as a loose reference, not a target. Your own trend line, job costed honestly, is worth more than anyone's industry average. What you're chasing is your margin getting more predictable and the gap between bid and actual getting smaller every quarter.

Where the work comes from changes your margin too

There's a leak upstream of every bid that job costing alone won't show you: the mix and quality of the jobs you're bidding in the first place. Two shops with identical estimating discipline can have very different margins purely because one is bidding better-targeted work.

The expensive pattern is chasing volume indiscriminately: knocking random doors, buying shared leads, bidding everything. That fills the schedule but loads it with low-probability, price-shopped jobs where you either bid thin to win or burn estimating hours to lose. Estimating time is overhead, and overhead spent on jobs you don't close is a quiet, large leak that never shows up on a single job's P&L because it's spread across all of them.

The more profitable pattern is targeting your outreach toward roofs that are genuinely likely to need work, so a higher share of your bids meet a real need and close at a healthy margin. Two signals predict "likely to need work" better than anything: roof age and storm exposure.

This is where roof intelligence data earns its place in a costing conversation. RoofPredict estimates a roof-age range per individual address from aerial imagery and models storm physics, like hail and wind exposure, per roof rather than per zip code, then ranks addresses so you can point crews and mailers at the roofs the weather wore out and the roofs simply aging out of their service life. You can also enrich your own CRM or mailing list with those roof-age and storm signals, so the list you already own gets sharper instead of starting cold. The honest limits matter and connect directly to the costing discipline above: an age estimate is a range, not an install date, and a storm model is odds a roof was affected, not proof of damage. You still inspect, measure, and document every roof yourself before you bid, exactly as the estimating and change-order workflows here require. What better targeting does is raise the share of your bids that land on roofs with a real reason to buy, which lifts your close rate and lowers the estimating overhead burned on dead-end bids, two things that move net margin without touching a single shingle. It points the truck at the right roofs; the margin discipline on this page is what keeps the job profitable once you're on them.

A 30-day plan to find your leaks

If you've read this far and your shop runs on the shoebox method, here's the order of operations that finds the most money fastest.

Week 1 — Fix the bid inputs. Recalculate your fully burdened labor rate (Leak #3) using your real workers' comp rate and current taxes; it's almost certainly higher than what's in your template. Fix any markup-vs-margin error (Leak #4) by re-pricing from target margin, dividing cost by one minus the margin. These two corrections alone often add several points of margin to every future bid and take an afternoon.

Week 2 — Install the field controls. Start a one-page daily production log per job (hours, squares, conditions found) and a fast phone-based change-order step with a pre-built unit-cost menu (Leaks #5 and #6). Tell crews the new rule: found decking gets photographed and logged before a board is replaced, every time.

Week 3 — Build the close-out habit. Run the fifteen-minute close-out checklist (Leak #7) on every job that finishes, including the variance note. You're now collecting the data that fixes your estimating.

Week 4 — Read the data and re-bid. With even three weeks of close-outs, look at actual-vs-budget labor and ordered-vs-installed material. Adjust your pitch multipliers and waste factors toward what the jobs actually showed. Segment your margins by job type and find out which work is carrying which.

None of this requires expensive software to start. It requires deciding that "I think we make about 30%" is no longer an acceptable answer, and that every job will tell you the truth before it disappears into the average. The leaks are all small. That's exactly why they've been invisible, and exactly why finding them is the cheapest margin you'll ever add.

FAQ

What's the difference between job costing and my regular accounting?

Regular accounting produces a company-wide P&L that blends all your jobs into one average margin, which hides whether any specific job or job type made or lost money. Job costing assigns every dollar of cost to the specific job that caused it and compares that real cost to what you bid, producing a per-job profit picture. The company P&L tells you whether the business made money; job costing tells you which work makes money and which quietly subsidizes the rest.

How do I calculate my fully burdened labor rate for roofing?

Start with the base hourly wage, then add every cost you pay on top of it: employer payroll taxes (FICA, federal and state unemployment), workers' comp insurance (high for roofing, charged per dollar of payroll), allocable general liability, paid time off and holidays, and any benefits. For roofing, total burden commonly runs 45-60% or more on top of the wage. Use your own state's workers' comp rate and your experience modifier from your carrier, then use the burdened number, never the bare wage, in every estimate.

Why is markup not the same as margin?

Markup is added to your cost; margin is the share of the selling price that is profit. A 30% markup on $10,000 of cost gives a $13,000 price and $3,000 profit, which is only 23% margin, not 30%. To hit a 40% gross margin you need roughly a 67% markup. Price from target margin using Selling price = Cost divided by (1 minus desired margin). Confusing the two systematically underprices every job.

What waste factor should I use for asphalt shingles?

Drive it off roof geometry instead of using one flat number. A simple gable with long runs may genuinely waste only 8-10%, while a cut-up roof with many hips, valleys, and short runs can waste 15-18% because nearly every course has end cuts. A flat 10% over-buys on simple roofs and dangerously under-buys on complex ones, causing mid-job supply runs. Track ordered vs. installed bundles at close-out and let your real numbers calibrate the factor over about twenty jobs.

Where does roofing margin leak the most?

Rarely in one big event. It bleeds in fractions across three zones: the bid (mismeasured squares, pitch not priced, waste factor wrong, labor burden missing, markup-vs-margin error), the field (labor overruns nobody logged, material that walks, callbacks, equipment billed to the wrong job), and the office (unbilled change orders and skipped close-outs). The largest single recoverable leak for most shops is found-condition work, like rotted decking, that gets installed but never written up or billed.

How do I stop losing money on found decking and other surprises?

Use a fast change-order process the crew will actually follow: photograph the condition before touching it, log it immediately on a phone, price it against a pre-built unit-cost menu (decking per sheet, fascia per linear foot, flashing per location), get a written or texted approval before proceeding, and attach the change to the job's cost record so its cost and revenue both show. Verbal 'do whatever it needs' is real work done for free; a texted 'yes, approved' is collectible.

Can a roofing contractor handle the insurance claim to protect margin on storm work?

No. A contractor may inspect, document damage thoroughly with photos, and write an accurate line-item repair estimate for their own scope, then hand that documentation to the homeowner. The homeowner files with their carrier and the carrier decides coverage. A contractor may not, for a fee, negotiate or handle the claim, interpret policy or coverage, promise a specific payout or approval, promise a deductible is waived or absorbed, or advertise a 'free roof', those can constitute unlicensed public adjusting. Thorough documentation and an accurate estimate are entirely yours and are exactly what protects margin on found conditions.

What is committed-cost tracking and why does it matter?

Committed-cost tracking assigns a cost to a job the moment it is committed, not when the invoice is paid. The day you order shingles the purchase order hits the job ledger; the day a crew clocks in those hours hit the job. This lets you see an overrun while the job is still open and you can act, instead of discovering it in a quarterly report after the crew is three jobs downstream. It's the difference between a check-up and an autopsy.

How often should I do job-cost close-outs?

On every job, right after it finishes, while you still remember it. A fifteen-minute checklist reconciles material ordered vs. installed, actual vs. budgeted labor, equipment and dumpster billing, change orders captured, sub invoices matched, and a final per-job margin, plus a one-line plain-English variance note. Skipping close-out is why most shops never improve their estimating: it's the feedback loop that makes the next bid more accurate.

What metrics should I watch to keep margin healthy?

Track gross margin per job segmented by job type (retail, restoration, repair, commercial), estimate-to-actual cost variance and its trend, actual vs. budgeted labor hours, material ordered vs. installed, change-order capture rate (share of found-condition jobs that actually billed a change order), and callback rate by crew. Steer by your own trend lines getting tighter rather than by published industry averages, which vary too widely by region and accounting definitions to be reliable targets.

The Roofline by RoofPredict

Stay Ahead of Roofing Market Changes

Join The Roofline by RoofPredict for weekly roofing intelligence: material price signals, storm demand, insurance and regulatory updates, sales tactics, and local contractor opportunities.

By signing up, you agree to receive The Roofline by RoofPredict. Unsubscribe anytime.

Sources

  1. Workers' Compensation Insurance Overviewosha.gov
  2. Construction Industry Safety and Health (Fall Protection)osha.gov
  3. Employer's Tax Guide (Publication 15)irs.gov
  4. Self-Employed Individuals Tax Center (1099 vs. employee)irs.gov
  5. Occupational Employment and Wages: Roofersbls.gov
  6. Producer Price Index: Asphalt Shingle and Coating Materialsbls.gov
  7. NRCA Roofing Manual and Technical Resourcesnrca.net
  8. International Residential Code (Roof Assemblies, Chapter 9)codes.iccsafe.org
  9. IBHS FORTIFIED Roof Standardsibhs.org
  10. NOAA Storm Prediction Centerspc.noaa.gov
  11. NWS Hail and Severe Weather Informationweather.gov
  12. FTC Guidance for Contractors and Advertising Claimsftc.gov
  13. Texas Department of Insurance: Public Adjusters and Contractorstdi.texas.gov
  14. RoofPredictroofpredict.com

Related Articles