Home  ›  Blog  ›  Pricing

The Real Cost of Underbidding a Cleaning Contract

Pricing  ·  7 min read  ·  Updated September 2026

Underbidding does not feel like losing money at first. You win the account, the crew goes in on the first night, and the client is happy. Then month two or three arrives. The account is running more hours than you priced. The margin is thin or gone. Now you are in a spot you do not want to be in: absorb the loss or risk the account by asking for a higher price. Neither option is good, and you put yourself there before you ever sent the bid.

What a 400 dollar monthly gap actually costs

Here is a real example. A 15,000 square foot medical office, five days a week, standard scope. The correct price for that building was 2,200 a month. The owner priced it at 1,800 because they guessed on the production rate and wanted to win the account. That gap is 400 dollars every month.

Over a two year contract, 400 a month adds up to 9,600 in missing margin. That is money that should have been in the business. And that number assumes the job runs exactly as priced. When the building turns out harder than expected, the actual loss is higher. When labor runs over on a job you already underpriced, you are not just missing margin. You are paying your crew partly out of pocket.

The number that should concern you. Recurring janitorial running at under 30 percent net is a sign the price or the production rate needs a correction. What a healthy margin looks like in commercial cleaning gives you the benchmarks to check your active accounts against.

The production rate is almost always the culprit

Every bid starts with a production rate: how much square footage your crew can clean in one hour. A lot of owners use 4,000 to 4,500 square feet per hour as a baseline. For light scope work in open office space with mostly carpet, that is a reasonable number.

The 15,000 square foot medical office is a different job. It has restrooms. It has hard floors. Restroom service adds time that has nothing to do with the main floor square footage. Hard floors mean sweeping and mopping instead of vacuuming. When you add the actual scope, the realistic production rate on that building is closer to 3,200 square feet per hour, not 4,500.

At 4,500 square feet per hour, that building prices at about 3.3 hours per visit. At 3,200, it actually takes 4.7. That extra 1.4 hours of crew time, five nights a week at 16 dollars an hour, adds up to about 480 dollars a month in labor the bid did not account for. The account was underbid, and then the crew ran over on top of that.

The full method for pricing recurring janitorial by the square foot walks through how the production rate connects directly to crew hours, labor cost, and the final monthly price. If your bids feel like guesses, that is where to start.

The three part underbidding audit

The fix requires one thing: time logs from completed jobs. Pull the actuals, compare them to the bid, and find where the gap is coming from. Here is how to work through it.

  1. Production rate reality check. Take your last three to five recurring accounts. For each one, divide the actual hours clocked by the building square footage. That is your real production rate for that type of work. Compare it to the rate you used when you priced the job. If you estimated 4,200 square feet per hour and the logs show 3,100, you have found the problem. The fix is not to push the crew to move faster. The fix is to price to the real rate going forward.
  2. Scope that was never priced. Look at what the crew is doing that was not on the original bid. Did restrooms get added after the contract started without a price adjustment? Did the client ask for break room service that was not in scope? Every task that got added without a corresponding price increase is margin walking out the door. Go through the original scope against what the crew is actually doing on each visit and find the gaps.
  3. Consumables that got absorbed. Are you supplying trash liners, paper towels, or hand soap and absorbing the cost? On one account it does not sound like much. Across five or ten accounts over a year, it adds real money. The contract should specify whether the client provides consumables or whether that is factored into your price. If it is included, the cost needs to be in the bid from the start.

How to price the next bid correctly

Your bid calculator is only as accurate as the production rate you feed it. Build your rates from actual time logs, not from what you remember a similar job taking two years ago and not from a number someone posted online. Run the full bid process on every new account: walk the building, scope the job carefully, set a production rate based on what the scope actually requires, and mark up from there.

When you are at the walkthrough, count the restrooms and measure the hard floors separately from the carpet. Those two variables drive more variance in actual job time than anything else. A building that looks like a 4,000 square foot per hour job from the lobby can become a 2,800 square foot per hour job once you see the restroom count and the hard floor area. Get those numbers before you quote.

Raising a price mid-contract is possible but it costs you. Most commercial cleaning contracts allow for a price adjustment at renewal or with 30 days notice. Asking for more mid-term puts the relationship at risk. Price it right at the walkthrough and you never have that conversation.

The Janity.ai Bid Calculator runs your production rate, labor cost, and scope into a monthly price with the margin visible before you send anything. That is how you know whether an account is worth taking before you commit to it.

The takeaway

Underbidding costs more than you realize, and the damage compounds the longer the contract runs. Audit your active accounts against actual time logs. If the production rate you used was too optimistic, you know what to correct at renewal. And on every new bid, price to the real scope: walk the building, count the restrooms, measure the hard floors, and use the rate your logs actually support.

Price the next bid before you commit to it

The Janity.ai Bid Calculator runs your production rate, labor cost, and scope into a monthly price with the margin visible before you send the proposal.

Start free