Roofing Business Problem · Profitability

Why Is My Roofing Company Busy But Not Making Money?

The four financial problems that keep roofing contractors working hard and earning little — and exactly how to diagnose which one is costing you.

Book Free 15-Min Assessment → Find $10K in profit leaks in 90 days or first month free
✓ QuickBooks ProAdvisor ✓ Roofing specialist ✓ Plans from $600/mo
$10K+Profit leak guarantee
14 daysTo clean books
$600Starting monthly rate

The Roofing Profitability Paradox

Busy but not profitable is the most common financial complaint in the roofing industry — and it's not a business development problem. You don't need more jobs. You need to know which of your current jobs actually make money. The answer to "why aren't we more profitable?" is almost always hiding in your QuickBooks — if it's set up to show you.

There are four specific causes. Most roofing companies have at least two.

1

No Job Costing — You're Winning the Wrong Jobs

Without QuickBooks job costing enabled, every invoice and expense flows into one bucket. You see total revenue and total costs. You cannot see that your residential re-roofs run 42% margin while your commercial jobs run 18% — so you keep bidding and winning commercial work that's dragging down your overall profitability.

This is the most common cause of the busy-but-not-profitable problem. A roofing contractor doing $2M in revenue with no job costing is flying blind on every bid. They win on price, work all year, and wonder why the bank account doesn't reflect the revenue.

Diagnostic question:

Can you run a report in QuickBooks right now that shows gross profit on each individual job completed this month? If not — this is your problem.

Fix: Enable QuickBooks Projects (Settings → Advanced → Projects). Create a Project per job. Assign every invoice and expense to its Project. Run the Project Profitability report monthly. Full setup: QuickBooks job costing for roofers →

2

Overhead Not Built Into Pricing

Most roofing contractors price jobs by adding a markup to materials and labor. But markup on direct costs is not the same as margin on the business. Overhead — business insurance, vehicle expenses, admin, owner salary, software, marketing — must be covered by the gross margin on every job. If it isn't factored in, you're subsidizing your overhead from what feels like profit.

Scenario Job Revenue Direct Costs Gross Margin Overhead (20%) Net
30% markup on costs$52,000$40,00023%$10,400-$1,600
50% markup on costs$60,000$40,00033%$12,000+$8,000
Target: 35–50% gross margin$65,000+$40,00038%+$13,000+$12,000+
Diagnostic question:

What is your overhead as a percentage of revenue? If you don't know — your pricing is probably not covering it. Use our free job cost calculator to check your margin on recent jobs.

Fix: Total all overhead expenses for the last 12 months and divide by revenue. That's your overhead rate. Your gross margin target must exceed this rate plus your target net profit. Most roofing companies should target 35–50% gross margin to cover 15–25% overhead and leave 10–20% net.

3

Retainage Sitting Uncollected

Retainage — the 5–15% held back until job completion — is earned money that never shows up in the bank account if nobody tracks it. A roofing company doing $2M in revenue can easily have $60,000–$120,000 in uncollected retainage that was simply never invoiced after jobs wrapped up.

The business looks busy and revenue looks fine — but a significant chunk of earned cash is sitting in a customer's account because no completion invoice was ever sent. This is a bookkeeping problem, not a collections problem.

Diagnostic question:

Is there a Retainage Receivable line on your QuickBooks balance sheet right now? If not — you are not tracking retainage and almost certainly have uncollected cash. How to fix it →

4

Cash Basis Books Create a False Picture

Cash-basis accounting records revenue when money hits your account. If a $60,000 insurance check clears in October, October looks like a great month — even if the shingles were purchased in September and the crew was paid two weeks ago. Cash basis systematically distorts monthly profitability, making good months look great and bad months look worse than they are. It's impossible to make informed pricing or hiring decisions on distorted data.

Diagnostic question:

Does your P&L spike and crash month-to-month in ways that don't match how busy you actually were? That's cash-basis distortion. The fix is accrual-basis bookkeeping — revenue matched to when work is earned, costs matched to when they're incurred.

How JobCostBooks Fixes All Four

When a new client onboards at JobCostBooks, the first 30 days covers a complete QuickBooks diagnostic and rebuild: Projects enabled and configured, chart of accounts restructured for roofing, retainage receivable account created, historical retainage balance identified and entered, and accounting method converted to accrual basis. Most clients discover $40,000–$120,000 in fixable issues in the first month. That's the basis of our $10K guarantee — we've never had to honor it.

Job Costing QuickBooks Job Costing Setup for Roofers → Retainage Retainage Tracking in QuickBooks Online → Mistakes 5 QuickBooks Mistakes Costing You Thousands → Free Tool Roofing Job Cost Calculator →

Find Out Which Problem Is Costing You

Book a free 15-minute QuickBooks screen-share. JobCostBooks will diagnose the exact financial leak in your roofing business — no charge.

Book My Free 15-Min Assessment →

$10K profit leak guarantee in 90 days · Plans from $600/mo · hello@jobcostbooks.com