
October 5, 2026 · Mitt Patel · 5 min read
You just quoted a new office account at $45 an hour, and it felt right. But you priced it the same way you priced the one you dropped last spring, the one that turned out to lose money every week for four months before anyone noticed.
Why this happens
Most cleaning business owners know their total revenue and their total payroll. What they don't have is the number in between: how much revenue one hour of cleaning labor brings in, and how much that hour actually costs once you count everything tied to it.
Without that number, decisions get made on gut feel. An owner hires a fourth technician because the schedule looks tight, not because the math supports another payroll. A price increase gets skipped because a customer sounds price-sensitive on the phone, not because anyone checked whether the account is profitable. An account gets kept for years because it's "steady," even though the labor hours it eats up would earn more somewhere else.
Over time, not knowing this number can catch up with you. Payroll creeps up faster than revenue. Margins get thinner and nobody can say why. By the time it's obvious, it's often because cash is tight, not because the owner caught the trend early.
A worked example
Say you run a small residential and light-commercial cleaning company. In one month, your technicians logged 400 hours of billable cleaning time. Your total revenue from those jobs was $18,000. Your total labor cost for that time, including wages, payroll taxes you pay as the employer, and workers' compensation premiums, was $9,600.
Revenue per labor hour: $18,000 divided by 400 hours equals $45. Labor cost per labor hour: $9,600 divided by 400 hours equals $24.
That gap, $21 an hour, is what's left to cover supplies, vehicle costs, insurance, office overhead, and profit. Now say one of your commercial accounts, a small dental office, took 30 hours that month and billed out at $900. That's $30 an hour in revenue against the same $24 labor cost, leaving only $6 an hour before any other expense. Compare that to a residential route that billed $40 an hour. The dental account isn't necessarily a bad account, but it's carrying a much thinner margin, and that's worth knowing before you renew the contract or take on another one like it.
How to set it up
- Pull two numbers from payroll each month: total hours worked by cleaning staff, and total labor cost for those hours. Labor cost should include wages, the employer's share of payroll taxes, and workers' compensation premiums allocated to that period. If your payroll software separates out employer-side costs, this breakdown may already be there; if not, you'll need to add the employer-side costs to gross wages by hand.
- Pull total billed revenue for the same period, matched to the same hours as closely as you can. If you invoice by the job rather than by the hour, use your scheduling or job records to estimate hours worked per job for that month.
- Calculate the two rates: revenue per labor hour (total revenue divided by total hours) and labor cost per labor hour (total labor cost divided by total hours). Keep these as two separate numbers, not one blended margin, so you can see which side moves when something changes.
- Break it down by account or route if your software allows it. Some accounting software can tag time and invoices by customer or job, which lets you run the same two calculations for individual accounts, not just the business as a whole.
- Set a line, in dollars per hour, below which an account gets a second look. Where that line should sit depends on your fixed costs and target margin, so this is a number to work out with whoever manages your books, not a figure to guess at.
- Review monthly, alongside payroll and invoicing, not as a separate project. The point is to catch drift early, not to do forensic work once a year.
Mistakes that undo it
- Using gross wages only. Leaving out payroll taxes and workers' compensation understates labor cost and makes every account look more profitable than it is.
- Counting hours paid, not hours billed. Drive time, training, and downtime between jobs are real costs, but if you fold them into "hours worked" without separating them from billable hours, your per-hour revenue figure gets diluted and misleading.
- Blending all accounts into one number. A single company-wide rate can hide the fact that two or three accounts are dragging the average down while the rest are healthy.
- Recalculating only when something feels off. By the time an owner notices margins slipping, several months of low-margin work have usually already happened.
- Changing the formula month to month. If you calculate hours or cost differently each time, the trend line means nothing. Pick a method and stay consistent.
Monthly checklist
- Total billable hours worked, pulled from timesheets or scheduling software.
- Total labor cost for those hours, including wages, employer payroll taxes, and workers' compensation.
- Revenue per labor hour, calculated and recorded.
- Labor cost per labor hour, calculated and recorded.
- Per-account or per-route breakdown, if your system supports it.
- A short list of any accounts below your set line, flagged for review.
Common questions
What counts as labor cost besides wages?
At minimum, include the employer's share of payroll taxes and workers' compensation premiums. If you offer benefits like health insurance contributions or paid time off, those belong in the calculation too, since they're real costs tied to each hour worked.
Should I include drive time and training hours?
Track them, but keep them separate from billable cleaning hours in your revenue-per-hour calculation. If drive time and training are eating a large share of paid hours, that's worth knowing on its own, since it affects overall labor cost even though it isn't billed directly to a customer.
How often should I check this, and is monthly really necessary?
Monthly is usually enough to catch a trend before it becomes a pattern, and it lines up naturally with payroll and invoicing cycles. Checking quarterly or less often means you're often reacting to a problem that's already several months old.
What do I do with an account that falls below my line?
That depends on the account and why it's low. Sometimes a price adjustment fixes it, sometimes the account needs fewer hours to complete the same work, and sometimes it's simply not worth keeping. This is a business decision that depends on your other accounts and your capacity, not something a formula decides for you.
North Hudson Bookkeeping sets up this kind of monthly tracking for cleaning businesses and keeps the numbers current, so you're looking at real figures instead of guesswork when it's time to price a job, hire, or let an account go. The first call is free.
