How to Reduce Overtime in Your Cleaning Operation
Scheduling · Payroll
Listen to this article
Narrated from this CleanLog article.
It's Thursday afternoon and your payroll export shows three cleaners over 40 hours. One of them sat at 38 hours on Tuesday. Then Site 9 lost a cleaner to a sick day, you needed someone fast, and the person already closest to the cap picked up the shift. Nobody decided to spend that overtime money. It happened on its own, and now it's locked in.
Overtime feels small in the moment. A couple of extra hours here, a covered shift there. Across a month it turns into one of the quietest margin leaks in the business, and it almost never shows up until the week is already paid for.
Why overtime costs more than the hours on the clock
Under the Fair Labor Standards Act, non-exempt employees earn 1.5 times their regular rate for every hour past 40 in a workweek. So an overtime hour doesn't just add labor. It adds labor at a 50 percent premium. The Bureau of Labor Statistics puts the median wage for janitors and building cleaners at roughly $17 an hour. At that rate a regular hour costs you $17 and an overtime hour costs $25.50.
Now stack that across a team. Say ten cleaners each pick up five overtime hours a week. The premium alone, the extra $8.50 an hour above straight time, runs about $42.50 per cleaner per week. Over a year that's roughly $22,000 you didn't plan for and almost certainly can't bill back to the client.
Where that number lands is what makes it sting. Labor already accounts for 50 to 70 percent of operating costs in commercial cleaning, according to ISSA. Net margins on recurring contracts typically sit between 10 and 28 percent. An unplanned $22,000 in overtime doesn't come out of some buffer. It comes straight out of the thin slice of margin the contract was supposed to produce.
The four things that actually drive overtime
Overtime rarely traces back to careless scheduling. It traces back to specific, repeatable patterns. Once you can name them, you can fix them.
| Root cause | What it looks like | The fix |
|---|---|---|
| Chronic understaffing at one site | The same site always needs a fill, always from whoever happens to be free | Hire or reassign so the site has a stable bench instead of a rotating gap |
| Call-out scramble | A sick day gets covered by the nearest cleaner, not the one with the cheapest hours left | Keep a small float pool and check weekly hours before you hand out the shift |
| Shift handover gaps | The outgoing cleaner stays late because the next person is late or doesn't show | Track late starts by site and fix the two or three that are chronic |
| Invisible weekly totals | Hours only add up in payroll, after the shifts are already approved | See running weekly hours per cleaner before the schedule is published |
Notice that three of the four are timing problems, not staffing problems. You don't always need more people. You need to see the hours sooner.
Find your own overtime pattern first
Before you change anything, find out where your overtime actually comes from. Pull the last eight weeks of payroll and sort overtime hours by cleaner and by site. Most operators are surprised by how concentrated it is. It's rarely spread evenly. Usually two or three sites, or two or three people, generate the bulk of it.
That concentration is good news. A problem spread across the whole operation needs a culture change. A problem living at three sites needs three specific fixes. Maybe Site 14 is genuinely understaffed and needs another hire. Maybe one supervisor approves long shifts without asking why. Maybe a single cleaner is quietly grabbing every available hour because they want the money, which is fine until it pushes them toward burnout and a call-out next month.
A quick way to rank the fixes: multiply each site's weekly overtime hours by the premium and annualize it. A site generating eight overtime hours a week is quietly costing you about $3,500 a year in premium alone at a $17 base. Put a real number on each problem site and the order you should tackle them in stops being a guess.
You can't fix a pattern you can't see. Eight weeks of sorted data turns a vague sense that overtime is high into a short list of named, fixable causes.
Count the hours you forget to count
Some overtime hides in time you don't think of as work. Under federal rules, travel between job sites during the workday is paid time. A cleaner who covers three sites in an afternoon is on the clock for the drives between them, not just the minutes inside each building. If your scheduling treats those gaps as unpaid, the hours still pile up toward 40 even though they never show on any one site's sheet. Same with the ten minutes spent loading the van or waiting for a building to unlock. None of it feels like a shift. All of it counts toward the line where premium pay kicks in.
This is where a lot of mystery overtime comes from. The site-by-site numbers all look fine, but the per-cleaner total crosses 40 because the small pieces between sites were never added up in one place. Tracking hours by person, not just by site, is the only way to catch it before payroll does.
See the hours before they happen
The common thread in all of this is timing. Most overtime is preventable, but only if you catch it before the shift is worked. Once a cleaner has stayed late, the money is already spent. Your scheduling system either shows you that someone is sitting at 38 hours on Tuesday, or it doesn't.
When weekly hours are visible per cleaner across every site, a scheduler can redistribute before publishing. Move Friday's shift to the person at 22 hours instead of the one at 39. Flag the week for review. Decide, on purpose, whether an overtime shift is worth paying for. The goal isn't zero overtime. It's overtime that someone actually chose.
Set a soft threshold below the legal one. If overtime starts at 40 hours, treat 35 as the line where a cleaner needs a second look before taking another shift. That buffer gives you room to react when a call-out lands midweek. Without it, every unexpected absence pushes someone straight into premium pay because there was no slack left to work with.
When overtime is the right call
Sometimes paying overtime is the cheaper option, and chasing it to zero is its own mistake. If a one-week contract spike needs coverage, paying an existing, trained cleaner time-and-a-half can easily beat onboarding a temp who doesn't know the site and slows everyone down. Replacing a cleaner runs $1,000 to $5,000 once you count recruiting, training, and the early productivity dip, so burning out your most reliable people to dodge a few overtime hours is a false economy.
Tracking overtime isn't about driving it to zero. It's about making sure that when you pay the premium, you're getting something back for it: a covered client, a kept promise, a cleaner who wanted the hours. The problem was never overtime you decided to pay. It's overtime you only found out about on Thursday.
Overtime is a scheduling problem before it's a payroll problem, which is exactly why it sits at the center of the real cost of manual scheduling. CleanLog shows running weekly hours for every cleaner across every site before you publish the schedule, so overtime becomes a decision instead of a surprise. See how it works.
Get the next post
Practical writing on scheduling, payroll, and daily ops. About once a month.