When a roofing company crosses the million-dollar mark, the problems usually aren’t about sales. The phones ring. Crews stay busy. The market demand is there. What kills profit—quietly, consistently, and often invisibly—is inaccurate job costing.
Roofing companies don’t struggle because their pricing is wrong or their workmanship is off. They struggle because their numbers lie to them. And when your numbers aren’t telling the truth, every financial decision you make—from hiring to material purchasing to owner draws—is built on sand.
Most roofing companies believe they’re running at 35–45% gross margins. But once their books are cleaned up and job costs are properly allocated, they discover they’re actually closer to 15–25%.
At that point, it’s not a margin problem. It’s a bookkeeping problem.
Why Job Costing Is Inherently Difficult in Roofing
Roofing is not like general construction where costs can be predicted with tight ranges. Roofing jobs fluctuate dramatically because:
- Roof pitch can add 20–40% more labor than estimated.
- Material waste varies based on cut lines and roof complexity.
- Underlayment needs can double depending on tear-off conditions.
- Crews move at different speeds depending on weather, attic temps, and decking.
- Subcontractor rates aren’t standardized and often shift by the week.
Even two “identical” houses in the same subdivision can produce completely different cost profiles.
The complexity isn’t the problem. The problem is that most internal bookkeepers aren’t trained to account for it.
They record transactions. They reconcile. They pay bills.
But they don’t:
- tie material invoices to the correct job
- break out labor accurately
- allocate overhead proportionally
- categorize subcontractor charges correctly
- adjust job budgets after change orders
- reconcile dumpster, fuel, and equipment rentals to individual projects
So the financials become a distorted version of reality—clean on the surface, chaotic underneath.
The Hidden Costs Most Roofers Miss
Here are the expenses that commonly disappear into “Overhead” instead of being tied to the job:
- Subcontractor Variation
Subs may invoice per square, per job, per slope, or per-day during storm rush periods. If these hit the wrong account (or the wrong job), your gross margin is fiction.
- Dumpster Fees
A $300–$600 dumpster placed in “General Expense” instead of Job #1746 makes every profitability report inaccurate.
- Fuel & Delivery Charges
If your supplier charges for a second delivery, that cost belongs to the job, not overhead.
- Material Returns (and Lost Credits)
Credits often get lumped into the month they post, not the job they belong to. That artificially inflates margins on completed jobs.
- Labor Overruns
If a crew takes an extra day because the decking was rotted, that’s a job cost—not a payroll expense.
Individually, these oversights seem small. Collectively, they can swing a job’s margin by 5–15% without the owner ever knowing why.
Why “Close Enough” Costing Is Dangerous for a $1M+ Roofing Company
When you’re under $800K, you can survive guesswork. When you hit $1M+, the cracks become chasms.
Here’s what starts happening:
- You underprice because your books say you’re profitable—but you’re not.
- Your estimator thinks they’re hitting targets—but they’re not.
- You add another crew thinking jobs are profitable—but the cash can’t support it.
- The bank balance looks fine—until the next slow month exposes the truth.
- Your internal bookkeeper tries their best—but they’re not a construction accountant.
A small margin error on 200 roofs a year compounds into a massive cash flow problem by Q4.
How Inaccurate Job Costing Skews Pricing
Roofers often tell us:
“We bid at a 40% margin. I don’t understand why the bank account looks thin.”
The reason: You’re pricing based on false historical data.
If your accounting doesn’t track:
- true labor cost
- true disposal cost
- actual material usage
- actual subcontractor costs
- real overhead impact
…then your pricing model is built on numbers that are 10–20% off.
In roofing, that is the difference between:
- thriving and surviving
- scaling and stalling
- being profitable and being busy-but-broke
What Accurate Job Costing Actually Requires
Here’s what a roofing company really needs—beyond what a traditional bookkeeper offers:
- A Chart of Accounts Built Specifically for Roofing
Most roofing COAs are generic. You need one structured by:
- tear-off
- installation
- underlayment
- decking
- flashing
- ventilation
- subcontractor labor
- equipment
- waste
- warranty cost
- supplements
The level of detail drives the level of accuracy.
- A Formal Job Costing Workflow
Every expense must tie back to a job—no exceptions.
This requires:
- consistent naming conventions
- rules for which costs belong where
- accuracy when coding invoices
- review processes to catch errors early
- Monthly Job Cost Reconciliation
Jobs should be closed monthly—not months after completion.
- Actual vs. Estimated Margin Reporting
This is how you identify which estimators or production teams are consistently under-bidding or over-spending.
- A Roofing-Specific Closeout Process
This includes:
- verifying missing invoices
- ensuring all materials were coded correctly
- matching dumpster fees to jobs
- reconciling subcontractor tickets
- reviewing change orders and supplements
- adjusting overhead allocation
This is where 90% of margin leaks are caught.
Case Example: The Roofer Who Gained 12% Margin Clarity in 60 Days
A roofing company doing $4M in annual revenue came to us believing they ran:
- 42% gross margins
- $250K in average monthly revenue
- healthy cash flow
Within two months of cleaning up their job costing:
- Real margins were closer to 28%.
- Job materials were being mis-coded to overhead.
- Dumpster charges were buried in general expense.
- Subs invoiced late, resulting in margin swings months after job completion.
- Their “best-selling” shingle package was actually the least profitable.
Once the books were corrected, pricing was adjusted, and estimator targets were rewritten, they added 12% true margin within one quarter—without increasing volume.
The work was there. The jobs were there. The profit was hiding in bad data.
The Bottom Line
Roofing companies don’t lose money because they aren’t selling enough. They lose money because their accounting system wasn’t built for roofing in the first place.
If you’re doing over $1M in revenue, the days of “close enough” job costing are over. Your books need to give you the truth—especially when your business grows faster than your internal bookkeeping experience.
Because without accurate job costing, everything else—pricing, hiring, expansion, forecasting, even owner compensation—becomes a guess.
And guessing is expensive.
If This Sounds Familiar, Let’s Talk
If this sounds uncomfortably close to what’s happening inside your roofing company, that’s a sign your bookkeeping has hit its limit.
You can schedule a no-pressure discovery call with Estmere here: If this sounds familiar, let’s talk.