🧽 Commercial Cleaning

How to bid commercial cleaning from your own timed production rates

Last updated 7 November 2026

Who this is for: owners of commercial cleaning companies who bid office contracts after a walkthrough.

A monthly cleaning bid rests on three numbers: how many hours the building takes each night, what an hour of labor costs you, and the margin you want left after labor. You can measure the first one. Time your own crew, turn the timing into a production rate, and the rest is arithmetic. Below is that arithmetic on one office, then the form that does it for you during the walkthrough.


Turn your timed floor routine into a floor rate

ISSA's article "How to Calculate Cleaning Times" (Brant Insero, 1 June 2022) gives cleaning time as the square footage to be cleaned divided by the production rate per hour, times 60 for minutes, and restroom time as the number of fixtures times the minutes per fixture (issa.com/articles/how-to-calculate-cleaning-times, read 6 November 2026).

The production rate is the number you can measure yourself. Time your crew's whole nightly floor routine on three or four nights, take the average minutes, and divide:

floor rate (sq ft an hour) = 60 / average minutes x sq ft timed

Sample numbers, in place of your own timing: emptying trash, dusting and vacuuming 4,000 sq ft of office took an average of 80 minutes. 60 / 80 x 4,000 = 3,000 sq ft an hour, the floor rate.

For restrooms, count fixtures. The ISSA article works its restroom example at 3 minutes a fixture: 10 fixtures x 3 minutes = 30 minutes (issa.com/articles/how-to-calculate-cleaning-times, read 6 November 2026). Time your own restrooms the same way and use your figure.


The worked bid: a 12,000 sq ft office, five nights a week

Sample numbers again: the floor rate of 3,000 sq ft an hour from above, 10 restroom fixtures at 3 minutes each, labor at $22 an hour loaded (wage plus payroll taxes, workers' comp and insurance), and a 35% margin.

Line Formula Result
Floor time 12,000 sq ft / 3,000 sq ft an hour 4.0 hours
Restroom time 10 fixtures x 3 minutes / 60 0.5 hours
Hours a night 4.0 + 0.5 4.5 hours
Labor a night 4.5 hours x $22 $99.00
Nights a month 5 a week x 52 / 12, rounded to 2 decimals 21.67
Labor a month $99.00 x 21.67 $2,145.33
Price at a 35% margin $2,145.33 / (1 - 0.35) $3,300.51
Monthly bid rounded to the nearest $10 $3,300

The 35% is what is left after labor to pay for supplies, equipment, overhead and profit. If you price supplies as their own line, add it to the labor before you divide.

Adding 35% to the labor gives a smaller margin: $2,145.33 x 1.35 = $2,896.20, a 25.9% margin and about $404 a month less on this one building.


What the client sees, and what you see

The form's own link shows the client one number: $3,300 a month. The hours, the labor lines and the margin are calculated with every reply and are never shown on the form.

On Pro, every form also has an internal view that only you, the owner, can open, at forms.badabingapp.cc/e/<yourname>/<form>. It shows every result, including the ones not shown on the form (the share docs). Open it on your phone during the walkthrough, type the square footage, the fixtures and the nights, and you see the hours a night, the labor a month and the monthly price before you leave the building.


Build the bid form in ChatGPT

Add CalcForms to ChatGPT, start a chat and paste this, with your own rates in place of the sample ones:

Build a commercial cleaning bid form. Ask for: cleanable square feet, number of restroom fixtures, and nights cleaned per week. Rates: a floor rate of 3,000 sq ft an hour, 3 minutes a fixture, $22 an hour loaded labor, 35% margin. Calculate hours a night = square feet / 3,000 + fixtures x 3 / 60. Labor a night = hours a night x 22. Nights a month = nights per week x 52 / 12, rounded to 2 decimals. Labor a month = labor a night x nights a month. Monthly price = labor a month / (1 - 0.35), rounded to the nearest $10. Show the client the monthly price only. Then publish it.

Check it on a building you already clean: put in its square footage, fixtures and nights, and compare the monthly price with what that client pays now. If a rate is off, say so in plain words: "the floor rate should be 2,800 sq ft an hour." If your rates change by floor type, give ChatGPT a table; the price list guide shows how. Bidding homes rather than offices? See the house cleaning quote calculator guide.

Building and running the form in ChatGPT is free, with unlimited forms and replies. The internal view is part of Pro, $12.99 a month after a 1-day free trial (pricing).

Want this for your spreadsheet?

Add CalcForms to ChatGPT (works in Claude too), paste the prompt from this post or attach your spreadsheet. Free, with unlimited forms and replies.

Add to ChatGPT, free →