Why You're Busy But Not Making Money (The 5 Hidden Leaks in a $5M Service Business)

If this is you
Revenue is the highest it's ever been. Your team is the biggest it's ever been. The bank account is the smallest it's been in 18 months. You're "busy but broke", and there's a specific operational reason.
An Owner Question Worth Testing
It usually starts with some version of the same sentence: "We had our best revenue year ever. I don't know where the money went."
Picture a fictional $2-8M contractor in that position. The phones are ringing. The trucks are rolling. The crew is working six days a week. And at the end of the year, there's almost nothing left. Sometimes they're writing a check to the IRS. Sometimes they're drawing on their line of credit in December to make payroll. On paper, they're a $5M business. In their bank account, it doesn't feel like it.
This isn't bad luck. It's five specific profit leaks, each one invisible in isolation, devastating in combination. And the compounding effect is what catches contractors off guard. In a hypothetical shop, the top line can grow 15% a year while net margin erodes from 11% to 4%. You're technically bigger and technically poorer.
Let me walk through exactly what's happening, using a fictional $5M HVAC cost model as the example. These are diagnostic scenarios, not client results or a common measured margin cohort.
The Baseline: The Fictional $5M Starting Model
Before the leaks, define the baseline. This fictional $5M model starts at 43% gross margin ($2.15M), 29% overhead ($1.45M) and 14% operating profit before financing and tax ($700K). Owner wages must be included consistently.
Those are scenario assumptions, not measured medians for shops that track their numbers. The contractor benchmark definitions help identify which observed metrics actually match your work and accounting basis.
Leak 1: Overhead Creep
In the fictional example, revenue went up 25% over two years ($4M to $5M). Headcount went up 44% (18 to 26 employees).
This pattern is easy to fall into in a growing contractor. You add a truck because you're turning away work. Then you hire a CSR because the phones are overwhelming. Then you bring on an office manager because the CSR is drowning. Each hire makes sense in isolation. In aggregate, this example added $450K in fixed overhead ($1.0M to $1.45M) without a proportional increase in billable labor.
The math turns brutal fast. If your overhead was $1.0M on $4M of revenue (25%), and you've grown to $5M while overhead has grown to $1.45M (29%), you've given back almost half your revenue growth in fixed costs before a single variable cost changes.
The $28.5K median in the contractor dataset is service-agreement revenue per employee (n=217), a recurring-revenue intensity measure. It is not total revenue per employee and cannot benchmark the total-revenue calculation below. Compare total revenue per employee against your own prior periods after matching subcontractor and staffing scope.
In our $5M example: Two years ago, 18 employees at $4M revenue = $222K per employee. Today, 26 employees at $5M = $192K per employee. Total revenue per employee is about 13.5% lower despite 25% revenue growth. This ratio alone does not establish productivity or profit. At the old efficiency level, they'd need $5.8M to support 26 employees. Treat that gap as a question to investigate (role mix, subcontracting, capacity not yet billed), not as proof of under-performance.
Leak 2: Pricing Hasn't Kept Up With Costs
Wages, parts, fuel, insurance and workers comp costs can all rise faster than your rates. Measure your own increases from payroll, supplier invoices and policy renewals; this page does not supply a measured industry inflation figure. In the fictional example below, loaded field cost rises 37% in two years ($38 to $52 per billable hour).
Meanwhile, a rate card can sit unchanged for two or three years. A fictional counterexample: billing residential service at $110/hr when loaded tech cost is $85/hr leaves $25/hr before truck, insurance, or overhead.
The cross-trade median average billed labor rate is $79/hr (Level Index, 1,770 contractors). It is not an HVAC-only figure, and the underlying rate-card field is used inconsistently, so it shows market positioning, not what you should charge. The bill rate benchmarks show a wide range by market and trade. Whether your own rate is below your cost structure is answered by the test below, not by the median.
Here's the test: take your total labor cost (wages + payroll taxes + benefits + workers comp) and divide by total billable hours. Add your truck cost per billable hour. That's your fully loaded field cost per hour. A universal 2.5x multiplier is not established. Add overhead and desired contribution once, then test required recovery at the hours actually available. If vehicle costs are already in loaded cost, do not add them again.
In our $5M example: Two years ago, bill rate of $100/hr with a $38/hr fully loaded cost = a 2.6x price-to-cost multiple (163% markup on cost, 62% margin on price). Today, fully loaded cost has crept to $52/hr (wage increases, new benefit package, higher WC) but bill rate is still $100/hr = 1.9x (92% markup, 48% margin). Markup and margin are different ratios, so do not swap one for the other in a price formula. On 20,000 annual billable hours, the $14/hr cost increase at an unchanged rate compresses gross profit by $280,000 ($14 × 20,000).
This is often the most fixable leak. A $10-15/hr rate increase on service work, implemented gradually over two billing cycles, would add $200,000 to $300,000 of billed labor revenue if the same 20,000 hours are still sold and collected. Lost volume or slower collections reduce that.
Leak 3: Unprofitable Customer Segments You Don't Know About
Every contractor has customers who drain margin. The property manager who sends 30 calls per year but negotiates a flat rate and calls back on every job. The GC who has you chasing payments for 90+ days and beats you up on change orders. The residential customer who lives 45 minutes from your service territory and needs three trips per visit.
The problem is that most contractors don't know which customers these are. They see total revenue, not margin by customer.
The customer profitability guide explains how to rank customers by margin. Measure two things in your own job data. First, is your profit concentrated in a small share of customers? Second, does your bottom group turn margin-negative once collection friction, callbacks, drive time and back-office handling are counted? No measured 80/20 split is established here.
A fictional counterexample: a second-largest account by revenue, grown for three years, turns out to earn little or nothing once callbacks and drive time are charged to its jobs. It looked like success. It was a treadmill.
In a separate fictional customer-mix example: $1.2M of $5M revenue is concentrated in 3 commercial accounts that run 28% gross margin (versus 44% on the rest of the book). That margin gap, 16 points on $1.2M, is $192K of missing gross profit. Those accounts have lower gross margin, not automatically a loss: whether they cover incremental and allocated overhead still needs testing. The stated mix produces 40.16% blended gross margin ($1.2M x 28% plus $3.8M x 44%, divided by $5M), a separate state from the 43% starting model.
Free benchmark review
See how your margins benchmark.
Start with a free conversation about your priorities. With agreed access to the relevant records, we compare your numbers with applicable benchmarks and identify what to review first.
Leak 4: Warranty and Callback Costs Nobody Tracks
Every callback is paid labor against a job you already closed. Every warranty repair is parts and labor you'll never bill. These costs live in the cracks of your P&L, lumped into job costs without a category, or written to overhead without attribution.
As an illustrative planning assumption, not a measured rate, test callback rates of 5-8% of service jobs and rework or warranty cost of 2-4% of install job cost. Then replace those assumptions with your own tagged callbacks. At those assumed levels, warranty and callback cost could equal several percent of revenue and stay invisible in standard P&L reporting.
The insidious part: these costs are asymmetric. The jobs that generate callbacks are disproportionately the ones where the margin was already thin (rushed jobs, difficult sites, undertrained techs). You put in extra hours to close a borderline job, and then put in more hours fixing it.
This is closely tied to phantom margins, the difference between what you think a job made and what it actually made once callback and warranty costs are properly allocated.
In our $5M example: At 43% gross margin, direct labor and materials are $2.85M. Assume unbilled rework of $150K, about 5.3% of that direct cost. That's not on anybody's job report. It's buried in unbilled hours and parts credits. The company thinks they're running 43% gross margin. Subtract the $150K callback load (3 points of $5M revenue) and they're at 40%.
Leak 5: Mix Shift Away From Service
This is the one contractors feel proudest of, and the one that quietly kills them.
You landed a $400K commercial retrofit project. Then another. Your revenue jumped 25%. You hired two more install crews. You're doing work you've never done before. The phones are full of opportunity.
Service work (residential maintenance contracts, small commercial service agreements, emergency calls) is often labor-heavy, and labor is the highest-margin cost type on quotes. Labor lines carry a 47.7% gross margin on quoted work across 2.2M+ quote line items in the Level Index, all trades and job types. That is a quote-line figure, not a measured service-only gross margin. As an illustrative planning assumption, test service at 40-45% gross margin and install or construction at 28-35%. Install carries more materials, less familiar labor, and harder change order recovery.
When you shift 20% of your revenue from service to install, you're replacing your highest-margin work with your lowest-margin work. Total revenue goes up. Total gross margin dollars go flat or down.
Those service and install ranges are planning assumptions, not measured benchmarks, so use your own margin by job type. With 45% service and 30% install, shifting 20 points of revenue from service to install lowers blended margin by 3 points (20% × 15 points). If your revenue is growing but your gross margin dollars aren't growing proportionally, check your mix.
In our $5M example: Two years ago, the company was 75% service, 25% install. Today it's 55% service, 45% install. Revenue grew from $4M to $5M. But blended gross margin dropped from 43% to 37%. In dollars: gross profit went from $1.72M to $1.85M, only $130K more despite $1M of additional revenue. They grew revenue 25% for about 7.6% more gross profit. Those blended figures imply about 50.5% gross margin on service and 20.5% on install, a wider gap than the planning ranges above. A 6-point drop from mix alone requires a gap that wide. With the narrower ranges, look for pricing or callback causes too.
How They Compound: The $5M Contractor Reality
The leaks can overlap. Pricing, customer mix and service mix may describe the same jobs; do not add all three estimates as independent losses. Here is a fictional stress-case bridge in which each reduction is defined on non-overlapping work. It is not the same company state as the 37% blended margin in Leak 5, which already reflects whatever pricing and callback effects existed in that illustration:
| Starting point | Percentage points | Dollars |
|---|---|---|
| Scenario starting gross profit | 43.0% | $2,150,000 |
| Pricing shortfall, eligible service jobs only ($14/hr × 20,000 hours) | -5.6 | -$280,000 |
| Customer-specific margin gap, jobs excluded above | -3.84 | -$192,000 |
| Callback cost, not already in either job group | -3.0 | -$150,000 |
| Remaining mix effect, after excluding previous groups | -6.0 | -$300,000 |
| Scenario remaining gross profit | 24.56% | $1,228,000 |
Subtract the assumed $1.45M of overhead once: operating loss is $222K before financing and tax. Overhead is below gross profit in this illustration, so it is not also a gross-margin leak. A real diagnosis needs a job-ID bridge proving the four gross-profit adjustments do not overlap.
That is also why "busy" is a weak operating signal. In the companion article on private contractors that stopped treating busy as the goal, the useful question is whether each added dollar of work produces cash, margin, and owner capacity.
Where to Start
You don't have to fix all five at once. In order of impact and speed:
1. Raise prices first. This has the fastest payback and requires no headcount changes. A $10-15/hr increase on service calls takes two billing cycles and lifts gross margin on the work you retain. Test retention and accepted quotes by customer and job type; a price increase can lose profitable volume.
2. Run a customer profitability analysis. Pull job-level margin data for your top 20 accounts. Identify which ones are running below a threshold you set from your overhead and profit target. In this model, 29% overhead plus a 14% operating target needs 43%, so 35% is a deliberately low example flag. Have a rate renegotiation conversation or deprioritize dispatch to those accounts.
3. Create a callback tracking code in your field service software. You can't manage what you can't measure. Every callback should be tagged and attributed to the original job and technician. Do this for 90 days and you'll have a clear picture of your rework cost.
4. Protect your service mix. Be intentional about the ratio of install to service revenue. If a large install project comes in, ask whether your service capacity can absorb the crew reallocation, or whether you're temporarily sacrificing your highest-margin work for a shiny project.
5. Build a hiring ROI model before the next hire. Before you add the next truck or CSR, model the break-even: what revenue does this person need to generate (or enable) to justify their fully loaded cost? See the CFO vs. bookkeeper decision for how financial oversight catches these decisions before they're made emotionally.
Q: My revenue is growing but my bank balance isn't. Is that a cash flow problem or a profitability problem? A: It can be either or both, and they have different root causes. Profitability problems show up in the P&L, low gross margin, high overhead, leaking net profit. Cash flow problems show up in timing, slow collections, big material outlays before invoicing, seasonal gaps. You can have good profitability and bad cash flow (fast-growing contractors with slow billing cycles often do). You can also have adequate cash flow and poor profitability (drawing on a line of credit to mask thin margins). The diagnosis matters because the fixes are different. A 90-day review of the P&L alongside bank balances and AR/AP aging is a practical way to separate the two.
Q: How do I know if my overhead rate is too high? A: No measured overhead benchmark is established here. As an illustrative planning assumption, a $3-10M contractor might plan for 20-28% of revenue. The right level depends on your gross margin, because overhead plus target profit has to fit inside it. If overhead rises as a share of revenue year after year without a matching gross-margin gain, you have overhead creep. Places to check: vehicles allocated to overhead instead of jobs, admin salaries that have grown faster than revenue, and insurance costs that haven't been shopped in 2+ years. A clean overhead analysis separates allocation changes from costs that can actually be removed. Moving a vehicle expense between accounts does not save cash.
Q: Can I fix the pricing problem without losing customers? A: Often you can limit the loss with the right sequencing, but no retention rate is guaranteed. Raise rates with notice, a clear rationale (your cost increases), and a service quality story, rather than reactively. Then measure: track accepted quotes, repeat calls and contribution per job by customer group for 60-90 days. If the customers you lose were below your required margin, the loss may help. If profitable customers leave, revisit the size or timing of the increase. Price-sensitive customers who also generate callbacks and collection friction are the ones you can most afford to lose.
Get the next one
Want next week's benchmark in your inbox?
One email a week. Real numbers from 2,200+ contractors in the research universe. No fluff. Unsubscribe anytime.
Related reads
Job Costing
Contractor Finance KPIs Ranked by Profit Impact (2026)
The 8 financial KPIs that move a contractor's bottom line, in an editorial priority order by profit leverage, with Level Index benchmarks where a measured sample exists and measurement steps where one does not.
Job Costing
Your 45% Job Could Really Be a 24% Job. Here's Where the Margin Goes.
In a fictional illustration, a contractor job bid at 45% gross margin lands between about 24% and 29% once labor is fully burdened, callbacks counted, material drift priced, and AR financing charged. Rebuild it with your own numbers.
Job Costing
Landscaping Route Margin: Rebuild Labor Cost Correctly
Rebuild landscaping route margin using loaded labor, drive time, equipment per crew-hour, and seasonal capacity. Includes Level job-data context.

About the author
Sam Yang
Founder & CEO
Founder of Level, the always-on finance team for contractors, service businesses, and ecommerce brands. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in job revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.
LinkedIn