Job management software provider

How to Spot a Losing Janitorial Contract Before Month End

November 11, 2026

A contract that is quietly losing money shows up in the field long before it shows up on the invoice — hours drifting past the schedule on one building, supplies climbing, scope that was never priced. Watch job cost while the crew is still on site and you can still change the outcome; wait for month end and you can only record it.

A losing janitorial contract is rarely one disaster. It is the same building running an hour long, every night, while the invoice stays exactly what it was last month. Most owners only see it on the 30th, when the cost side finally gets added up — by then the crew has moved on and the month is closed. Here is how to catch it while the work is still happening.

Why the loss hides until invoice night

Recurring janitorial work is built to hide trouble. The scope looks fixed, the schedule looks fixed, and the price is the same number you billed last month. Nothing on the invoice looks wrong, because the invoice only shows revenue. Cost is the part that moves: an extra cleaner on a bad week, a floor machine running an hour longer, a client who quietly added a break room.

The loss arrives as a slightly thinner deposit, not a red flag, and then it repeats. A contract running over budget one month is not a bad month — it is the same problem twelve times a year, still there next month unless something changes. That is the difference between a report after the job and seeing the job while it runs.

What a losing janitorial contract looks like in the field

None of these signals announce themselves. They show up as small, reasonable decisions the crew makes to get the building done.

Hours that drift on one building

The supervisor says the building is fine. The schedule says four hours a night. For two weeks it has been taking five and a half. Nobody flags it, because the work is getting done and the client is happy.

The other signals are just as quiet:

  • A restroom, break room or lobby added to the walk-through with no change to the contract price.
  • Supplies climbing — liners, paper, chemicals — because the scope grew and nobody wrote it down.
  • The last building on the route getting rushed because every stop before it ran late.
  • A machine problem that adds a person to every visit instead of a repair to the list.

Each one is small. Together they are the contract's cost, and the invoice will never tell you which building caused it.

Post-job reporting tells you what happened. Real-time visibility lets you change it.

A month-end report is a record of a finished month. It can tell you a contract ran over. It cannot tell you which night it started, which building, or whether the extra hour came from a slow crew or a scope change the client never mentioned. By the time it prints, there is nothing left to act on.

Real-time visibility works while the crew is still on site. Labor hours land against the job as they are logged, and supplies are recorded when they come off the shelf, not when the month is tallied. The budget is a live number, so you are not comparing two finished months — you are looking at this one, tonight.

The moment you actually catch it

It is 8:40 at night. Building C is scheduled for four hours. The labor line on that job reads 5.2 hours and the crew is still on the third floor. That is the moment — not the 30th, not the invoice, not the meeting with your bookkeeper.

What you do with that number is the whole point. You call the supervisor and ask what changed tonight. Sometimes it is a client request nobody priced, sometimes a broken machine or a new cleaner still learning the route. Either way you decide while the work is happening: pull one person and finish the top floor tomorrow, price the extra restroom into next month's contract, or schedule a repair instead of another body.

None of those options exist on the 30th. The month is spent.

The math on one contract, walked through

Worked example (hypothetical numbers): A three-building office contract, billed monthly.

  • Monthly price (revenue): $6,000
  • Budgeted cost: $4,500 — 200 labor hours at $20 per hour ($4,000) plus $500 in supplies
  • Budgeted gross profit: $1,500 (25 percent gross profit margin)

Halfway through the month, the hours tell a different story. By the 15th the crew has logged 120 labor hours against the 100 the schedule called for, and supplies are at $350 against a budgeted $250.

  • Projected labor for the month: 240 hours at $20 per hour = $4,800
  • Projected supplies: $700
  • Projected cost: $5,500
  • Projected gross profit: $500 (8.33 percent gross profit margin)

That is $1,000 of gross profit gone: 40 extra labor hours at $20 per hour, plus $200 in extra supplies. Found on the 30th, it is a bad month. Found on the 15th, there are fifteen nights left to move a cleaner, fix the schedule, or put the extra work into the contract price.

What to do while there is still time

  1. Price the scope you are actually cleaning. If the client added a break room, it goes into the contract in writing before the next invoice.
  2. Track hours per building, not per month. A monthly total hides which site is bleeding.
  3. Set a trigger you will act on. If the same building runs an hour past schedule twice, it gets a look — not a note for month end.
  4. Fix the schedule before blaming the crew. Most overruns are route and staffing problems, not effort problems.
  5. Bring the number to the client early, while you still have the option to re-price or change the frequency.

An owner who has always found out at invoice time is not careless; the tools were built to report backwards. Job costing is the process of tracking and allocating labor, equipment and materials to a specific job, and it can happen during the work or after it. Doing it during the work is the part that protects the gross profit.

You do not have to find a losing janitorial contract on the 30th. SolvPro shows you the job economics — labor hours, supplies, budget drift — in real time while the crew is still on site, with work orders and instructions in Spanish for the crew and everything in English for you. Call (866) 765-8776 and book the free 30-minute live setup call: bring a job that surprised you at invoice time and watch SolvPro flag the budget overrun on it.

Common questions

How do I know if one of my cleaning contracts is losing money?

Look at cost per building per week, not the monthly invoice. If the same site keeps running past its scheduled hours, or supplies on that site keep climbing while the price stays flat, the contract is losing money even though the deposit looks normal.

What is the difference between job costing and post-job reporting?

Job costing is the process of tracking and allocating labor, equipment and materials to a specific job, and it can happen during the work or after it. Post-job reporting only covers what already happened, so it can tell you a contract ran over but it cannot let you change anything about that month.

How often should I check the numbers on a recurring contract?

Per building, at least weekly — a monthly review is late by definition. The useful check is whether tonight's logged hours are tracking to the scheduled hours for that site, while the crew is still standing in the building.

What do I do when a client adds work without changing the price?

Write it down and price it before the next invoice goes out. Extra restrooms, break rooms and lobby work are the most common unpriced additions, so put them into the contract or bill them separately, and have the conversation early while it is still easy.

Can a contract be fixed mid-month?

Yes, and mid-month is the best time to do it. Moving a cleaner, changing the route or scheduling a repair can pull a job back inside budget before the month closes, and re-pricing the contract protects the months that follow.

See How SolvPro Works

Book the free 30-minute live setup call and see it on one of your own jobs.

See How SolvPro Works
← All posts