Job Costing

Roofing Job Costing: How to Know Your Profit Before the Job Is Done

Most roofing companies don't know if a job was profitable until weeks after it's complete. Here's how to build a real-time job costing system so you never get surprised.

June 10, 202611 min readBy Ketterly Team

Most roofing companies find out if a job was profitable 30–60 days after they finished it — if ever. Invoices go out, payments come in, bills get paid, and somewhere in the mess of a bank account there's a profit number. But no one really knows which jobs made money and which ones didn't.

Real-time job costing fixes this. It means you know your estimated margin before the job starts, you can see how actual costs compare to budget as the job runs, and you have a completed profitability report within a few days of finishing. This guide covers how to build that system.

Why Roofing Companies Don't Do Job Costing (And Why That's Expensive)

The most common reason: “Our accountant does the books at the end of the quarter.” That's not job costing — that's quarterly accounting. There's nothing actionable in a quarterly number about a specific job that finished in January.

The second reason: “We know our margins are around 35%.” Maybe. But average margins hide a lot. You probably have some jobs at 45% carrying others at 15%. Without per-job tracking, you don't know which job types are killing you, which customers are worth pursuing, or which sales reps are generating profitable work vs. buying jobs with thin pricing.

The Four Cost Categories for Every Roofing Job

1. Materials

Every product on the job: shingles, underlayment, decking (if needed), starter strip, drip edge, flashing, ridge cap, nails, pipe boots, ice and water shield, ventilation. Your estimate should list each line item with a material cost. Your actual cost is the supplier invoice.

Track: estimated materials vs. supplier invoice total. Variance over 5% on materials warrants investigation — waste factor wrong, order quantity wrong, or material prices moved.

2. Labor

Per-square crew pay, or hourly wages plus employer burden for W2 teams. If you're using subcontractor crews, this is the sub invoice. If you're paying your own crew by the square, it's crew pay rate × squares installed.

Track: estimated labor vs. actual crew pay or sub invoice. A consistent 10–15% over-run means your estimates are calibrated wrong for certain job types.

3. Subcontractors / Specialty Work

Chimney work, gutters, skylights, or other specialty trades you sub out. Track these separately from your own labor so you know your sub cost per job.

4. Overhead Allocation

This is the one most roofing companies skip. Overhead — your truck, insurance, equipment, office expenses, software, phone bills, gas — is a real cost of every job. If you don't allocate it per job, your “job profitability” numbers are inflated and you're actually losing money faster than you realize.

A simple approach: take your monthly overhead and divide by your average monthly revenue to get an overhead percentage. If your overhead is $15,000/month and you do $100,000/month in revenue, that's 15% overhead — so every job needs to absorb 15% off the top before you see actual profit.

Building a Job Cost Sheet

For each job, you need to capture:

  • Contract value (what you invoiced)
  • Estimated materials (from your estimate)
  • Actual materials (supplier invoices)
  • Estimated labor (from your estimate)
  • Actual labor (crew pay or sub invoice)
  • Other direct costs (dumpster, permits, specialty subs)
  • Overhead allocation (% of contract value)

Gross margin = Contract value − (materials + labor + direct costs)

Net margin = Gross margin − overhead allocation

You want to know both. Gross margin is your operational efficiency. Net margin is your actual business profitability.

What Good Margins Look Like

Healthy roofing company benchmarks (2026):

  • Gross margin: 35–50% for well-run residential operations. Lower for commercial. Higher possible with strong supplement recovery on insurance jobs.
  • Net margin: 15–25% after full overhead allocation for healthy businesses. Under 10% net is a warning sign.

If you don't know your current gross margin, calculating it for the next 10 jobs will be one of the highest-ROI hours you spend this month.

The Three Things Job Costing Reveals That You Can't See Otherwise

1. Which Job Types Are Profitable

Retail replacements vs. insurance jobs. Residential vs. commercial. Storm work vs. maintenance. Different job types have different true margins. Once you have per-job data, you can see which categories you should be pursuing more aggressively — and which ones you might be better off passing on.

2. Which Sales Reps Generate Profitable Work

A rep who closes 20% more volume but with margins 15% lower than the company average is actually destroying value, not creating it. Job costing per lead source lets you see this clearly.

3. Where Your Estimates Are Consistently Wrong

If your labor is consistently 12% over budget on hip roofs and on target for gables, that's calibration data. Fix the estimate, not the job.

Setting Up Real-Time Job Costing in Your CRM

A good roofing CRM lets you enter estimated costs when you create the job (pulling from your estimate), then record actual costs as the job runs (entering sub invoices, material orders, and crew pay against the job record). The system calculates variance automatically.

In Ketterly, job costing is built into the job record. You estimate the job, the platform tracks what you've actually spent against that estimate, and you have a profitability report for every job as soon as the final costs are entered.

The Minimum Viable Job Costing System (If You're Starting From Zero)

If you're not doing any job costing yet, start simple:

  1. On every new job, write down the contract value and your estimated labor + material cost.
  2. When the job is done, record the actual crew pay and material invoice total.
  3. Calculate: Actual gross profit = Contract value − (actual materials + actual labor).
  4. Compare to estimated gross profit.

Do this for 20 jobs. You'll already see patterns you didn't know existed — and you'll have the data to make better pricing and job-selection decisions going forward.

Key Takeaways

  • Average margins hide individual job performance — per-job costing is the only way to know what's working
  • Track four cost categories: materials, labor, direct costs, and overhead allocation
  • Gross margin and net margin tell different stories — know both
  • Job costing reveals which job types, reps, and estimate categories are making or losing you money
  • Start simple: even a basic spreadsheet tracking estimated vs. actual on 20 jobs will change how you price

Go Deeper: Job Costing Resources

See Ketterly handle this workflow

Book a 30-minute demo and we'll walk through the exact tools and workflow described in this article.

See Ketterly on your own roofs

Book a 30-minute demo and we’ll walk through your sales process, measure a real roof, and show you exactly how your team would use it.