Know your numbers: the KPIs that actually run a roofing business
Most roofers fly blind on the metrics that decide whether the company makes money. The handful of KPIs that diagnose a roofing business (gross margin by job type, net profit, revenue per crew, material-vs-labor split, estimating accuracy, close rate, overhead, marketing %) with directional 2026 ranges and what to do when each is off.
RDNE Stock project · PexelsPlenty of busy roofing companies aren’t profitable, and plenty of owners don’t find out until the accountant tells them at year-end. In roofing that gap is worse than in most trades: material prices move under you; a storm doubles your volume for a quarter and then it’s dead; and a single underbid steep-and-cut-up re-roof can eat the profit from three clean jobs. Revenue is a vanity number. The handful of KPIs below are the ones that tell you whether the business is healthy and where the money is leaking. You don’t need a finance degree. You need to know these numbers, roughly where they should sit, and what to do when one is off. This is the dashboard. (It ties together the specific playbooks: pricing a replacement, estimating software, running crews, lead generation, and storm & insurance work.)
The numbers, with directional 2026 ranges
| KPI | What it is | Directional target | Red flag |
|---|---|---|---|
| Gross margin | Revenue − direct job cost (labor + materials + disposal), ÷ revenue | Blended ~30-45% on a healthy residential book | Under ~30% blended |
| - repair | Highest, often 50%+ | Pricing repairs like re-roofs | |
| - re-roof (residential) | Mid, commonly ~30-40% | Under ~30% | |
| - commercial (flat/TPO/EPDM) | Lowest: thinner points, higher volume | Bid without a separate cost model | |
| Net profit | What’s left after all costs | ~8-12% healthy; thinner is common | Under ~5% |
| Revenue per crew | Annual revenue ÷ production crew | Track squares/day and $/day per crew | Idle days, half-day starts |
| Material vs labor split | Direct cost broken into the two buckets | Know it per job type; asphalt re-roof is material-heavy | You can’t state it |
| Estimating accuracy | Bid cost vs actual cost, per job | Actual within a few % of bid | Frequent overruns you can’t explain |
| Close rate | Signed ÷ qualified estimates | Retail and insurance run differently; track separately | Chasing every lead, closing few |
| Overhead | Non-job operating cost ÷ revenue | Under ~20% | Creeping past ~25% |
| Marketing spend | Marketing ÷ revenue, tracked to booked jobs | ~5-10%, higher if storm-driven | Spending untracked |
These are directional ranges, not gospel. Roofing varies enormously by region, roof type, retail-vs-insurance mix, and whether you self-perform or sub the labor. Treat them as sanity checks, and remember: your trend matters more than the absolute number. Track them monthly during season and review the full board quarterly. A few definitional notes up front: “gross margin” here includes tear-off disposal and dump fees in direct cost (roofers forget these constantly). “Per crew” means a production crew that touches revenue jobs (not your estimator or office staff) and commercial work legitimately runs at lower margins than residential, so never blend them into one number.
The formulas (so you can actually calculate these)
- Gross margin = (Revenue − direct job costs [labor + materials + disposal]) ÷ Revenue
- Fully-loaded crew cost = wages/sub cost + payroll taxes + comp/GL insurance + truck/trailer + equipment + fuel
- Break-even revenue = (fixed overhead + fixed labor) ÷ gross-margin %
- Estimating accuracy = actual job cost ÷ estimated job cost (aim for ~1.0)
- Close rate = signed contracts ÷ qualified estimates given (track retail and insurance separately)
- Material burn % = material cost ÷ total direct cost, per job type
- CAC (per channel) = channel marketing spend ÷ new customers won from it
Gross margin: are the jobs themselves profitable?
Gross margin is the first gate. If the work isn’t profitable before overhead, nothing downstream can save you. In roofing you have to split it by job type, because they behave nothing alike. Repairs should be your richest margin: they’re small, they’re urgent, and a customer with a leak isn’t collecting three bids. Price them for the value and the mobilization, not per square. Residential re-roofs are the bread and butter and typically land in the middle. This is where a mispriced steep, high, or cut-up roof quietly bleeds you. Commercial flat work (TPO, EPDM, modified bitumen) runs on thinner points and higher volume, and needs its own cost model. Never bid it off your shingle math.
If your blended margin is soft, the usual culprit is pricing that hasn’t kept up with material and labor cost, plus forgotten costs: disposal, permits, steep/height charges, and callbacks. Fix margin at the job level first; it’s the highest-leverage number on the page. See pricing a roof replacement for building a price that holds up when the customer starts comparing bids.
Material vs labor split: the roofing-specific leak
This is the number roofing has that most trades don’t obsess over, and it’s where roofers get burned. An asphalt re-roof is material-heavy; a steep, complex, or multi-layer tear-off shifts cost toward labor. You don’t need a perfect ratio. You need to know yours by job type and watch it. Two things move it against you:
- Material waste and price drift. Ordering by gut instead of off a measured takeoff means overage on every job. And if your price book still reflects last year’s bundle cost, your margin is eroding silently every time material moves up. Price off a real takeoff, your estimating software should generate one from measurements.
- Labor overruns on hard roughs. Steep, high, cut-up, or multi-layer jobs take longer than a walkable ranch, and if you bid them at the same labor rate you lose the difference. Carry steep/height/complexity multipliers in your price book.
Net profit: the number that’s actually yours
Net is what survives after overhead, and here’s the trap: you can run a healthy 40% gross margin and still net almost nothing if overhead is bloated. Trucks, a sales team on commission, an office manager, software, and a yard lease can eat a great gross margin alive. If gross margin is fine but net is thin, your problem is overhead, not pricing. Audit it line by line. Healthy net for a well-run roofer is roughly 8-12%; thinner is common, especially for outfits leaning hard on insurance work with high supplement churn.
The owner-comp trap: pay yourself a market-rate salary and pull it out as an expense before you calculate net. If you’re the best salesman and a working foreman but your own labor is “free,” your net profit is a fiction. You’re hiding a real cost and can’t tell whether the business is profitable independent of you. This is the single most common way owner-run roofing companies fool themselves, and it’s brutal the day you try to hire someone to replace yourself.
Revenue per crew: the production diagnostic
If HVAC lives and dies by revenue per tech, roofing lives by revenue per crew, and its two building blocks, squares per day and revenue per production day. A crew that starts at 7 and lays 30 squares is a different business than one that rolls up at 9:30 and does 18. When revenue per crew is low, the cause is almost always one of two things, and the fix differs:
- Utilization: idle days, weather gaps you didn’t backfill, half-day starts, and crews waiting on material that should’ve been staged the night before. This is a scheduling and logistics problem: stage materials ahead, batch jobs by geography, and don’t let a rain day become a lost week. See hiring and running crews.
- Job value: low average contract because you’re not attaching the upgrades (better shingle line, ridge vent, ice-and-water, gutters) or you’re bidding thin to win. This is a sales and pricing problem, not a speed problem.
The front-of-funnel numbers feed everything
Two upstream KPIs quietly determine the rest:
- Close rate (signed ÷ qualified estimates). Track retail and insurance separately, because they behave completely differently. A low retail close rate usually means you’re bidding against price-shoppers without differentiating, or your follow-up dies after the first visit; your CRM should make same-day bids and disciplined follow-up automatic. On insurance work the “close” hinges on how cleanly you document and work the claim, see storm damage and insurance claims.
- Marketing spend: keep it in the neighborhood of 5-10% of revenue (storm-chasing spikes it), and track it to booked jobs so you know your cost per acquired customer by channel, not just what you spent. Door-knocking, Google Business Profile, and referrals all cost something even when the “spend” is your time. See lead generation for roofers. Untracked marketing spend is the easiest money in roofing to waste.
Estimating accuracy: close the loop
Here’s the discipline almost nobody runs: after a job closes out, compare what it actually cost to what you bid. If actuals routinely blow past the estimate, your price book is wrong, your takeoffs are sloppy, or your crews are slower than you’re bidding, and until you close that loop, you’ll keep making the same mistake on the next bid. Aim for actual cost landing within a few percent of the estimate. A job-costing habit is what separates roofers who think they’re profitable from ones who know.
Build the habit
- One dashboard, reviewed on a schedule. Pull these into a single sheet (or your roofing software’s reporting) and look at them monthly during season, the full board quarterly.
- Know your break-even. How much revenue must the company do each month to cover fixed overhead + fixed labor? If you don’t know this number cold, you’re guessing, and in roofing the seasonal swing makes guessing expensive.
- Trend, don’t obsess over one reading. A single storm quarter is noise; the direction over three or four is the signal.
- Act on the diagnosis, in order. Each red flag points to a specific playbook: margin → pricing, net → overhead, revenue/crew → utilization then job value, close rate → sales process (retail) or claim handling (insurance). Sequence it: if blended gross margin is under ~30%, fix pricing before anything else; if gross is fine but net is thin, cut overhead line-by-line before touching price.
Checklist
- Calculate gross margin overall and by job type (repair vs re-roof vs commercial); include disposal in direct cost.
- Know your material-vs-labor split per job type and watch it against waste and price drift.
- Track net profit; if gross is fine but net is thin, audit overhead (target under ~20%), and pay yourself a real salary first.
- Track revenue per crew (and squares/day); diagnose low readings via utilization then job value.
- Track close rate (retail and insurance separately) and marketing spend (~5-10%, tracked to booked jobs + CAC by channel).
- Job-cost every closeout: compare actual vs bid to fix your price book.
- Know your monthly break-even cold, and put it all on one dashboard reviewed on a schedule.
The bottom line
Busy isn’t the same as profitable, and in roofing (with its material swings, storm spikes, and easy-to-underbid roughs) revenue tells you almost nothing on its own. The companies that make money know a small set of numbers: margin by job type, the material-labor split, net, revenue per crew, close rate, overhead, and marketing. They job-cost their jobs and review the board on a schedule instead of hoping at year-end. Each one, when it’s off, points straight at the lever to pull. Learn these, watch the trend, and you stop running the business by feel and start running it by the numbers.
General information for roofing business owners, not financial advice. The ranges here are directional 2026 rules of thumb that vary widely by region, roof type, and retail-vs-insurance mix. Track your own numbers and trends, and work with an accountant on the financials.
This guide is general information for independent roofing contractors, not legal or financial advice. Some outbound links may be affiliate or sponsored links, which are disclosed and never affect our recommendations.
Related guides
Get guides like this weekly
Join The Roofing Bench Weekly. One useful email a week, free.
Subscribe free