Skip to main content

Roofing Cost of Goods Sold vs Overhead: The Breakdown That Fixes Your Margins

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

Two roofing companies sign the exact same $18,000 reroof. One walks away with $4,000 of real profit. The other ends the year wondering where the money went, even though the crew worked just as hard and the materials cost the same. The difference almost never shows up on the job site. It shows up in how the two owners draw the line between cost of goods sold and overhead, and whether the price they quoted actually accounted for both.

Get that line wrong and everything downstream is wrong. Your gross margin is a fiction. Your overhead recovery is a guess. The 10-and-10 you've been adding because somebody told you that's the number is either leaving money on the table or quietly bankrupting you, and you have no way to know which. Costing is the one skill that separates roofers who scale from roofers who stay busy and broke.

This is the breakdown of where every dollar belongs, why the classic mistakes (truck payments, your own salary, the warranty callback you ate last spring) quietly destroy margin, and how to build a costing structure you can actually price against. It's written for the owner who reads their own profit-and-loss statement, the estimator who builds the bids, and the sales manager who has to defend a number to a homeowner without giving away the job.

The two buckets, in plain language

Every dollar your company spends falls into one of two buckets. The whole game is putting each dollar in the right one.

Cost of goods sold (COGS) is every cost that exists because a specific job exists. No job, no cost. Materials for that roof. The labor that installed it. The dumpster you rented for that tear-off. The permit you pulled for that address. If you could draw a straight line from the expense to one job, it's COGS. COGS is also called "direct cost" or "job cost," and those terms mean the same thing for our purposes.

Overhead is every cost that exists whether or not you sell a single roof this month. Office rent. Your bookkeeper's salary. Liability insurance. The truck payment on the estimator's vehicle. Software subscriptions. Your phone bill. These costs keep the lights on and the doors open. They don't care how many jobs you booked. Overhead is also called "indirect cost," "operating expense," or in accounting shorthand, SG&A (selling, general, and administrative).

Here's the test that resolves 90% of the hard calls: If you stopped selling roofs tomorrow but kept the business legally alive, which costs would still hit your bank account next month? Those are overhead. The ones that would drop to zero are COGS.

That single question handles most of the gray area. Your foreman's wages while he's on a roof: COGS, because if there's no roof there's no wage. Your office manager's salary: overhead, because she's answering phones and processing payroll whether or not a crew is working. The diesel the crew truck burned driving to the job: COGS. The lease payment on that same truck: overhead, because you owe it whether the truck moves or sits.

That truck example is where most roofers' books start to fall apart, and we'll come back to it in detail.

Why this isn't just accounting trivia

You might be tempted to wave this off as something for the bookkeeper to worry about. It isn't. The COGS/overhead split drives three numbers that decide whether your company survives:

  • Gross profit and gross margin. Revenue minus COGS equals gross profit. Divide gross profit by revenue and you get gross margin. This is the number that tells you whether your jobs make money before the office eats into it.
  • Overhead recovery. Overhead has to be paid out of gross profit. If your gross profit doesn't cover your overhead, you lose money no matter how busy you are.
  • Net profit. What's left after overhead comes out of gross profit. This is what you actually keep.

Misclassify a big chunk of overhead as COGS and your gross margin looks terrible, so you panic and overprice, and lose bids you should have won. Misclassify COGS as overhead and your gross margin looks fantastic, so you underprice, win everything, and go broke at scale. Both errors are common. Both are fatal at volume.

What belongs in roofing COGS, line by line

Let's get specific. Here is what should sit in cost of goods sold for a roofing contractor, with the judgment calls flagged.

Materials

The obvious one, and the one people still get wrong. COGS materials include:

  • Shingles, underlayment, ice-and-water shield, drip edge, starter strip, ridge cap
  • Fasteners, sealant, roofing cement, pipe boots, flashing
  • Decking and sheathing replacement (the plywood you didn't know you'd need until tear-off)
  • Ventilation: ridge vent, box vents, turbines, intake
  • Metal: valleys, step flashing, counterflashing, edge metal
  • For low-slope and commercial: membrane, insulation, fasteners, adhesives, cover board, termination bar
  • Delivery and freight charges tied to a job's material order
  • Sales tax on materials, if you pay it (it's part of what the material costs you)

The judgment call: consumables that span multiple jobs. A tube of caulk, a box of blades, a partial roll of underlayment that gets finished on the next house. Purists track these to the job. Most contractors of small-to-mid size lump small consumables into a single "job supplies" COGS line and call it close enough. That's defensible as long as the line is COGS, not overhead, and as long as it's small. If "job supplies" is 4% of revenue, you've got leakage to investigate.

Two material costs roofers routinely under-bid deserve a flag. The first is waste factor. A 28-square roof never uses exactly 28 squares of shingle — cut waste at valleys, hips, rakes, and starter runs means you order 28 plus a waste percentage, commonly 10% on a simple gable and 15% or more on a cut-up roof with multiple valleys. If you cost the material at 28 squares flat, you're short on every job by the cost of the waste. Build the waste percentage into the material line, and raise it for complex geometry. The second is decking replacement. You can't see rotten or delaminated sheathing until tear-off, so carry a decking allowance in the bid and put a clear unit price for additional sheets in the contract. Eating unanticipated decking out of margin is one of the most common ways a profitable-looking tear-off turns into a break-even job.

Direct labor (this is where the money hides)

Direct labor is the wages paid to the people physically producing the roof: installers, foremen on the roof, laborers doing tear-off and cleanup, your crew. If you sub the install out, the subcontractor invoice is direct labor's cousin (see below).

But raw wages are not the real cost of labor, and this is the single most expensive mistake in roofing costing. The real cost is the labor burden — everything you pay on top of the hourly wage to keep that person employed and on a roof:

  • Employer payroll taxes (Social Security and Medicare, i.e., the employer half of FICA, plus federal and state unemployment, FUTA and SUTA)
  • Workers' compensation insurance, which for roofing is brutal — roofing carries some of the highest comp rates of any trade because of fall exposure
  • General liability insurance allocated to labor, if your policy is priced on payroll
  • Health insurance, retirement match, and other benefits if you offer them
  • Paid time off, holidays, and any non-productive paid hours
  • Per diem, lodging, and travel pay for storm and out-of-area work

A roofer paying a crew member $25/hour is very often spending $36 to $42/hour once burden is loaded, and on the high end of workers' comp territory it can run higher. If you bid using the $25 number, you are losing roughly a third of your labor cost on every hour worked and calling it profit until the comp audit and the tax bills land.

We'll work the burden math fully in its own section, because getting it precise is non-negotiable.

Subcontractor costs

If you sub out installation, the sub's invoice is COGS, full stop. So is any specialty sub: the gutter crew, the sheet-metal fabricator, the crane rental with operator for a steep commercial tear-off. One bonus of subbing: the sub generally carries their own labor burden, so you're paying a loaded number already (assuming they're insured — verify it, because if they're not, your comp and liability auditor will treat them as your employees and bill you accordingly).

Keep sub COGS on its own line, separate from your in-house direct labor. When you compare a job you self-performed against one you subbed, you want the labor structure visible, not blended into mush.

Equipment and job-specific rentals

Costs that exist only because the job exists:

  • Dumpster or roll-off rental and dump fees
  • Equipment rented for a specific job: a boom lift, a conveyor, a magnetic sweeper rental, a portable toilet on a long commercial job
  • Fuel for the crew truck and any gas-powered equipment used on the job (the diesel itself is COGS; the truck payment is not — hold that thought)
  • Small tools consumed or destroyed on a job (blades, bits)

The judgment call: owned equipment. If you own the dump trailer, the lease or loan payment is overhead. But the fuel and maintenance attributable to using it on a specific job lean toward COGS if you track that granularly. Most roofers don't, and that's fine — just be consistent and know which side you put it on.

Permits, job-specific fees, and inspections

  • Building permits pulled for the job
  • Municipal inspection fees
  • HOA submission fees, if the customer's association charges them and you pay
  • Engineering letters or load calcs ordered for a specific roof

These are unambiguous COGS — they're job-specific by definition.

Warranty and callback reserve (the line almost nobody books)

Here's the discipline that separates pros from amateurs. Some percentage of your jobs will generate a callback. A leak around a pipe boot. A blown-off ridge cap. A nail pop that telegraphs through. Fixing those costs labor and materials, and if you don't reserve for it, that cost lands in a future month and gets blamed on a different job.

Mature roofing operations book a warranty reserve as a COGS line — a small percentage of each job's revenue (commonly 0.5% to 2%, set from your own callback history) — so the cost of honoring your workmanship is matched to the jobs that created the risk. If you've never tracked your callback rate, that's project number one, and it pairs directly with knowing which of your roofs are likely to need attention sooner, which we'll get to.

A clean COGS reference table

Cost COGS or Overhead Why
Shingles, underlayment, flashing COGS Consumed by a specific job
Crew wages (on the roof) COGS No job, no wage
Labor burden (comp, payroll tax, benefits) COGS Travels with the wage
Subcontractor invoices COGS Job-specific production
Dumpster, dump fees COGS Rented for the job
Crew truck fuel COGS Burned getting to/doing the job
Permits and inspection fees COGS Tied to the address
Warranty/callback reserve COGS Matches risk to the job that created it
Crew truck loan/lease payment Overhead Owed whether the truck moves or not
Office rent, utilities Overhead Fixed regardless of job volume
Owner/sales/admin salaries Overhead Paid whether crews work or not
General liability, E&O insurance Overhead Carried to stay in business
Marketing, software, phones Overhead Cost of having a business

What belongs in roofing overhead, line by line

Overhead is everything that keeps the business alive between jobs. The categories:

Facilities and fixed operating costs

  • Office and yard/shop rent or mortgage
  • Utilities: electric, water, gas, internet for the office
  • Property insurance on the building and yard
  • Security, waste service for the office (not job dumpsters), landscaping

Administrative and non-production payroll

This is the big one people misfile. Wages for anyone not physically producing roofs:

  • Office manager, receptionist, bookkeeper
  • Estimators and salespeople (their base salary is overhead — their commissions are a separate decision we'll address)
  • Production coordinator or project manager who runs the office side
  • The owner's salary, to the extent the owner isn't on a roof

The nuance on owner pay matters. If you, the owner, still climb on roofs and install, the value of that production labor belongs in COGS, and your management time belongs in overhead. Many one-truck operators skip this entirely and pay themselves whatever's left, which is exactly why they can't tell if their pricing works. Pay yourself a market wage for the work you actually do, split it COGS/overhead by role, and let the leftover be true profit. If there's nothing left over, your pricing is broken and now you know.

Vehicles and the rolling-stock trap

This is the classic roofing costing error, so it gets its own treatment. A truck has two kinds of cost:

  1. Cost of owning it: the loan or lease payment, insurance, registration, depreciation. You owe these whether the truck moves or sits in the yard all month. Overhead.
  2. Cost of using it on a job: the fuel burned and the per-mile wear driving to that specific job. COGS (if you track it that granularly; many fold all vehicle cost into overhead for simplicity, which is acceptable as long as you're consistent and your fuel cost isn't huge).

The mistake roofers make goes both directions. Some dump the entire truck cost — payment included — into a single job because it was "the truck that did that roof," wildly overstating that job's cost. Others ignore vehicle cost entirely and never recover it anywhere. The clean answer: fixed vehicle costs (payments, insurance, registration) are overhead; variable use (fuel) is COGS. Recover the overhead through your overhead markup like every other fixed cost.

Insurance (the business-level policies)

  • General liability (the base policy cost of being a roofing company)
  • Commercial auto on the fleet
  • Errors and omissions / professional liability
  • Umbrella coverage
  • The owner's bond, license fees, and continuing-education costs

Note the split with COGS: workers' comp and the payroll-driven portion of liability ride with labor in COGS because they scale with hours worked. The flat base policy premiums are overhead. If your insurance is billed as a flat annual premium, it's overhead; if it's audited against payroll, the payroll-driven part behaves like burden.

Sales, marketing, and customer acquisition

  • Advertising: digital ads, direct mail, yard signs, vehicle wraps
  • Lead costs and list/data subscriptions
  • Website, CRM, and estimating software
  • Trade-show fees, sponsorships, branded swag
  • Sales commissions (a judgment call — see below)

This category is overhead by default, but it's the overhead that grows the top line, so don't treat it as fat to cut blindly. The question isn't "is marketing too high," it's "what's my cost to acquire a profitable customer, and is it falling."

General and administrative

  • Accounting, bookkeeping, legal, and tax-prep fees
  • Bank fees, merchant-processing fees, loan interest
  • Office supplies, postage, software not tied to production
  • Owner's phone, training, dues, and subscriptions
  • Bad debt (the invoices you never collected)

The commission question

Sales commissions are the one line reasonable people file differently. Two valid approaches:

  • Treat commission as COGS / direct cost. Because it's paid only when a job sells, it behaves like a job cost. This is the cleaner approach for understanding true job-level profit, and it's how many sharp roofing operators do it. Under this method, you include commission in the job's cost and your gross margin reflects the real cost of winning the work.
  • Treat commission as overhead. Simpler for the books, since it lumps with the rest of the sales department. The downside: your job-level gross margin overstates how profitable each sale really was.

Pick one, write it down, apply it the same way every time. The danger isn't the choice — it's inconsistency that makes your margins un-comparable month to month.

Working the labor burden number (do this once, use it forever)

You cannot price a roofing job correctly without a burdened labor rate. Here's the full calculation with realistic-but-illustrative numbers. Plug in your own — these are examples, not benchmarks.

Start with the base wage: $25.00/hour.

Add employer payroll taxes:

  • Social Security + Medicare (employer half of FICA): 7.65% of wage = $1.91
  • Federal unemployment (FUTA) and state unemployment (SUTA): combined varies widely by state and experience rating; assume a blended 3% for the example = $0.75

Add workers' compensation. Roofing comp rates are among the highest of any classification because of fall exposure, and they vary enormously by state and by your own loss history. Comp is quoted as a rate per $100 of payroll. If your roofing class rate is, say, $18 per $100 of payroll, that's 18% of wage = $4.50. Some states and modifiers push this far higher; some lower. Use your own declarations page — do not guess this number, because it's the single biggest burden swing in roofing.

Add benefits (if offered):

  • Health insurance contribution: say $3.00/hour
  • Retirement match, PTO, holiday pay: say $1.50/hour

Tally the burden:

Component Amount/hr
Base wage $25.00
FICA (7.65%) $1.91
FUTA/SUTA (~3%) $0.75
Workers' comp (18%) $4.50
Health insurance $3.00
Retirement/PTO/holiday $1.50
Burdened cost $36.66

That's a burden factor of about 1.47 — for every $1.00 of wage, you spend $1.47 to have that person on the roof. A shop with no benefits and a lower comp rate might land at 1.25. A shop with rich benefits in a high-comp state can exceed 1.55. Calculate yours from your actual numbers and rebuild it whenever your comp rate or benefits change.

Now factor in productive vs. paid hours. You pay for 2,080 hours a year, but nobody installs for all of them. Subtract holidays, PTO, training, drive time between jobs, rain days, and the inevitable shop time. If a crew member is actually productive 1,700 hours out of 2,080 paid, your effective burdened cost per productive hour is higher still — roughly $36.66 × (2,080 / 1,700) = about $44.85 per productive hour. That is the number you bid against. Pricing off the $25 base wage instead of $44.85 is how a "profitable" company bleeds out.

Two refinements separate good costing from great. First, don't blend wildly different wage classes into one rate. A green laborer at $18 and a lead foreman at $32 carry different burdened rates, and a job staffed mostly with the foreman costs more per hour than the same job run by laborers. If your crews are mixed, build a blended rate from the actual crew composition you'll staff that job with, not a company-wide average. Second, recompute the productive-hour ratio honestly. Roofers love to assume crews are productive 90% of paid time. In reality, drive time between jobs, material staging, weather holds, equipment problems, and end-of-day cleanup routinely push real install productivity well below that. If you don't know your ratio, pull a few completed jobs, compare the hours your crew clocked against the hours they were actually installing, and you'll usually find the gap is bigger than you guessed — which means your true cost per productive hour is higher than the example above.

Markup vs. margin: the math error that quietly kills roofers

Now that costs are sorted, you have to add a number to cover overhead and profit. Here's where arithmetic ends careers. Markup and margin are not the same thing, and confusing them means undercharging on every job.

  • Markup is the percentage you add to your cost.
  • Margin is the percentage of the selling price that is gross profit.

If your job costs (COGS) are $10,000 and you add a 30% markup, you sell at $13,000. But your gross margin isn't 30% — it's $3,000 / $13,000 = 23%. A 30% markup produces a 23% margin. They are different numbers, and the gap widens as the percentage climbs.

The conversion you must memorize:

Margin = Markup / (1 + Markup)

Markup = Margin / (1 - Margin)

So if you want a 40% gross margin, you don't add 40%. You add Markup = 0.40 / (1 - 0.40) = 0.667, a 66.7% markup. Adding only 40% markup gets you a 28.6% margin, nearly 12 points short of your target.

Markup you add Margin you actually get
20% 16.7%
30% 23.1%
40% 28.6%
50% 33.3%
67% 40.0%
100% 50.0%

The number of roofers who "add 30%" believing they're keeping a 30% margin — then can't figure out why a 30%-margin business is supposedly losing money — is staggering. They're keeping 23%, and if overhead is 25% of revenue, they're underwater on every single job. Decide in margin terms, then convert to the markup you key into your estimate.

Calculating your overhead recovery rate

Gross margin has to cover overhead before a dollar of profit appears. To price intelligently, you need to know what percentage of revenue your overhead consumes — your overhead rate.

The simplest method, good enough for most roofing companies:

Overhead rate = Total annual overhead / Total annual revenue

If you ran $2,000,000 in revenue last year and your total overhead (all the lines from the overhead section) was $360,000, your overhead rate is 18%. That means 18 cents of every revenue dollar is spoken for by overhead before profit. So your gross margin has to clear 18% just to break even, and clear 18% + your target net profit to actually make money.

Want a 10% net profit on top of 18% overhead? You need a 28% gross margin at minimum, which (from the table above) requires roughly a 39% markup on cost. If you've been adding 20%, you can now see exactly why the year ended thin.

A more precise method allocates overhead per productive labor hour:

Overhead per labor hour = Total annual overhead / Total annual productive field hours

If your overhead is $360,000 and your crews log 24,000 productive field hours a year, that's $15 of overhead per field hour. Add that to your burdened labor rate when you build a bid, and overhead recovery is baked into every estimated hour rather than bolted on as a percentage at the end. Labor-hour allocation is more accurate for labor-intensive work like roofing, because it ties overhead recovery to the thing that actually drives your capacity: crew hours.

Use whichever method you'll actually maintain. The revenue-percentage method is easier; the labor-hour method is more accurate for a labor-heavy trade. Both beat guessing.

A full worked job: from cost to defensible price

Let's price a real-feeling residential reroof end to end so the whole structure connects.

Job: 28-square architectural shingle tear-off and replace, walkable pitch, one layer to remove, minor decking replacement expected.

Step 1 — Materials (COGS):

Item Cost
Shingles (28 sq + 10% waste) $3,400
Underlayment, ice-and-water, starter, ridge $850
Flashing, boots, sealant, fasteners $420
Ventilation $260
Decking allowance (4 sheets) $220
Delivery + tax $390
Materials subtotal $5,540

Step 2 — Labor (COGS, burdened). Estimate 90 productive crew-hours. At the burdened, productivity-adjusted rate of $44.85/hr:

90 × $44.85 = $4,037

Step 3 — Other direct costs (COGS):

Item Cost
Dumpster + dump fees $475
Permit $185
Crew truck fuel $90
Warranty reserve (1% of expected price) $185
Other direct subtotal $935

Total COGS = $5,540 + $4,037 + $935 = $10,512.

Step 4 — Add overhead + profit. Target: 18% overhead recovery + 12% net profit = 30% net of revenue must remain after COGS, so we need a 30% gross margin... plus we still owe net profit. Let's be precise: we want COGS to be 100% − (overhead 18% + profit 12%) = 70% of the selling price. So:

Selling price = COGS / 0.70 = $10,512 / 0.70 = $15,017.

That price recovers all direct cost, contributes 18% (about $2,703) toward overhead, and leaves 12% (about $1,802) as net profit — if your overhead rate estimate holds and the job runs to plan.

Step 5 — Sanity-check against reality. Is $15,017 winnable in your market for 28 squares? If competitors are at $13,500, you have three honest choices: accept a thinner margin with eyes open, find real cost to remove (better material pricing, tighter labor), or walk. What you must not do is "win" at $13,000 while believing you made 30% — because at $13,000 your gross margin is $2,488, or about 19%, which barely covers overhead and leaves roughly nothing. That's the trap. The breakdown is what lets you see it before you sign, not after.

The mistakes that quietly wreck roofing margins

In order of how much money they cost, here's what pros get wrong.

1. Unburdened labor. Bidding off the base wage. The single most expensive error in the trade. Fix the burden factor first.

2. Markup/margin confusion. Adding a markup percentage and believing it's the margin. Costs a double-digit chunk of margin on every job.

3. No overhead recovery in the bid. Adding profit but forgetting overhead has to come out of gross margin first. "I made 15% profit" with 18% overhead is a 3% loss.

4. Misfiling the truck. Loading the whole truck payment onto one job, or never recovering vehicle cost at all. Keep fixed vehicle cost in overhead, recover it through the overhead rate.

5. No warranty reserve. Callbacks land in next month's books and get blamed on the wrong job. Reserve a percentage on every job from day one.

6. Owner labor not costed. The working owner who pays himself "whatever's left" has no idea if the pricing works, because his own labor is invisible. Cost it at market, split it by role.

7. Blending COGS and overhead in one account. If your chart of accounts dumps materials, rent, and the office salary into one "expenses" pile, you can never compute gross margin. Restructure the chart of accounts so COGS lines sit above the gross-profit line and overhead sits below it.

8. Costing only the won jobs. If you don't capture actual cost on completed jobs and compare to the estimate, you never learn whether your assumptions were right. Run a job-cost variance on every job over a threshold.

9. Treating every job's margin target as identical. A simple walkable tear-off and a two-story steep cut-up with a chimney cricket do not carry the same risk. Risk-adjust your margin: harder, higher-callback work earns a fatter target, not the same flat 30%.

10. Ignoring rework and crew downtime in productivity. Bidding 2,080 hours of output from 2,080 paid hours. Use real productive-hour ratios or your burdened rate is understated.

A job-costing workflow you can run every week

Knowing the theory is useless without a rhythm. Here's a practical loop.

  1. Fix your burdened labor rate. Calculate it once from your declarations page and payroll. Recompute on any comp-rate or benefits change. Store it where estimators see it.
  2. Compute your overhead rate annually. Total overhead / revenue (or / field hours). Re-run quarterly if you're growing fast, because overhead percentage falls as revenue rises if you hold fixed costs flat — that's operating leverage, and it should lower your required markup over time.
  3. Restructure the chart of accounts so COGS sits above the gross-profit line and overhead below it. Make sure your bookkeeping reflects the splits in this breakdown: labor burden in COGS, truck payments in overhead, and so on.
  4. Estimate every job in margin terms, convert to markup, build the price. Never quote off raw wage or raw material cost.
  5. Capture actuals on every completed job — real materials, real hours, real callbacks.
  6. Run an estimate-vs-actual variance on each job over a dollar threshold. Where did hours blow out? Did decking exceed the allowance? Feed the lesson back into step 4.
  7. Review gross margin by job type monthly. Tear-offs vs. overlays, steep vs. walkable, retail vs. storm. You'll find some "good" work is quietly unprofitable and some "small" work is your best margin.
  8. Track callback rate by crew and by job type and let it set your warranty reserve and your risk-adjusted margin.

Where knowing which roofs are due changes the costing math

Everything above is about costing the job once you have it. But the most expensive line in most roofing companies isn't on the job-cost sheet at all — it's the cost of acquiring the customer, and it lives in overhead as marketing and sales spend. Lower that cost, and you can hit your margin target at a more competitive price, because less overhead has to be recovered per job.

That's the connection between targeting and costing that most owners miss. If your sales team knocks 100 doors to land one reroof, your true cost per acquired job is enormous, and it all sits in overhead dragging your required markup up. If you can spend that same effort on doors far more likely to need a roof, your acquisition cost per job drops, your overhead rate improves, and you win profitable bids you'd otherwise lose on price.

This is where roof-age and storm-exposure data earns its place in the costing conversation. RoofPredict estimates a roof-age range per address from aerial imagery and models storm physics per individual roof, then ranks the addresses on a contractor's own list or route so crews work the roofs that are aging out and the roofs a storm most likely wore down — instead of working a list at random. It's not a lead-buying service and it doesn't hand you a signed contract; it enriches your own CRM or mailing list with roof-age and storm signals so your canvassing, mailers, and door time land where the work actually is.

The honest limits matter, and they tie straight back to costing discipline. The roof age is a range, not a build date — useful for prioritizing who's likely due, not for promising a specific roof is 19 years old. The storm model gives you odds, not proof that a given roof took damage; the actual condition is established by your inspection and documentation on the roof, the same way it always has been. What the data does is raise the hit rate of your outreach, which lowers acquisition cost, which lowers the overhead you have to bake into every bid. That's a margin lever sitting upstream of the estimate, and it's invisible if you only ever look at job-level COGS.

It also pairs with the warranty-reserve discipline from earlier: when you understand which of your installed roofs are aging into the callback-risk window, you can plan that reserve and your service-revisit schedule instead of being surprised by it.

Storm, insurance-restoration work, and keeping your costing (and your conduct) clean

A large share of roofing revenue runs through insurance-restoration work after a hail or wind event, and the costing rules don't change — but the documentation discipline becomes both a margin tool and a compliance line you cannot cross.

On the costing side, storm work has cost structure retail work doesn't: travel and per-diem labor, supplement labor to document additional damage, and often a longer cycle time that ties up working capital. Burden those costs into the job like any other. Storm jobs also carry a higher callback risk if crews are working fast across many roofs, so the warranty reserve matters more, not less.

On the conduct side, here's the bright line every roofing company has to respect. A roofer may climb the roof, inspect it, photograph and document the damage thoroughly, and prepare an accurate, Xactimate-aligned estimate to repair the work they will perform. A roofer may state plain facts about their own scope to the carrier. That's documentation and estimating — your trade.

A roofer may not, for a fee, negotiate or "handle" the homeowner's claim, interpret what the policy covers, promise a specific approval or payout amount, promise the deductible will be waived or absorbed, advertise a "free roof," or represent the homeowner against their insurer. That last set is unlicensed public adjusting in most states, and it's a fast way to lose your license and your business. The deductible point deserves emphasis because it shows up constantly: the deductible is the homeowner's legal obligation, and offering to make it disappear is insurance fraud in many jurisdictions, not a sales tactic.

The clean workflow that keeps you safe and still wins the work: document the damage thoroughly, write an accurate repair estimate, and hand it to the homeowner. The homeowner files the claim. The insurer decides coverage. You did your trade — inspection, documentation, estimating — and you stayed on the right side of the line. Build a do-not-say list and train your sales team on it: no "we'll get your claim approved," no "we'll waive your deductible," no "free roof," no "we'll handle the insurance company." Teach them to say instead: "We'll document the damage in detail and write you an accurate estimate; you file the claim and your insurer makes the coverage decision."

From a costing standpoint, this discipline pays twice: thorough documentation reduces disputes that eat your margin in rework and delay, and a clean Xactimate-aligned estimate protects the price you costed so carefully from being eroded later.

Building the chart of accounts that makes all of this automatic

If your books don't separate COGS from overhead structurally, every monthly review is archaeology. Set the chart of accounts up so the split is automatic. A roofing-appropriate structure:

Income

  • Residential reroof revenue
  • Commercial/low-slope revenue
  • Repair/service revenue
  • Insurance-restoration revenue

Cost of Goods Sold (everything above the gross-profit line)

  • Materials
  • Direct labor — wages
  • Direct labor — burden (taxes, comp, benefits)
  • Subcontractors
  • Equipment rental and dump fees
  • Permits and job fees
  • Crew vehicle fuel
  • Warranty/callback reserve
  • Sales commissions (if you elected to treat commission as COGS)

= Gross Profit (the line that tells you if your jobs make money)

Overhead / Operating Expense (below the gross-profit line)

  • Facilities (rent, utilities, office insurance)
  • Admin and non-production payroll (including owner management pay)
  • Vehicle fixed costs (payments, fleet insurance, registration)
  • Business insurance (GL base, E&O, umbrella)
  • Sales and marketing
  • Software and technology
  • Professional fees (accounting, legal)
  • Bank/merchant fees, interest, bad debt

= Net Operating Profit (what you actually keep)

With the chart structured this way, your gross margin and overhead rate fall out of the P&L automatically every month — no spreadsheet gymnastics. Set it once and every future decision gets easier.

A pricing-confidence checklist before you sign any bid

Run this list before the proposal goes out:

  • Labor is burdened (taxes + comp + benefits), not raw wage
  • Labor hours use productive hours, not paid hours
  • Materials include waste factor, freight, and tax
  • Dumpster, permit, fuel, and warranty reserve are all in COGS
  • The price was set in margin terms, then converted to markup
  • Gross margin clears overhead rate plus target net profit
  • Margin is risk-adjusted for steepness, height, cut-up, and callback history
  • The number is sanity-checked against what's winnable in the market
  • Subcontractors used are verified insured (or their payroll lands on your comp audit)
  • If insurance-restoration: documentation and estimate only — no claim handling, no deductible promises, no "free roof"

The bottom line

The split between cost of goods sold and overhead isn't bookkeeping pedantry — it's the foundation that every profitable price stands on. COGS is what a specific job costs you; overhead is what the business costs you to exist. Burden your labor, file the truck payment in overhead and the fuel in COGS, reserve for callbacks, recover overhead before you count profit, and price in margin terms rather than markup. Do those six things and you'll stop confusing "busy" with "profitable."

The roofers who scale aren't the ones who knock the most doors or buy the most leads. They're the ones who know, to the dollar, what each job costs and what it has to sell for — and who spend their acquisition budget on the roofs most likely to be due, so less overhead has to be recovered on every bid. Get the breakdown right first. Then go win the work you can prove you'll profit on.

FAQ

Is labor cost of goods sold or overhead for a roofing company?

The wages of crew members physically producing a roof are cost of goods sold (COGS) — no job, no wage. That includes the foreman on the roof and the laborers doing tear-off. The full burdened cost (employer payroll taxes, workers' comp, and benefits) travels with those wages and is also COGS. By contrast, the salaries of office staff, estimators, and management are overhead because they're paid whether or not a crew is working.

Is the company truck a job cost or overhead?

Split it. The fixed cost of owning the truck — the loan or lease payment, fleet insurance, and registration — is overhead, because you owe it whether the truck moves or sits in the yard. The variable cost of using it on a specific job, mainly the fuel burned driving to and working that job, is COGS. The common mistake is loading the entire truck payment onto one job, which wildly overstates that job's cost.

What is a typical labor burden rate for roofing?

Roofing labor burden commonly runs a factor of roughly 1.25 to 1.55 on top of base wage, meaning every $1.00 of wage costs $1.25 to $1.55 to put on a roof. Workers' compensation is the biggest swing because roofing carries some of the highest comp rates of any trade. The only reliable number is your own: build it from your workers' comp declarations page, payroll taxes, and the benefits you actually offer, and rebuild it whenever your comp rate changes.

What's the difference between markup and margin in roofing?

Markup is the percentage you add to your cost; margin is the percentage of the selling price that is gross profit. They are not the same number. A 30% markup produces only a 23% margin, and a 50% markup produces a 33% margin. To hit a target margin, use Markup = Margin / (1 − Margin): a 40% margin requires a 67% markup, not 40%. Confusing the two means undercharging on every job.

How do I calculate my roofing overhead rate?

The simplest method is total annual overhead divided by total annual revenue. If overhead was $360,000 on $2,000,000 in revenue, your overhead rate is 18%, meaning 18 cents of every revenue dollar is spoken for before profit. A more accurate method for a labor-heavy trade is overhead divided by total productive field hours, which gives you an overhead dollar amount to add per estimated labor hour.

Should sales commissions go in COGS or overhead?

Either approach is defensible, but you must pick one and apply it consistently. Treating commission as COGS is cleaner for understanding true job-level profit, because commission is only paid when a job sells, so it behaves like a direct job cost. Treating it as overhead is simpler for the books but makes your job-level gross margin look better than it really is. The danger is inconsistency, which makes margins un-comparable month to month.

Why should I book a warranty reserve as a job cost?

Because a percentage of your jobs will generate callbacks — leaks, blown ridge cap, nail pops — and fixing them costs labor and materials. If you don't reserve for it, that cost lands in a future month and gets blamed on a different job, distorting both jobs' margins. Booking a small reserve (commonly 0.5% to 2% of revenue, set from your own callback history) as a COGS line matches the cost of honoring your workmanship to the jobs that created the risk.

How does targeting which roofs are due affect my margins?

Customer acquisition cost lives in overhead as marketing and sales spend, and it's often a roofing company's largest hidden cost. If you canvass random doors to land one job, that cost is enormous and drags up the markup you must add to every bid. Spending the same effort on roofs more likely to be due — based on roof-age range and storm-exposure data — raises your outreach hit rate, lowers acquisition cost per job, and reduces the overhead you have to recover, letting you stay competitive on price while holding your margin.

Can a roofer handle the homeowner's insurance claim to win storm work?

No. A roofer may inspect, photograph, and document damage and write an accurate repair estimate for their own scope, and state facts about that scope to the carrier. A roofer may not, for a fee, negotiate or handle the claim, interpret policy coverage, promise an approval or payout, promise to waive the deductible, advertise a free roof, or represent the homeowner against the insurer — that is unlicensed public adjusting in most states. The safe workflow: you document and estimate, the homeowner files, and the insurer decides coverage.

How should I structure my chart of accounts for accurate roofing margins?

Put every job-specific cost (materials, burdened direct labor, subs, dump fees, permits, crew fuel, warranty reserve) in cost-of-goods-sold accounts that sit above the gross-profit line. Put every business-running cost (rent, admin and management payroll, truck payments, base insurance, marketing, software, professional fees) in overhead accounts below the gross-profit line. Structured this way, your gross margin and overhead rate fall out of the monthly P&L automatically instead of requiring a separate spreadsheet.

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. National Roofing Contractors Association (NRCA)nrca.net
  2. IRS Publication 334, Tax Guide for Small Business (Cost of Goods Sold)irs.gov
  3. IRS Topic No. 751, Social Security and Medicare Withholding Ratesirs.gov
  4. IRS Federal Unemployment Tax (FUTA)irs.gov
  5. U.S. Bureau of Labor Statistics, Employer Costs for Employee Compensationbls.gov
  6. OSHA Fall Protection in Constructionosha.gov
  7. U.S. Small Business Administration, Calculate Your Startup and Operating Costssba.gov
  8. Insurance Institute for Business & Home Safety (IBHS), Roofing Researchibhs.org
  9. NOAA National Weather Service, Storm Prediction Centerspc.noaa.gov
  10. National Association of Insurance Commissioners, Public Adjustersnaic.org
  11. Federal Trade Commission, Advertising and Marketing Basicsftc.gov
  12. International Code Council, International Residential Code (Roof Provisions)iccsafe.org
  13. U.S. Census Bureau, Construction Spendingcensus.gov
  14. RoofPredictroofpredict.com

Related Articles