Where Roofing Contractors Lose Margin - and How to Protect It

Zigaflow30 May 20266 min read
Invoices3 overdue
Acme Merchandise Ltd£12,480Paid
BlueSky Promos£3,760Sent
Horizon Events£8,940Overdue
Vertex Group£5,120Ready to Invoice
Promo World Ltd£2,380Sent

Roofing contractors targeting 35-40% gross margin often find net profit trailing well behind. The gap appears in four specific places: material cost changes absorbed at job stage, on-site scope additions that never reach the invoice, unconfirmed sub-crew actuals, and final invoices delayed after completion.

The economics of roofing look clean on paper. Materials at roughly 35% of revenue, crew costs at around 18%, and a target gross margin of 35-40% for a well-run operation (Profitability Partners, March 2026). In practice, most roofing contractors find that what a job costs and what they invoice for rarely align. The gaps are not random - they appear in the same four places across residential reroof, commercial flat, and specialist work: material pricing not locked at quote stage, on-site scope additions that never reach the invoice, sub-crew actuals that diverge from the estimated rate, and final payment delayed because the invoice was not triggered on completion day.

Material Cost Gaps Between Quote and Invoice

Materials are the dominant cost line in any roofing job. At roughly 35% of revenue, a 5% shift in material cost - shingles ordered at a different price than quoted, an extra roll of underlayment, dumpster cost above estimate - adds up quickly. On a $12,000 residential reroof, that's around $210 of direct cost absorbed before a single crew hour is touched.

Two failure modes are predictable. First: the quote is built from a supplier price that was current two weeks earlier but has since moved. If you quote in February and install in April, shingle and membrane prices may have shifted. Without locking the price at quote acceptance - through a supplier price hold or a clear validity date - the gap is your problem. Second: orders placed without a job-linked purchase order mean there is no baseline to compare the supplier invoice against. When it arrives $300 above expectation, the difference gets absorbed rather than queried.

The discipline: build every quote from confirmed current pricing, apply a validity date that reflects your supplier's pricing stability, and raise one purchase order per supplier per job at the point of order. When the supplier invoice arrives, matching it against the PO and delivery note tells you in under a minute whether you are paying what was agreed.

Pricing Holds and Quote Validity

Most shingle and materials suppliers will hold a price for 14-30 days against a confirmed job. Call your rep and request a written price hold before sending the quote to the customer. If the supplier cannot hold the price, your quote validity clause should reflect that uncertainty with a specific date, not an open-ended period.

On-Site Scope Additions That Never Reach the Invoice

The most common roofing job expansion is not a formal change request. It is the site discovery. Strip the old roof and find rotted decking across three sections. Cut in a roof light and find the flashing detail requires two additional hours. Arrive at the fascia and find it is beyond repair on a run that was not in the original scope.

Each of these is legitimate extra work with real cost attached. The problem is that site additions are almost always agreed verbally, with the intent to add them to the final invoice - and that intention rarely survives job close-out intact.

According to the National Roofing Contractors Association, scope creep can increase project costs by 10-30% per job (RoofPredict, March 2026). A contractor doing $500,000 in annual revenue that absorbs just 10% of that in unrecorded site additions is giving away $50,000 in legitimate work each year. That is not a rounding error. It is a structural leak.

The process fix: any scope addition gets a written record before work proceeds. That does not require a formal contract amendment. A message to the customer confirming what was found, what needs to happen, and the additional cost - with a written reply agreeing to proceed - is sufficient. That message becomes the invoice basis. Without it, the addition is invisible.

Scope creep can increase project costs by 10-30% per project. Across a year of volume, unrecorded site additions are not a rounding error - they are a structural leak in an already thin-margin trade.

Sub-Crew Costs Not Tracked to Individual Jobs

Residential and commercial roofing operates largely on 1099 sub-crews - that is the industry standard. The sub-crew model reduces payroll burden and workers' compensation exposure, but it creates a specific job-costing problem: the sub-crew invoice arrives after the job is complete, often after the customer invoice has already been sent.

When the sub-crew's invoice lands at $400 above the estimated cost, there is nothing to do. The customer invoice is gone. The job was recorded at the estimated sub-crew figure, and the actual cost is now an unrecoverable write-down.

The fix starts before the crew sets foot on site. A written booking confirmation per sub-crew per job, with an agreed rate per square installed or a day rate with an explicit cap, establishes the cost baseline. When the sub-crew is booked, raise a purchase order against the job for the agreed amount. If the job runs longer than scoped, that is a site variation - confirm the additional cost in writing with the crew, and add the corresponding line to the customer invoice before it is sent.

Profitability Partners reviewed hundreds of roofing P&Ls and found that operators reaching 12-15% net margin consistently track actual cost per square installed by crew, not just by job. That data shows within a season which crew is running at your estimated rate and which is consistently overrunning - information that is invisible if you only see blended monthly costs.

Set a Sub-Crew Cost Alert

Any sub-crew actual that comes in more than 10% above the purchase order value should be flagged before the customer invoice is raised, not after. A two-minute check at job close-out is the difference between recovering an overage through a variation charge and absorbing it permanently.

Invoice Timing Delays After Job Completion

The final margin leak in roofing is not about direct costs - it is about when you invoice. According to the National Association of Home Builders, 38% of roofing businesses cite delayed payments from customers as their primary liquidity constraint (RoofPredict, April 2026). What that data does not surface is how often the delay originates with the contractor.

A job that finishes on a Friday afternoon gets invoiced the following Tuesday once the site supervisor submits the paperwork. That is a four-day delay. Across a year of 60 jobs with an average invoice value of $9,000, a consistent four-day gap means carrying more than $36,000 in completed-but-uninvoiced work at any point.

Stage invoicing is the lever. A deposit at contract signing - typically 20-30% - covers material procurement without the contractor carrying that cost. On larger commercial and flat-roof jobs, a mid-project invoice at a defined milestone reduces cash exposure on the remaining work. The final invoice is raised on completion day: deposit deducted, site additions as named line items with written approval references.

For commercial work, the arithmetic is stark. A $28,000 roofing contract on 45-day payment terms instead of 30-day terms ties up $7,000-$9,000 in liquidity for an extra 15 days. At scale - a 50-job operation with 30% of contracts on 60-plus-day terms - that is $185,000 in usable cash permanently delayed (RoofPredict, April 2026).

Completion Day Is the Invoice Trigger

The invoice should be raised on the day the job closes, not when the paperwork reaches the office. Assign one person the task of sending the final invoice on completion day, with the deposit deducted and every site addition listed as a separate named line item with its written approval reference. Every day between completion and invoice send is a day added to your payment cycle.

Roofing margin is not lost in one place. It disappears across four: material pricing not confirmed before the job starts, site additions agreed verbally and never invoiced, sub-crew costs landing after the customer invoice has gone, and final invoices delayed after completion. Any one of these is manageable in isolation. All four running simultaneously across 60 or 80 jobs a year explains why contractors with a solid win rate and a full schedule still find net margin trailing well below what gross margin should produce. Locking quote pricing, recording site additions in writing, raising a PO before each sub-crew booking, and invoicing on completion day cost nothing to implement and directly protect margin you have already earned.

roofingjob costingmargin managementscope creepconstructioninvoicing

Related pages

See it in action

Ready to run your business
on one platform?

Book a free demo and see how Zigaflow fits your team.

Book a free demoView pricing