REVENUE LIES.
PROFIT TELLS.
Plenty of roofing shops are scaling revenue while shrinking margin. They look successful from the outside and feel underwater from the inside. The fix is per-job profitability — knowing which jobs make money and which jobs eat your overhead. Here is the practical framework.
Why revenue is the wrong target
Revenue is easy to track and easy to grow. Margin is hard to track and easy to lose. Most growing roofing shops grow revenue 30% year over year while margin compresses 5–8 points. The math: bigger company, less profit.
The contractors who scale profitably know per-job true cost. The contractors who scale unprofitably know per-job revenue.
What true per-job cost actually includes
Materials — the easy one. Pull from your supplier invoices. Tag to the job at PO time.
Labor — your crews' actual hours on the job, blended at their loaded rate (wage + payroll tax + workers comp + benefits). Time tracking matters.
Sub costs — invoiced amounts from any subcontractor on the job.
Sales commission — the rep's commission on the closed job, allocated to the job at close.
Office overhead allocation — your total office overhead divided across the season's jobs. Roughly 12–22% of revenue for most roofing shops.
Add those five together. Subtract from job revenue. That is true per-job profit.
The four lanes most shops have
Retail roofing: medium revenue, high margin (because no insurance haircut). Predictable. Slow lead flow.
Storm restoration insurance: high revenue, medium margin (after deductible and supplement haircut). Volatile lead flow tied to weather.
Commercial: variable revenue, variable margin. Long sales cycle, big checks.
Repairs: low revenue, high margin per hour (when you can dispatch efficiently). Builds referral pipeline.
Most shops do not track which lane each job belongs to. The ones that do can see lane-level profitability and adjust their lead spend accordingly.
The metrics worth tracking
Per-job gross margin (revenue − materials − labor − subs).
Per-job net margin (gross − commission − overhead allocation).
Per-lane average net margin (rolling 90 days).
Per-rep average gross margin (catches reps who give the farm away).
Per-crew average labor efficiency (hours estimated vs hours actual).
Per-supplier material variance (catches when suppliers creep on prices).
Most CRMs surface revenue. Few surface these. The shops that build dashboards around them outperform.
How to act on the data
If a lane is below 12% net margin, evaluate killing it or repricing it.
If a rep is below average gross margin, train them or restrict their estimating authority.
If a crew is consistently over hours, adjust your estimating defaults or address the crew.
If a supplier creeps on prices, get competitive bids.
Per-job data turns gut-feel decisions into evidence-based ones.
How to actually track this
Inside a real CRM (this is what Revolve Core does), per-job true cost can flow back automatically: PO data attaches material cost, time tracking attaches labor, the closed-won record attaches commission, overhead allocation runs nightly. Per-job profit shows up on the customer record without manual reconciliation. Without that automation, you are reconciling in spreadsheets — which means most shops never do it.
The bottom line
You cannot fix a profit problem you cannot see. Per-job profitability is not optional for shops that want to grow profitably. It is the operational discipline that separates the contractors who scale from the contractors who chase volume.
See per-job profitability in Revolve Core
QUICK
ANSWERS.
12–22% of revenue for most roofing shops. Calculate from your last 12 months of overhead expense divided by revenue. Apply to each job at close.
READING IS GOOD.
SHIPPING IS BETTER.
Free for the duration of beta. No card required. Real human onboarding.