Skip to main content

Why Is My Roofing Company Not Profitable Despite Strong Revenue?

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

You closed the best year your company has ever had. Revenue is up. The phone rings. Crews are stacked out three weeks deep. And somehow the operating account is tighter than it was when you were half the size, payroll feels like a knife fight every other Friday, and you cannot answer a simple question without your stomach dropping: where did the money go?

This is one of the most common and most painful patterns in the trade. A roofing company can grow revenue for years while quietly losing the thing revenue is supposed to produce. Cash. The reason almost never shows up in the place owners look first. It is not that the phone stopped ringing or that customers stopped paying. It is that the gap between what a job brings in and what it actually costs to deliver got too thin, too inconsistent, or invisible — and then you multiplied that thin gap across more and bigger jobs. Scaling a broken margin does not fix it. It makes the hole deeper, faster.

What follows is the diagnostic a sharp operator runs when the top line looks great and the bottom line does not. We will pull apart the difference between revenue, gross profit, and net profit; find the most common places the money leaks; show you how to read your own numbers even if your books are a mess; and give you the operational fixes that move the needle. This is written for the owner who is doing $1M to $15M and feels like the business is running them instead of the other way around. No theory you cannot use by Monday.

Revenue Is Vanity. Margin Is Sanity. Cash Is Reality.

The single most expensive misunderstanding in contracting is treating revenue as a measure of health. Revenue is a measure of activity. A company can have enormous activity and negative health at the same time, and roofing is structurally prone to exactly that because the cost of goods is high, labor is volatile, and the sales cycle hides true cost until the job is done.

Three numbers matter, and they are not the same number:

  • Revenue — the total dollars you billed. This tells you how much work you sold. It tells you nothing about whether you made money.
  • Gross profit — revenue minus the direct cost of producing the work: materials, labor on the roof, subcontractors, equipment rental, dump fees, permits, the credit card fee on the material order. What is left after the job pays for itself.
  • Net profit — gross profit minus overhead: your office, your trucks, your software, your sales commissions, your owner's salary, insurance, advertising, the bookkeeper. What is actually yours to keep or reinvest.

Here is the trap. You can grow revenue 40% in a year, and if your gross margin slips from 38% to 30% while your overhead grows to staff the larger operation, your net profit in real dollars can be lower than the year before — on nearly twice the work and twice the stress. Owners feel this as "we are busier than ever and I am more broke than ever," and they are usually right.

A worked example: the same company, two years

Year 1 Year 2
Revenue $3,000,000 $5,200,000
Gross margin % 38% 29%
Gross profit $1,140,000 $1,508,000
Overhead $720,000 $1,310,000
Net profit $420,000 $198,000
Net margin % 14.0% 3.8%

Year 2 sold 73% more work, generated 32% more gross profit, and kept less than half the net profit. The owner worked twice as hard, carried twice the risk, financed twice the receivables, and took home less. Nothing about Year 2 "feels" like a worse year until February when the bank account says otherwise. This is the entire problem in one table: margin compression plus overhead growth eats every dollar of revenue growth and then some.

If you remember nothing else, remember this — you do not have a revenue problem, you have a margin-and-overhead problem, and revenue is hiding it.

The First Move: Find Your Real Break-Even

Before you can fix profit you have to know the number that separates losing money from making it. Your break-even is the revenue at which gross profit exactly covers overhead — every dollar below it is a loss, every dollar above it is profit. Most owners have never calculated it, which means they have no idea whether a slow month is survivable or fatal.

The formula is simple:

Break-even revenue = Annual overhead ÷ Gross margin %

If your overhead is $1,200,000 a year and your true gross margin is 30%, your break-even is $1,200,000 ÷ 0.30 = $4,000,000. You have to produce four million dollars of installed work just to get to zero. Sell $3.8M and you lost money no matter how busy you felt. Sell $4.4M and only the last $400K produced any actual profit, and only at your 30% margin — $120K.

Now watch what margin does to that same company. Hold overhead flat at $1.2M and lift gross margin to 38%:

Break-even = $1,200,000 ÷ 0.38 = $3,157,000.

The same overhead, the same trucks and office and staff, but eight points of margin dropped your break-even by $843,000. You start banking profit nearly a million dollars of revenue sooner. That is the leverage in margin, and it is why chasing more revenue at a thin margin is the slowest, most dangerous way to fix a profit problem. Chasing margin is faster and safer.

Run your own numbers (15-minute version)

  1. Pull last 12 months of revenue from your P&L. Call it R.
  2. Pull total direct job costs — materials, field labor, subs, equipment, dump, permits. Call it COGS.
  3. Gross profit = R − COGS. Gross margin % = (R − COGS) ÷ R.
  4. Pull everything that is not a job cost — office, admin, owner pay, vehicles not assigned to a job, advertising, software, insurance, interest. That is overhead.
  5. Break-even = overhead ÷ gross margin %.

If step 2 makes you uncomfortable because you genuinely cannot separate job costs from overhead in your books, you have just found your first leak — and it is the most important one.

Leak #1: You Are Not Job Costing (So You Are Flying Blind)

The number one reason a high-revenue roofing company is unprofitable is that the owner does not know which jobs make money and which jobs lose money. They know the company is tight. They do not know that the 22-square architectural tear-off they ran last Tuesday lost $1,400, because the labor went 40% over, a material reorder ate the margin, and the salesperson had priced it off an old cost sheet.

Job costing means tracking, per job, every dollar of direct cost against the contract price, and comparing the result to what you estimated. Without it you are averaging. And averages lie, because in roofing the spread between your best and worst jobs is enormous. Your company-wide 30% gross margin might be a blend of jobs running at 45% and jobs running at 8%, and you cannot fix what you cannot see. When you finally cost every job, the pattern almost always emerges: a specific crew, a specific salesperson, a specific job type, or a specific lead source is dragging the whole company down.

What to capture on every single job

Cost bucket What goes in it Where it leaks
Materials Shingles, underlayment, flashing, fasteners, vents, the reorder Waste, theft, reorders, freight, off-cuts, price changes
Field labor Crew hours, loaded with payroll tax + comp + benefits Slow crews, rework, travel, standby
Subcontractors Anything you 1099 to produce the job Scope gaps, change orders not captured
Equipment Rental, lift, dumpster, fuel, magnetic sweep Idle rental days, multiple drops
Job-specific other Permits, inspections, port-a-john, callbacks Callbacks billed to nobody

The most underrated line in that table is the loaded labor cost. If you pay a roofer $25/hr and book your labor at $25/hr, you are losing money on every hour worked, because that roofer actually costs you closer to $34–$38 once you add the employer share of payroll taxes (roughly 7.65% FICA per the IRS, plus federal and state unemployment), workers' compensation (a heavy line in roofing — one of the highest-rated classifications in most states), and any benefits or paid time. Roofing comp rates frequently run $15 to $40+ per $100 of payroll depending on the state and your experience modifier. Estimate with the wage and you have buried a 30–50% labor loss into every bid.

The callback line nobody tracks

Write this on the wall: a callback is a job cost on a job you already closed. When a crew goes back for a leak, a missed nail pop, or a punch item, that truck roll, those two labor hours, and that bundle of shingles come straight out of the profit on a job you already booked as a win. If you are not assigning callback costs back to the original job, your job-cost reports are flattering and your real margin is lower than your reports say. Track callbacks by crew and by salesperson and you will learn things about your operation that no P&L will ever tell you.

Leak #2: Your Estimates Are Wrong Before the Crew Shows Up

If job costing tells you the job lost money, estimating is usually where it was lost — before a single shingle was torn off. A roof can be installed flawlessly and still lose money if it was priced wrong. These are the estimating errors that quietly drain profitable-looking companies.

Pricing off stale cost data

Material prices move. Asphalt shingle pricing has been volatile for years, and a cost sheet built last spring can be 8–15% light by fall. If your salespeople bid from a laminated sheet in the truck or a spreadsheet nobody updated, you are systematically underpricing as costs rise. Rule: cost data gets re-verified against current supplier pricing at least quarterly, and immediately after any manufacturer price increase. Build the estimate from live numbers, not memory.

Underestimating waste factor

Measured squares are not ordered squares. A simple gable might run 10% waste; a cut-up hip-and-valley roof with multiple penetrations can run 15–20%. Salespeople who estimate material off the measured area without the right waste factor under-order, which forces a reorder mid-job — and reorders are pure margin poison: a second delivery fee, a second trip, a crew standing around, and sometimes a price bump. Standardize waste factors by roof complexity and bake them into the estimate template so it is not a judgment call on a tailgate.

Forgetting the small lines that add up

Permits, dumpsters, multiple dumpster pulls on a big tear-off, a boom truck for a steep or tall roof, magnetic nail sweep, port-a-john, the second mobilization when the deck is rotten and you have to come back — each of these is a few hundred dollars, and a few hundred dollars on a $9,000 job is real margin. Estimators chasing speed skip them. Put them on a mandatory checklist line in every estimate, defaulted to a value, so the estimator has to actively zero them out rather than passively forget them.

Decking and surprise scope

Rotten or non-compliant decking is the classic margin-killer because you cannot always see it from the ground or the satellite image. The International Residential Code requires roof decking and attachment that meets fastening and structural provisions (see the IRC roof-covering and sheathing sections), and a re-roof that exposes inadequate or rotted sheathing can force replacement you did not bid. The fix is contractual, not heroic: a clearly disclosed, signed unit price for decking replacement per sheet, agreed before the job starts, so that found conditions convert to documented change orders instead of swallowed costs. A roofer who eats every sheet of bad plywood to "keep the customer happy" is donating profit.

The margin-vs-markup math error

This one is so common it deserves its own callout because it silently underprices thousands of roofing jobs every day. Markup and margin are not the same thing, and confusing them costs you money on every bid.

If your direct cost on a job is $7,000 and you want a 35% margin, you do not multiply by 1.35. That gives you a 35% markup, which is only a 26% margin.

  • Markup: price = cost × (1 + markup%). $7,000 × 1.35 = $9,450. Margin on that = ($9,450 − $7,000) ÷ $9,450 = 26%.
  • Margin: price = cost ÷ (1 − margin%). $7,000 ÷ (1 − 0.35) = $7,000 ÷ 0.65 = $10,769. Margin = 35%.

That is an $1,319 difference on a single $7,000-cost job, in your favor, and an owner who marks up when they mean to margin loses it on every job all year. Here is the conversion table to tape to the wall:

Target gross margin Required markup multiplier
25% ÷ 0.75 (×1.333)
30% ÷ 0.70 (×1.429)
35% ÷ 0.65 (×1.538)
40% ÷ 0.60 (×1.667)
45% ÷ 0.55 (×1.818)
50% ÷ 0.50 (×2.000)

Price with division by (1 − margin), not multiplication by (1 + markup), and never let the two get confused on a quote.

Leak #3: Overhead Crept Up While You Were Not Looking

The second half of the profit equation is overhead, and overhead is sneaky because it grows in small, individually-defensible increments. A new estimator. A second office admin. A nicer truck. A bigger software stack. Three more subscriptions. A sales manager. None of these decisions felt wrong. Added together over two growth years they can double your overhead while you were focused on the field.

The number that matters is overhead as a percentage of revenue. Track it monthly. For many residential roofing companies, healthy overhead lands somewhere in the 20–30% of revenue range, varying with model (retail vs. storm/insurance, in-house crews vs. subs, owner involvement in sales). The exact target is less important than the trend: if overhead % is climbing quarter over quarter while gross margin is flat or falling, you are in the danger zone whether or not revenue is up.

The overhead audit

Once a year, line by line, put every overhead expense into one of three buckets:

  1. Drives revenue or protects the company — keep, and make sure you are getting the return (advertising that produces costed jobs, software that the team actually uses, insurance you legally and practically need).
  2. Necessary but bloated — keep the function, cut the cost (renegotiate, consolidate subscriptions, right-size the vehicle, shop your insurance).
  3. Neither — kill it. Every company carries dead subscriptions, a phone line nobody answers, a service they signed up for in a growth panic and never used.

The usual suspects in a bloated roofing overhead:

  • Software sprawl. A CRM, an estimating tool, a measurement tool, a project management tool, a phone system, a review tool, three of which overlap. Audit logins; if seats are unused, you are paying for nothing.
  • Underutilized vehicles. A truck that sits is a $700–$1,200/month liability in payment, insurance, and depreciation producing zero. Match fleet size to crew count, not to ambition.
  • Office labor that grew faster than systems. Hiring a human to do a job a process should do is the most expensive way to solve a workflow problem. Fix the process before you add the headcount.
  • Owner's pay treated as profit. If you are not paying yourself a market salary as a line in overhead, your "profit" is fake — it is just your unpaid wage. Pay yourself properly so the P&L tells the truth, then judge the business on what is left.

Leak #4: Labor Productivity and the Real Cost of a Slow Crew

Labor is the most variable cost in roofing and the one most owners underprice and under-manage. Two crews can install the same roof for wildly different costs, and if you pay by the hour, the slow crew's inefficiency lands directly on your margin.

The metric that exposes this is labor cost as a percentage of revenue, tracked per crew and per job. If your model targets, say, 25% of contract price for installed labor and a crew consistently comes in at 33%, that eight-point gap is profit you are handing away on every job that crew touches. Maybe they are slow. Maybe the foreman mismanages material staging and the crew waits. Maybe they are doing rework. Maybe the salesperson is selling complicated roofs at simple-roof prices and the crew eats the difference. Job costing per crew finds the answer; nothing else will.

Production pay aligns the incentive

Many of the most profitable installation operations pay field labor by the square (production pay) rather than by the hour, often with a quality holdback that is released after the roof passes inspection and survives a callback window. This flips the incentive: a fast, clean crew earns more per day and costs you a predictable labor percentage, while a slow crew no longer bleeds your margin by the hour. Production pay has to be implemented carefully and legally — you must still meet all applicable minimum-wage, overtime, and classification rules under the Fair Labor Standards Act, and misclassifying employees as independent contractors to dodge those obligations is a serious liability, not a savings. But aligning pay with output is one of the strongest margin levers in the trade.

Rework is a tax on everything

The Occupational Safety and Health Administration consistently ranks falls as the leading cause of death in construction, and roofing is among the most dangerous occupations tracked by the Bureau of Labor Statistics. That matters to your P&L beyond the human stakes: an injury spikes your workers' comp experience modifier, which raises your comp rate on every payroll dollar for years. A safe, well-trained, low-turnover crew is more than an ethics line — it is a margin line. Turnover means constant retraining, slower production, more rework, and a worse comp mod. The cheapest crew to run is the experienced crew you keep.

Leak #5: Cash Flow vs. Profit — You Can Be Profitable and Still Go Broke

A subtle but lethal version of this whole problem: the company is profitable on paper and still cannot make payroll, because profit and cash are not the same thing and the timing kills you. You buy materials and pay labor today; you collect from the customer (or, on insurance work, after the carrier's process and the homeowner's release of funds) weeks or months later. Grow fast and every new job front-loads cash out before cash comes in. Growth itself consumes cash. A profitable, fast-growing roofing company can run out of money — this is a real and common failure mode.

The cash levers that matter most

  • Deposits and draws. Collect a deposit at signing where your state and contract law allow, and structure progress draws so the customer's money funds the job rather than your line of credit. Never let your bank account be the construction loan.
  • Receivables discipline. Money sitting in accounts receivable is money you earned and have not been paid. Invoice the day the job is complete, not at the end of the month. Have a standard follow-up cadence at 15, 30, and 45 days. A roofing company with $400K in receivables and a tight checking account does not have a profit problem that week — it has a collections problem.
  • Supplier terms. Net-30 from your distributor is an interest-free loan that funds your materials while you produce. Use it deliberately, protect it by paying on time, and you shrink the cash gap.
  • Watch growth-driven cash burn. Before you take on a quarter that is 50% bigger than last quarter, model the cash: how much material and labor goes out before the collections come in? If the answer is more than your cash plus available credit can cover, that growth can bankrupt a profitable company. Sometimes the smart call is to pace the work to the cash, not the demand.

Leak #6: You Are Buying the Wrong Jobs (and Paying Too Much For Them)

Everything above is about cost. Now look at the top of the funnel, because which jobs you sell and what they cost you to acquire drives profitability as hard as how you install them. Two roofs at the same contract price are not equally profitable if one came from a referral and the other from a $400 shared, resold internet lead that you closed at 1-in-8.

Know your fully-loaded cost per acquired job

Marketing spend is an overhead line, and most owners track it as a lump and never as a per-job cost. Do the division. If you spent $80,000 on advertising and lead buying last quarter and it produced 40 signed jobs, your customer acquisition cost is $2,000 a job. On a $9,000 job at 30% gross margin, that $2,000 eats nearly three-quarters of your $2,700 gross profit before overhead. Now do it by source: the referral channel might cost you $150 a job; the bought-lead channel might cost you $2,400. Same revenue, completely different profitability. Companies that are busy and broke are very often busy with expensive, low-margin, low-close-rate leads — high activity, terrible economics.

Stop competing on the worst doors

The most expensive roof to sell is the one where you are the fifth bidder on a homeowner who is shopping price and whose roof is not actually due. You burn a sales appointment, an estimate, and often a measurement to close a thin deal or lose to a lowball competitor. The highest-margin selling happens when you show up to roofs that are genuinely near or past the end of their service life, or roofs that took real storm exposure — because those owners have an actual reason to act, the close rate is higher, and you spend fewer marketing dollars chasing tire-kickers.

Where Targeting Data Fits — Lowering Acquisition Cost Per Job

This is where knowing which roofs are due changes the math on Leak #6, so it is worth being concrete about what that data does and does not do.

RoofPredict is built for exactly this problem on the acquisition side. It estimates a roof-age range per address from aerial imagery — a range, not a precise install date, because you cannot read an exact date off a picture — and it models storm exposure (hail and wind) per individual roof rather than treating a whole ZIP code as one event. The output is a ranking of doors, routes, and lists by how likely a roof is to be due: the roofs the weather wore out, plus the roofs simply aging out of their service life. It will also enrich a list you already own — your past-customer database, a mailing list, a farm area — with roof-age and storm signals so your existing CRM points your crews at the right houses instead of a blanket of every address in town.

Why that helps the profit problem specifically: it attacks customer acquisition cost, the line that quietly eats gross profit. If your canvassers knock streets ranked by roof-due likelihood instead of walking blocks at random, more conversations happen on roofs with a real reason to replace, your cost per signed job drops, and your close rate rises — which means more of each job's gross profit survives to the bottom line instead of being spent re-acquiring the next thin deal. It does not install the roof faster, fix your job costing, or price your bids; those leaks are yours to close with the workflows above. And it deals in odds, not certainty — a roof flagged as likely-due is a strong place to spend a sales appointment, not a guarantee the homeowner signs. Used honestly, it is a way to spend fewer marketing dollars on the wrong doors so your margin work actually shows up as cash.

A note on storm and claims work, because it is where margin and compliance intersect: your lane is to inspect, document the damage thoroughly with photos, and prepare an accurate, Xactimate-aligned estimate to repair your own scope, then hand that documentation to the homeowner. The homeowner files the claim and the insurer decides coverage. Do not, for a fee, negotiate or "handle" the claim, interpret the policy, promise a specific approval or payout, promise a deductible will be waived or absorbed, or advertise a "free roof" — those cross into unlicensed public adjusting and can cost you far more than any thin job ever could. Targeting which roofs likely qualify by age and storm exposure, and documenting scope cleanly, is the profitable and compliant half of that work.

Putting It Together: The 90-Day Profit Recovery Plan

Knowing where the leaks are is useless without a sequence. Here is the order a turnaround actually runs in, because some fixes have to come before the others.

Days 1–15: See the truth

  1. Calculate your trailing-12-month gross margin and net margin from the P&L. Write the two percentages on a card.
  2. Calculate your break-even revenue (overhead ÷ gross margin). Compare it to your actual revenue. Now you know how much of your year was real profit.
  3. Pull the last 10 completed jobs and cost them fully — materials, loaded labor, subs, equipment, permits, callbacks. Rank them by actual gross margin. The spread will tell you where the bleeding is.
  4. Separate owner's salary out of "profit" and into overhead so every number from here is honest.

Days 16–45: Stop the bleeding on new work

  1. Rebuild your estimate template: live material costs verified this month, correct waste factors by roof complexity, loaded labor rate, mandatory lines for permit/dumpster/equipment/callback reserve, and a signed decking unit price.
  2. Switch all pricing to margin math (cost ÷ (1 − target margin)). Set a floor margin below which a job needs owner approval to sign.
  3. Turn on job costing for every new job, not only occasional spot checks. If you have a CRM or project tool you are already paying for, this is what it is for. Assign callbacks back to original jobs.

Days 46–75: Cut overhead and fix cash

  1. Run the overhead audit. Kill the dead subscriptions, consolidate overlapping software, right-size the fleet to crew count, renegotiate insurance and supplier terms.
  2. Tighten cash: collect deposits where lawful, invoice on completion, install a 15/30/45-day receivables follow-up, and use supplier net terms deliberately.
  3. Calculate acquisition cost per signed job by lead source. Cut or renegotiate the worst source. Redirect spend toward the channels and the doors with real margin.

Days 76–90: Build the dashboard you will actually run on

  1. Stand up a one-page weekly scorecard: revenue, gross margin %, net margin %, overhead % of revenue, labor % per crew, cash on hand, receivables aging, and cost per acquired job. Review it every week, forever.
  2. Set targets, not only actuals: a floor gross margin per job, an overhead % ceiling, a labor % per crew, and a maximum acquisition cost per job. Manage to the targets.

The Numbers a Healthy Roofing Company Watches

If you want a compact set of benchmarks to manage against, here is a practical dashboard. Treat the ranges as starting points to calibrate to your market and model, not gospel — your insurance/retail mix, region, and crew structure all move them.

Metric What it tells you Practical target range
Gross margin % Are jobs paying for themselves with room to spare 35–50% (residential re-roof)
Net margin % What you actually keep 8–15%+
Overhead % of revenue Is your back office right-sized ~20–30%
Field labor % of revenue Crew efficiency and pricing accuracy model-dependent; track the trend
Material % of revenue Pricing accuracy + waste control watch reorders and waste
Cost per acquired job Marketing efficiency as low as your channel mix allows
AR days outstanding Collections discipline as low as your terms allow
Cash on hand (weeks of overhead) Survivability enough to cover a slow stretch

The specific numbers matter less than the discipline of watching them weekly and managing to targets. The companies that get stuck busy-and-broke are almost always the ones flying on revenue alone, with no scorecard, discovering each January whether the year was good or a disaster.

Edge Cases: When the Usual Diagnosis Does Not Fit

The leaks above cover the large majority of busy-and-broke companies, but a few situations have their own signature and need a different read. If you have already costed jobs and tightened pricing and the cash still does not come, check these.

The insurance-heavy book with long collection tails

A company doing mostly storm and insurance restoration can show healthy gross margins on every job and still be cash-starved, because the time between completing the roof and actually getting paid in full is long and uneven. Supplements, depreciation holdbacks released only after final invoice, mortgage company endorsements on the homeowner's check, and the homeowner's own foot-dragging on the deductible portion all stretch the collection tail to 60, 90, or 120 days on a meaningful slice of the book. The fix is not pricing — it is process. Build a dedicated production-to-collection tracker that follows each job from completion through recoverable-depreciation release and final payment, with an owner-assigned person chasing every open file weekly. The margin is fine; the money is stuck in the pipeline, and the pipeline needs a manager. Remember the lane: you document and estimate your scope; the homeowner files and the carrier decides. Your job is to invoice accurately and collect what you are owed, not to handle the claim.

The new-construction or builder-contract company

If you run roofs for builders and general contractors rather than retail homeowners, you face retainage (often 10% held until project closeout, sometimes months out), thin negotiated margins, and pay-when-paid clauses that push your cash behind the GC's draw schedule. A builder-heavy roofer can be profitable on paper and chronically tight on cash because 10% of every job is parked in retainage you cannot touch and a slice of receivables is hostage to a GC's own slow payer. Model retainage as a separate, restricted asset in your cash planning; do not count it as available money. And read every contract's payment terms before you sign — a pay-when-paid clause can convert your profit into an indefinite loan to a general contractor.

The company carrying a bad year on the comp mod

If your workers' compensation experience modifier spiked from a past injury, you are paying a premium surcharge on every payroll dollar for the three-year rating window, and it can quietly knock several points off your net margin company-wide with nothing wrong in your job costing. You cannot undo a claim that already happened, but you can stop the bleeding forward: aggressive safety, a return-to-work program, accurate payroll classification, and shopping the policy at renewal once the bad year rolls off the mod calculation. Treat the mod as the margin line it is, not as an uncontrollable cost of doing business.

How Often to Run These Numbers

Diagnosis is not a one-time event; the leaks reopen if you stop watching. Here is a realistic cadence an owner can actually keep.

Frequency What you review Why this interval
Weekly One-page scorecard: revenue, gross margin %, cash on hand, AR aging, jobs sold vs. floor margin Catches a thin-margin sale or a cash squeeze while you can still act
Every job Final job-cost vs. estimate, callbacks assigned back Finds the crew, salesperson, or job type that bleeds
Monthly Full P&L, overhead % of revenue, labor % per crew, cost per acquired job by source Catches overhead creep and lead-source economics before a quarter is lost
Quarterly Re-verify material costs vs. live supplier pricing; refresh estimate templates Stops stale-cost underpricing as material prices move
Annually Line-by-line overhead audit; shop insurance; review pricing model and floor margins Resets the structure, not only the actuals

The owners who escape busy-and-broke for good are the ones who make the weekly scorecard non-negotiable. It takes fifteen minutes and it is the cheapest insurance policy your company will ever carry. The ones who relapse are the ones who fix the leaks once, feel the relief, and quietly stop measuring — at which point pricing drifts, overhead creeps, and a year later they are back where they started, wondering again where the money went.

Common Mistakes That Keep Owners Stuck

A quick list of the traps that keep this problem alive even after an owner "knows" all of the above:

  • Chasing revenue to fix a margin problem. More thin jobs make a margin hole bigger, not smaller. Fix margin first; growth on a healthy margin is wealth, growth on a thin one is risk.
  • Discounting to win the job. A 10% discount on a 30%-margin job does not cost you 10% — it cuts your gross profit by a third. Discounting is the fastest way to give your year away.
  • Treating the owner's draw as proof of profit. If you have to pull money out and the account empties, the business is not profitable; it is paying you a wage out of float.
  • "We will make it up on volume." You cannot make up a negative margin on volume. Volume multiplies whatever the per-job math is, including a loss.
  • No floor price. Without a hard minimum margin, your weakest salesperson on their worst day sets your company's pricing.
  • Eating found conditions to be nice. Decking, extra layers, surprise scope — document it, change-order it, get it signed. Generosity that is not on the contract is a donation.
  • Confusing busy with healthy. A three-week backlog of low-margin work is not a strong company; it is a queue of future losses you have committed to.

The Bottom Line

A roofing company that is busy and broke does not need more leads, more crews, or a better year. It needs the truth about its own numbers. Revenue grew while margin quietly compressed and overhead quietly swelled, and the gap between them — the only thing that was ever yours to keep — got squeezed to nothing. The fix is unglamorous and it works: cost every job honestly, price with correct margin math off live costs, right-size overhead, tighten cash, and spend your acquisition dollars on roofs that are actually due instead of the whole town.

Do that and a strange thing happens. You can do less revenue and keep more money, work fewer fire-drill Fridays, and run a company that funds your life instead of consuming it. The roofers who win the long game are not the ones with the biggest top line at the Christmas party. They are the ones who know, to the point, what every job made — and who only sell the ones worth selling.

If the acquisition-cost leak is yours, targeting which roofs are due — by roof-age range and storm exposure modeled per roof — is the most direct way to spend fewer marketing dollars chasing the wrong doors. You can see how RoofPredict ranks and enriches your list at https://roofpredict.com/. The job-costing and pricing discipline is still on you; the leads you stop wasting money on do not have to be.

FAQ

Why is my roofing company busy but not making money?

Being busy measures activity, not profit. The usual cause is margin compression plus overhead creep: your gross margin slipped (jobs priced low, waste, reorders, slow crews, callbacks) while your overhead grew to staff a bigger operation. When you scale a thin per-job margin across more and bigger jobs, you multiply the problem instead of solving it. Cost every job honestly and you will usually find a handful of crews, salespeople, or lead sources dragging the whole company down.

What is a healthy gross margin for a roofing company?

For residential re-roof work, a practical target is roughly 35-50% gross margin, with net margin landing in the 8-15%+ range after overhead. Your exact target depends on your model: retail versus storm/insurance work, in-house crews versus subcontractors, and your region. The number matters less than tracking it monthly and setting a floor below which a job needs owner approval to sign.

How do I calculate my roofing company's break-even point?

Break-even revenue equals your annual overhead divided by your gross margin percentage. If overhead is $1.2M and gross margin is 30%, break-even is $1.2M / 0.30 = $4.0M. Every dollar of revenue below that is a loss; only revenue above it produces profit, and only at your margin rate. Raising margin lowers break-even dramatically, which is why chasing margin beats chasing revenue when you are unprofitable.

What is the difference between markup and margin, and why does it matter?

Markup is added to cost; margin is a percentage of the selling price. They are not the same. A 35% markup ($7,000 cost x 1.35 = $9,450) is only a 26% margin. To actually get a 35% margin you divide: $7,000 / (1 - 0.35) = $10,769. Owners who mark up when they mean to margin underprice every single job all year. Always price with cost / (1 - target margin).

Why does my loaded labor cost matter for job costing?

Because the wage is not the cost. A roofer paid $25/hr actually costs roughly $34-$38 once you add the employer share of payroll taxes (about 7.65% FICA plus unemployment), workers' compensation (one of the highest-rated classifications in roofing), and any benefits. If you estimate and job-cost using the bare wage, you bury a 30-50% labor loss into every bid. Always use a fully loaded labor rate.

Can a roofing company be profitable on paper but still run out of cash?

Yes, and it is common. Profit and cash are not the same. You pay for materials and labor before you collect from the customer or before insurance funds are released. Fast growth front-loads cash out before cash comes in, so a profitable, fast-growing company can run out of money. Protect cash with deposits and progress draws, invoice on completion, follow up on receivables at 15/30/45 days, and use supplier net terms deliberately.

How much should overhead be as a percentage of revenue?

For many residential roofing companies, overhead lands in roughly the 20-30% of revenue range, depending on model. The trend matters more than the exact figure: if overhead percentage climbs quarter over quarter while gross margin is flat or falling, you are in danger. Run an annual line-by-line overhead audit and cut dead subscriptions, overlapping software, idle vehicles, and any headcount added to paper over a broken process.

Does discounting to win a job really hurt that much?

More than owners expect. A 10% price discount on a 30%-margin job does not cut your profit by 10% - it cuts your gross profit by about a third, because the discount comes entirely out of margin, not out of cost. Discounting is the fastest way to give away a year of work. Hold a floor margin and compete on documentation, speed, and trust instead of price.

How does knowing which roofs are due help my profitability?

It attacks customer acquisition cost, the line that quietly eats gross profit. Tools like RoofPredict estimate a roof-age range per address from aerial imagery and model storm exposure per individual roof, then rank doors, routes, and lists by how likely a roof is to be due. Knocking streets ranked by likelihood instead of at random raises your close rate and lowers your cost per signed job, so more of each job's gross profit survives. It deals in odds, not certainty, and it does not fix your job costing or pricing - those leaks are still yours to close.

Stay on the documentation and estimate side. You may inspect, photograph and document damage thoroughly, and prepare an accurate Xactimate-aligned estimate to repair your own scope, then hand it to the homeowner, who files the claim while the insurer decides coverage. You may not, for a fee, negotiate or handle the claim, interpret the policy, promise a specific approval or payout, promise a deductible will be waived, or advertise a free roof - those cross into unlicensed public adjusting. Targeting which roofs likely qualify by age and storm exposure and documenting scope cleanly is the profitable, compliant half of the work.

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. OSHA Fall Protection in Constructionosha.gov
  3. Bureau of Labor Statistics: Roofers Occupational Outlookbls.gov
  4. BLS Census of Fatal Occupational Injuriesbls.gov
  5. IRS Topic No. 751, Social Security and Medicare Withholding Ratesirs.gov
  6. IRS Independent Contractor (Self-Employed) or Employee?irs.gov
  7. U.S. Department of Labor Wage and Hour Division (FLSA)dol.gov
  8. International Code Council (IRC / building codes)iccsafe.org
  9. Insurance Institute for Business & Home Safety (IBHS)ibhs.org
  10. NOAA National Weather Service Storm Prediction Centerspc.noaa.gov
  11. Federal Trade Commission: Advertising and Marketing Basicsftc.gov
  12. Texas Department of Insurance: Public Insurance Adjusterstdi.texas.gov
  13. U.S. Small Business Administration: Manage Your Financessba.gov
  14. RoofPredictroofpredict.com

Related Articles