Benchmark Report
What 920 Cleans Taught Me About Cleaning Company Margins
Data: 920 completed cleans, February 1 through July 31, 2026. Updated August 2026.
Over six months my cleaning company completed 920 cleans, collected $240,513, and paid cleaners $130,296. That's a 45.8% average gross margin. But the average hides the real story: across cleaners working the same price book, gross margin ranged from 36.3% to 58.7%, and gross profit per clean ranged from $78 to $228. The spread between my best and worst cleaner was almost 3x, per clean, on the same price book.
The headline numbers
- 920 completed cleans in six months
- $240,513 collected revenue
- $130,296 paid out to cleaners
- 45.8% average gross margin (before lead costs and overhead)
- $261 average ticket
- $119.80 average gross profit per clean
Every number on this page comes from my own company's booking log. Not a survey, not an industry report, not estimates. A webhook fires every time a clean is completed and logs the revenue and the cleaner payout. This is what the business actually did.
The margin spread is the whole game
Here is every cleaner who completed 20 or more cleans in the window, ranked by gross margin. Same company, same price book, same booking flow.
| Cleaner | Cleans | Gross margin | Gross profit / clean | Avg ticket |
|---|---|---|---|---|
| Cleaner A | 20 | 58.7% | $228 | $389 |
| Cleaner B | 40 | 49.0% | $132 | $270 |
| Cleaner C | 74 | 46.4% | $110 | $236 |
| Cleaner D | 125 | 45.1% | $127 | $281 |
| Cleaner E | 50 | 44.3% | $134 | $302 |
| Cleaner F | 60 | 43.8% | $99 | $227 |
| Cleaner G | 66 | 43.5% | $88 | $203 |
| Cleaner H | 28 | 43.4% | $139 | $320 |
| Cleaner I | 20 | 41.8% | $131 | $314 |
| Cleaner J | 164 | 38.9% | $78 | $201 |
| Cleaner K | 26 | 36.3% | $100 | $276 |
Three things jump out of this table that I could not see before I logged every clean:
1. My busiest cleaner was my least profitable big one
Cleaner J completed 164 cleans, more than anyone else, at a 38.9% margin and $78 gross profit per clean. Cleaner A completed 20 cleans at 58.7% and $228 per clean. One clean from A was worth almost three cleans from J. If you allocate jobs by availability instead of margin, you are quietly choosing the $78 outcome over the $228 one, hundreds of times a year.
2. Volume and profit are different lists
Rank these cleaners by cleans completed and you get one list. Rank them by gross profit per clean and you get a different list. Most owners only ever see the first list, because that's what the schedule shows. The second list is where the money is, and it only exists if you join payout data against revenue per job. How to build that ranking for your own roster is in the cleaner profitability answer.
3. The spread is 22 points wide
36.3% to 58.7% is the difference between a business that struggles to cover overhead and one that throws off cash. Nothing about pricing changed between those two rows. The difference is job mix, payout structure, and who gets sent where. Those are dispatch decisions, and every one of them is invisible without per-clean margin data.
Get the next data drop
This report updates as more cleans complete. One email when new numbers publish. No sequence, no pitch.
The number that embarrassed me: 3.7%
A cleaning company owner in a peer group asked me my one-time-to-recurring conversion rate. He said it should be around 20%. I didn't know mine. The data was sitting in my booking log, so I wrote the query.
Out of 295 one-time customers (excluding move-in/move-out cleans, which are inherently one-off), 11 later booked a recurring cadence. That's 3.7%, roughly a fifth of the peer benchmark. Every point of that gap is a customer I already paid to acquire, already served, and then let walk away. I would never have known this number without asking the question against real data, and I run the company.
Priced out: closing the gap to 20% on those same 295 customers would have meant roughly 48 more recurring customers. If even half of them landed on a monthly cadence, that's about $34,000 a year in gross profit at my average margin per clean, from customers I had already acquired. How to compute your own rate is in the conversion answer.
What a cleaning company owner should take from this
- Your average margin is not actionable. Your margin spread is. The average tells you the business is fine. The spread tells you which specific decisions are costing you money.
- Per-clean gross profit beats revenue as a dispatch signal. Sending your highest-margin cleaner to your highest-value jobs is a free raise.
- Measure conversion from one-time to recurring. If you don't know yours, it's probably worse than you think. Mine was.
- None of this requires new software you don't already have. The data lives in your booking platform and your accounting system. It just lives in two places, which is why nobody joins it. Whether your FSM's own reporting can close that gap is covered in the FSM reporting comparison, and the full list of owner questions this data answers is at the answers hub.
Methodology
Data covers completed cleans from February 1 through July 31, 2026, logged by webhook from the booking platform at completion time. Gross margin is collected revenue minus cleaner payout, before lead costs, refunds, and overhead. The per-cleaner table includes only cleaners with 20 or more completed cleans and excludes multi-cleaner jobs and jobs with missing payout records, which is why the table's 673 cleans don't sum to the 920 total. Cleaner names are anonymized; the underlying data is my company's production booking log. Questions about the data: roy@uplevelautomations.com.
Want these numbers for your company?
Service OS pulls your booking platform and QuickBooks into one screen, so you can answer these questions about your own operation in real time. Built by an operator who runs a cleaning company, not an agency.