Most contractors doing $3M in revenue have no idea how much money they actually make. And some of them are one bad month away from a cash crisis.
I worked with a $2.1M foundation repair company last year. Owner was hitting revenue targets every single week. Twelve crews running. Two estimators closing. By every metric he tracked, the business was winning.
Then we looked at his actual profit: $48K.
On $2.1M in revenue. After two years of 60-hour weeks trying to "scale."
He didn't have a revenue problem. He had a Profit Engine problem. And it's the same constraint I see in 8 out of 10 home service businesses between $2M and $10M.
Revenue is the output. Profit is the input.
If you don't start with a profit number, you're not building a business. You're building an expensive habit.
The Constraint: You're Tracking the Wrong Number
Every contractor I talk to between $2M and $10M is tracking the same number. And it's the wrong one.
Revenue is on the Jobber dashboard. It's what your peers benchmark against. "We did $47K this week." Everyone nods. Nobody asks what it cost to deliver.
So you optimize for revenue. You take jobs that don't fit your margins, hire crews without scoping the cost, and let collection lag creep because you're focused on bookings, not cash. You grow the top line and wonder why there's never any money left.
This isn't a revenue problem. It's a constraint problem. And until you fix it, nothing else improves.
Your Profit Engine is broken. You can't tell the difference between a job that looks profitable and one that is profitable. Every decision, including pricing, hiring, and growth, is built on a number that doesn't mean what you think it means.
Five Ways This Is Bleeding You Right Now
1. The Margin Misalignment
A restoration company had $120K in annual sales commissions classified as overhead instead of cost of goods. On paper, gross margin was 52%. In reality: 48%. That 3-point gap was $90K in phantom profit. The money existed on the spreadsheet but never showed up in the bank. Nobody caught it for two years. Because nobody was looking at job-level costs.
2. The Collection Lag Trap
A foundation repair company booked $400K/week in revenue. Crushing it. Then the owner looked at his bank account: only $280K collected. Thirty-five to forty percent of cash was stuck in receivables. Customers were paying 2 to 4 weeks late. Wildly successful on the books. One missed week from a payroll crisis. Revenue and cash are not the same thing.
3. The Scope Creep Bleed
An HVAC owner was about to hire a contractor at $1,500/month. Twelve-month commitment. No written scope defining what $1,500 of work actually looks like. That's an $18K bet on a handshake. No scope. No accountability. No leverage. When it blew up, there was nothing to fall back on.
4. The Pricing Guess
You price jobs based on feel. You look at competitors. You think about "what the market will bear." But you don't know if that $5K remodel should be $6,200 or $8K because you have no idea what it actually costs you to deliver. Half your jobs hit margin. Half don't. You find out which is which weeks later, and that's too late to fix.
5. The Single-Point Collapse
A plumbing company at $2.2M had 80% of revenue dependent on one producer. One person. That's not a business. That's a job wearing a business costume. If that producer walks, revenue doesn't dip. It craters.
The Profit Flip
Start With Your Profit Number
Stop asking 'How much do I want to sell?' Start asking 'How much profit do I need to take home?' Write down the actual dollar amount you need to clear annually, after taxes, debt service, and reinvestment. Not your salary (that's an expense). The real profit that stays in the business or goes in your pocket.
Calculate Your Required Gross Margin
If your fixed overhead is $800K and your profit target is $400K, you need $1.2M in gross profit. At $3M revenue, that's a 40% margin. Can you deliver jobs at 40%? If not, you either raise pricing, cut costs, or reset the target. But you're making that decision with real numbers. Not hopes.
Install Job-Level Cost Tracking
Every dollar of labor, materials, and subcontractor cost gets coded to a specific job. Not a general ledger bucket. A job. Your software already supports this. Jobber, ServiceTitan, and JobTread all do. The install isn't a technology change. It's a discipline change.
Build a Weekly Profit Scorecard
Your scorecard: revenue (weekly and YTD), total COGS, gross profit dollars and margin percentage, collection rate (cash collected vs. revenue booked), days cash on hand. Fifteen minutes a week. You'll catch margin compression before it becomes a crisis.
Set a Minimum Margin Rule
"We don't bid jobs below 38% gross margin. Period." Your estimator has standing authority to flag any quote that doesn't clear the threshold. No exceptions when cash is tight. No discounting to 'keep crews busy.' One of our clients installed this rule. 8 quotes were rejected and repriced in the first quarter. Expected to lose customers. Zero were lost.
THE CASE: From $48K to $147K on the Same Revenue
A $2.1M foundation repair company. Twelve crews, two estimators, three office staff. Hitting $150K/week in revenue consistently. Owner thought he was building equity.
Gross margin was 38%, not the 45% his books showed. Labor was misallocated. Material pricing hadn't been updated in two years. Crew efficiency was declining and nobody was measuring it. At real margin with $620K in overhead, actual owner profit was $48K. He'd fired himself from payroll for three months because cash was tight, even though the income statement said profitable.
Reclassified $150K in costs. True margin is now visible. Built a one-page job completion form: labor, materials, subs, revenue, margin %. Set the profit target: $300K annually. Created a pricing floor: anything under 40% gets flagged before submission. Installed a 19-day collection target with a phone call at day 14.
Six months in, same revenue, $2.1M run rate. Gross margin averaging 41% (up from 38%). Owner profit went from $48K to $147K. Collection lag dropped from 21 days to 16, freeing $60K in cash. He didn't need more revenue. He needed better data.
Key Takeaways
- Revenue is an output, not an input. Start with the profit dollar amount you need. Work backward to the revenue and margin required to hit it.
- Your true gross margin is hidden until you track job costs. A one-page job completion form is the difference between pricing on guesses and pricing on reality.
- Cash and profit are not the same thing. Track your collection lag weekly. If it creeps past 21 days, you've got a problem that revenue growth will make worse.
- Pricing rules prevent margin erosion. Set a minimum gross margin and enforce it on every quote. No exceptions.
- Growth without a profit target just builds a bigger cost machine. Fix the profit math first. Then scale.
Most contractors try to grow their way out of this. The ones who win fix the leak first.
Find the constraint. Fix it. Measure the result. Move to the next one.
Where This Fits
This is a Profit Engine constraint. It is one of five systems in the Clear Results Operating System.
If this is your primary bottleneck: 1) Define your profit target (this playbook), 2) Install job costing, 3) Build your weekly scorecard.
If it's not, your constraint is somewhere else: Direction, Visibility, Team Engine, or Operations Engine.
The goal isn't to fix everything. The goal is to fix the ONE thing holding everything else back.