\n
Every UK cleaning margin figure currently in public circulation is either US-denominated, from a software vendor that does not ship margin features, or completely unsourced. To fix this, we are publishing the bottom-up economics of 250 real cleaning jobs completed by MyCleanTeam. We removed all client and cleaner names, but left the financial reality untouched.
Download Aggregated Data (CSV)When you look at top-line revenue, you miss the bleeding. In our 250-job sample, exactly 4.0% of jobs lost money outright (10 jobs). Most operators only discover these loss-making jobs at the end of the quarter when cash flow tightens.
| Margin Bucket | Number of Jobs |
|---|---|
| Loss-making (< 0%) | 10 |
| 0% to 10% | 1 |
| 10% to 20% | 13 |
| 20% to 30% | 42 |
| 30% to 40% | 113 |
| > 40% | 71 |
The average labour cost across all jobs was 62.7% of revenue. On average, we generated £21.50 per hour in revenue and paid out £12.94 per hour in direct wages. Crucially, that £12.94 pay rate does not immediately translate to the remaining margin: you must stack employer NI, pension contributions, and 12.07% holiday accrual on top of that base rate.
If you rank clients purely by monthly revenue, your most "valuable" clients might be secretly draining your business. When we grouped these 250 jobs by client and month, our bottom 5 client-month margins were staggering: -39.5%, -35.8%, -30.0%, -4.0%, and -3.0%.
Why does this happen? Keyholder delays, longer-than-expected travel times, or sending two cleaners instead of one to speed up a job without adjusting the flat rate charge. A generic scheduling tool doesn't flag this; Opso does.
Over the 6-month period, margins actively fluctuated based on operational tightening and wage adjustments (n=250 jobs).
Run a per-job cost analysis on your top 10 clients and 2–3 will likely be unprofitable. Opso does this automatically for every shift.
See How Opso Tracks Margin