The short answer: 45-65% gross margin is the healthy band. Above 55% is well-run. Below 40% means undercharging, slow crews, or overstaffing. Net margin lands at 15-30% after marketing and overhead, depending on acquisition channel and recurring mix.
Cost breakdown — typical residential bundle ($1,500-$2,000 ticket)
| Line item | % of revenue | Notes |
|---|---|---|
| Chemicals (SH + surfactant) | 4-8% | Cheaper at 55-gal drum scale. Roof wash skews higher. |
| Tech labor (1-2 techs, $20-$30/hr loaded) | 25-40% | The biggest single cost. Bundling cuts labor share dramatically. |
| Truck + equipment depreciation | 3-6% | Pressure washer, soft-wash pump, ladders, hoses |
| Fuel + insurance per job | 3-5% | Higher in spread-out rural service areas |
| Total COGS | 35-55% | |
| Gross margin | 45-65% | |
| Marketing / CAC | 8-15% | Mailed postcards at $1 each + Stripe deposits compress this |
| Overhead (office, software, owner draw fraction) | 10-20% | |
| Net margin | 15-30% |
The two real levers
1. Per-surface pricing
Most operators undercharge by about $0.05/sqft on siding and $0.05-$0.10/sqft on roof because they set those rates in year one and never revisited. Moving from $0.30 to $0.35 on a 2,500 sqft house adds $125 of pure margin per job. Across 200 jobs a season, that's $25,000 of net margin you weren't capturing.
2. Bundle attach rate
A 4-service bundle finishes in about 60% of the time of four separate truck-rolls — one drive, one setup, one chemical mix-up. So bundle revenue lands at 65-75% gross versus 50% for single-service. The fastest margin gain for most cleaning operators isn't raising prices. It's getting bundle attach from 25% to 65%, which Clean Launch's all-four-services postcard render does mechanically.
Where margin leaks
- Slow techs. A 2,500 sqft house should be wrapped in 45-60 minutes on soft wash. A 2-hour job at the same price halves the gross.
- Retail chemical purchases. Buying SH in 5-gallon jugs at Home Depot instead of 55-gallon drums from a chemical distributor roughly doubles chemical cost.
- Drive time. Routing 5 jobs across 60 miles instead of clustering 5 jobs in one neighborhood eats 1-2 productive hours per crew per day.
- Free re-cleans. Setting expectations badly on roof streaks (some lichen needs 2 weeks to fully dissipate) leads to callbacks. Educate on the postcard and the portal.
- Insurance leakage. Uninsured ladder slip on a window job will wipe out a season of gross. General liability $1M is the baseline; don't try to save $80/month here.
Healthy vs unhealthy gross — quick gut check
- >55% gross: Pricing right, crew efficient, route density solid. Keep going.
- 45-55% gross: Functional. Look for one of the leaks above.
- <40% gross: Something structural is broken — usually pricing or labor inefficiency. Don't scale until this is fixed.
The fastest lift to net margin is bundle attach + recurring annual.
Free account, free rendering, all-four-services postcard at $1 per piece. Dave refunds your campaign spend personally if it doesn't work.
Start free →