Price Commercial Cleaning Jobs: A Margin Calculator Built With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Price Commercial Cleaning Jobs: A Margin Calculator Built With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Price Commercial Cleaning Jobs: A Margin Calculator Built With AI.

Price a commercial cleaning job from hours: list each task, divide its area or count by your production rate, multiply by visits per week, then cost the hours at your loaded labour rate, add supplies and overhead, and divide by one minus your target margin. AI can build that calculator; the production rates must be your own timings.

Per-square-foot price guides are written for buyers, so they give a range and a warning that every building differs. For the contractor the square-foot figure is an output, not an input: you reach it by costing the hours. A washroom-heavy 8,000 square feet is not the same job as 8,000 square feet of open plan, and the calculator shows why.

Follow me on Instagram@sagnikteaches

Why the per-square-foot figure comes last

Cleaning time for a task is the area divided by the production rate, times 60 to get minutes. That is the formula in ISSA's article on calculating cleaning times, which works through mopping 1,000 square feet at 5,355 square feet an hour (11.2 minutes) and a ten-fixture washroom at three minutes a fixture (30 minutes). Everything in a commercial quote is a variation on those two sums: area over rate for floors, count times minutes for fixtures and bins.

Connect on LinkedInSagnik Bhattacharya

ISSA is clear about what its published times are. The article calls them benchmarks and bidding guides, says they are not a time-motion study, and notes that organisations get better results from their own studies. That is the right way to use any published figure, including the illustrative ones below. Borrow a number to see whether yours is plausible, then time your crews and use your own.

Subscribe on YouTube@sagnikteaches

It also explains why a flat rate per square foot misleads. Two 8,000 square foot buildings can need very different hours, because washrooms, kitchens and hard floors take longer per square foot than open carpet. If you price both at the same rate, one contract subsidises the other and you will not see which.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

The task sheet: quantity, rate and visits per week

The core of the calculator is a table with one row per task. For each row you record how much there is (square feet, fixtures or bins), how fast your crew works, how long one occurrence takes, and how many times a week it happens. Visits per week are not the same as task frequency. In the example below the crew visits five nights a week, but the carpet is vacuumed three times and the desks are wiped once, which is how real contracts are written.

Here is a single-floor office of 8,500 square feet (illustrative): 6,000 square feet of carpet, 1,500 of hard floor, two washrooms with 12 fixtures in total, a kitchenette, 46 bins, 30 workstations and some interior glass.

TaskQuantityRateMinutes each timeTimes a weekMinutes a week
Empty and reline bins46 bins100 an hour27.65138.0
Vacuum carpet6,000 sq ft4,000 sq ft an hour90.03270.0
Mop hard floors1,500 sq ft4,000 sq ft an hour22.55112.5
Clean washrooms12 fixtures3.5 minutes each42.05210.0
Kitchenette112 minutes12.0560.0
Dust and wipe workstations30 desks1.2 minutes each36.0136.0
Spot-clean interior glass120 minutes20.0120.0
Total846.5

The 4,000 square feet an hour for mopping is slower than ISSA's 5,355 example because this crew works round desks and corners. That is the point of timing your own people: the published figure tells you the ballpark and the stopwatch tells you the truth. Add a 10% allowance on top of the task minutes for set-up, collecting supplies, locking up and walking between floors, which brings the week to 931 minutes, or 15.5 hours.

If you add robotic floor equipment, only the hard-floor and carpet rates change, which is why the sheet keeps rates in their own column. Leasing or buying a floor cleaning robot looks at the numbers behind that decision.

Loaded labour, supplies and overhead

Hours turn into money through four costs. Each is an input you can point to in your books.

CostIllustrative inputWhere it comes from
Loaded labour$20.88 an hour$18.00 wage × 1.16 payroll burden
Overhead20% of loaded labourCompany overhead divided by total direct labour cost across all contracts
Supplies and equipment$5.00 a visitChemicals, liners, mop heads, vacuum bags and equipment wear
Weeks per month4.3352 ÷ 12

Loaded means the wage plus what employing someone adds, such as payroll costs, insurance and holiday accrual; your payroll provider or accountant has the real percentage. Overhead covers the supervisor who inspects, the vehicle, insurance, software, recruitment and the office. Paper products and soap are better billed at cost plus handling, or left to the client, than buried in the monthly price.

The weeks-per-month line catches a surprisingly common slip. Multiplying weekly hours by 4 instead of 4.33 undercounts the month by about 8%. For this office that is 62.1 hours instead of 67.3, and a price of $1,957 instead of $2,110. Over a year that is a loss of about $1,830 on a single contract, and no line in the quote looks wrong.

Margin first, then the price that follows

Decide the profit you need after overhead and express it as a share of the price. The price is then cost divided by one minus that share. Markup works differently and gives a lower margin than people expect:

Margin on priceEquivalent markup on cost
10%11.1%
15%17.6%
20%25.0%
25%33.3%
30%42.9%

Now the office. With a 15% target margin on price, the sums run as follows. Monthly hours are 15.52 × 4.333 = 67.25. Labour is 67.25 × $20.88 = $1,404. Overhead at 20% is $281. Supplies are 21.7 visits × $5 = $108. Cost is $1,793. Price is $1,793 ÷ 0.85 = $2,110 a month.

Had you added a 15% markup instead, the price would be $2,062. That looks close, but the margin is 13.0% and you give away $47 a month, about $570 a year, on one contract. Multiply that by every contract you hold.

Read the result from several angles. It is $97.38 a visit, about $0.25 a square foot a month, and $31.38 of revenue for every labour hour. Those four figures are what you compare with other quotes and with what the client pays now.

Quote sanity checks before it goes out

A calculator can produce a tidy wrong answer, so check the result against the world before you send it. Six checks cost two minutes:

CheckOffice resultWhat it catches
Revenue per labour hour against the floor of loaded labour × (1 + overhead) ÷ (1 − margin)$31.38 against a floor of $29.48A price that fails to cover the cost stack
Hours per visit15.52 ÷ 5 = 3.1 hoursA crew size that cannot fit the building's access window
Overall speed8,500 ÷ 3.1 = about 2,740 sq ft per labour hourA speed far outside your own range for similar sites
Price per square foot a month$0.25A figure out of line with your other offices
Washroom share of task time210 of 846 minutes, 25%A fixture-heavy site priced like open plan
Margin if the crew runs 15% slow15.0% falls to 3.0%A cushion too thin to survive a bad month

The 3.1 hours matters in practice. If the building is open to cleaners only from 6 to 8 p.m., a 3.1-hour visit needs two cleaners for about 1.55 hours each, and your price must reflect two people travelling and two sets of keys. The calculator's hours are the same, but the rota is not.

Three nights or five: frequency does not scale evenly

Clients often ask for a discount "because we only need you three times a week". Run it through the sheet. Bins, washrooms, kitchen and hard floors drop to three times a week, vacuuming stays at three, and the weekly desk and glass jobs stay at one:

Five visits a weekThree visits a week
Task minutes a week846.5638.3
Hours a month, with allowance67.2550.71
Cost$1,793$1,336
Price at a 15% margin$2,110$1,570
Price per visit$97.38$120.87

Three visits is three-fifths of the visits but 75% of the hours, so the price falls by about 26%, not 40%. The tasks that do not depend on visit count stay, and each visit carries its own supplies. Someone asking for 40% off is asking you to cut the price by more than your hours fall. Show the client this table, or the two lines of it that matter, and offer the 26% reduction as your honest number.

When the client's budget is below your price

Sooner or later a client says the number is too high. The wrong answer is a discount, because a discount takes margin and leaves the scope untouched. The right answer is a scope menu, with each option priced from the sheet. Taking tasks out of the monthly figure one at a time gives you:

Scope changeMinutes saved a weekPrice falls by (a month)
Vacuum twice a week instead of three times90$211
Mop hard floors three times instead of five45$105
Clean the kitchenette three times instead of five24$56
Wipe workstations fortnightly instead of weekly18$42
Spot-clean interior glass fortnightly10$23

Take the first two and the price drops by $316 to $1,794, a 15% cut. Now compare that with simply cutting the price by 15% and keeping the scope. Your margin was 15%, so the new price would equal your cost and the profit would be zero. A price cut of any size leaves a much thinner margin than the percentage suggests: a 10% cut turns a 15% margin into 5.6%. Offer the menu, let the client choose, and keep every task you drop in writing so the cleaners and the client both know what has changed.

A 2,000 square foot unit and the minimum visit

Small sites break the arithmetic from the other direction. Take a retail unit of 2,000 square feet, cleaned twice a week: eight bins, 1,600 square feet of carpet, 400 of hard floor, a washroom with three fixtures, a staff area and glass doors. The task minutes total 56.3 a visit, which is 61.9 with the allowance, barely an hour.

Priced straight from the formula, that is $315 a month, or $0.157 a square foot. But nobody should drive to a site, park, let themselves in, clean for an hour and lock up for one hour's pay. Set a minimum paid visit of 1.5 hours, which is a rule you choose from your own travel and set-up, and the sheet takes the larger of the formula's hours and the minimum. The price becomes $434 a month ($0.217 a square foot), 38% more than the formula.

That looks high on a per-square-foot basis and is correct. Every small site contributes the same unavoidable 1.5 hours, so a small site always costs more per square foot than a large one.

A 9,000 square foot building with 28 fixtures

Here is how a gut figure goes wrong. You priced the 8,500 square foot office at about $0.25 and it went well, so you quote the next building, 9,000 square feet, at $0.30 a square foot for a margin of safety, which is $2,700 a month. Then you build the task sheet. The building has four washrooms and 28 fixtures, a larger kitchen, 36 desks and 50 bins.

The sheet says 22.9 hours a week, or 99.2 a month. Labour is $2,071, overhead $414, supplies $108 and cost $2,593. At the quoted $2,700 the margin is 4.0%, not 15%. To hit the target you need $3,051, or about $0.34 a square foot. The 16 extra fixtures, the bigger kitchen and the extra desks are the difference, and nothing in a per-square-foot rule would have told you so.

The fix is to build the task sheet before you name a price, every time. A short walk-through collects what the sheet needs: areas by floor type, fixtures, bins, desks, glass, access hours and anything unusual such as a canteen or shower block.

Periodic work belongs on its own lines

Do not bury carpet extraction, strip and wax, high dusting or window cleaning in the monthly price. They occur a few times a year, take large blocks of time and may be done by a different crew. Quote each as a priced occurrence with its own hours, so the client can say yes or no to each.

For example, extracting the 6,000 square feet of carpet at 700 square feet an hour plus an hour of set-up is 9.6 hours. At the same loaded labour and overhead, plus $120 of chemicals and $60 of machine wear, the cost is $420 and the price at 15% margin is $494, which you would quote as $495 a clean. Twice a year is $990, or $82.50 a month if the client prefers it spread across the invoices. A start-up clean is another one-off line: if a new building needs about two and a half times a normal visit's hours, that is 7.8 hours, a cost of $214 with $20 of supplies and a price of $252, quoted as $250. Say in the quote what the monthly price assumes about the building's starting condition. For the window lines of a contract, pricing commercial window cleaning per pane works the same way from pane counts.

The walk-through: what to capture and how AI can tidy the notes

A quote is only as good as the quantities that go into it, and those come from the visit. Collect these before you leave:

  • Floor areas by type: carpet, hard floor, entrance matting. Measure or take them from a plan; never estimate by eye in a building you have not walked.
  • Fixtures (toilets, urinals, basins, showers), bins, kitchen equipment and shared appliances.
  • Workstations, meeting rooms and glass partitions.
  • Access: opening hours, key and alarm arrangements, lifts, floors, loading limits.
  • Who supplies paper, soap and liners, and what the client expects the finish to be, in their own words.

Notes dictated on the move are messy, and an assistant can sort them into task rows if you fence it in. The fence is to leave the rates and minutes to you:

Turn these walk-through notes into rows for my task sheet: task, quantity, unit,
visits per week (if stated). Do not add production rates or minutes; I supply
those. If a quantity is approximate or missing, keep my words and add [CHECK].
List anything the notes imply but do not state as questions at the end.
Notes: front office carpet approx 6k, reception tile, two washrooms (3 WC + 3
basins each), kitchen w dishwasher, bins everywhere, 30ish desks, glass wall to
boardroom, open 6-9pm only, alarm code from manager, client wants daily.

A good reply (illustrative) keeps the doubt visible:

TaskQuantityVisits a weekFlag
Vacuum carpet"approx 6k" sq ftnot stated[CHECK: measure it]
Mop reception tilearea not givennot stated[CHECK: area]
Clean washrooms12 fixtures (2 washrooms × 3 toilets and 3 basins)"daily"[CHECK: five or seven nights?]
Kitchen1 kitchen with dishwashernot stated[CHECK: is the dishwasher in scope?]
Bins"everywhere"not stated[CHECK: count them]
Workstations"30ish" desksnot stated[CHECK: count]

The failure to watch for is a reply that quietly turns "approx 6k" into 6,000, "30ish" into 30 and "daily" into seven nights, because that is the tidy version. The last one is worth money. Run the office with daily meaning seven visits and the price rises from $2,110 to about $2,648, an extra $539 a month or 25%. Nobody should discover that difference after signing. Ask the client which nights they mean, in writing, before the sheet takes the number.

One prompt for the margin workbook, one to audit the quote

Any assistant that can produce spreadsheet formulas will do: ChatGPT, Claude, Gemini or Copilot, depending on your plan. Give it the structure and the inputs, and keep the production rates as your own. This prompt asks for the whole workbook:

Build a commercial cleaning margin calculator for Excel or Google Sheets.
Tabs: Inputs, Tasks, Quote. Plain formulas only; no AI functions inside cells.

Inputs: wage 18.00; payroll burden 16%; allowance for set-up, supplies and
locking up 10%; overhead 20% of loaded labour; supplies and equipment per
visit 5.00; weeks per month = 52/12; minimum paid visit 1.5 hours; target
profit margin 15% (profit divided by price, NOT markup on cost).
Tasks: one row per task with quantity, production rate (or minutes per unit for
fixtures and bins), minutes per occurrence, occurrences per week, weekly minutes.
Quote: visits per week (input); weekly hours = task minutes plus allowance, but
never less than visits x minimum visit; monthly hours; labour; overhead;
supplies; cost; price at target margin rounded to the nearest 5; price per
visit; revenue per labour hour; a cell saying LOW if revenue per labour hour
is under loaded labour x (1 + overhead) / (1 - margin).
Add a stress cell: margin if task time is 15% longer.
List every formula. Then give me two test buildings with answers worked out
step by step so I can check them by hand.

A first reply (illustrative) usually looks right. These are the lines to read closely:

Inputs!B9    Loaded labour per hour     =B2*(1+B3)
Tasks!D5     Minutes (area task)        =B5/C5*60
Tasks!D9     Minutes (count task)       =B9*C9
Tasks!F5     Weekly minutes             =D5*E5
Quote!B3     Weekly hours               =MAX(SUM(Tasks!F5:F30)*(1+Inputs!B4)/60,B2*Inputs!B8)
Quote!B4     Monthly hours              =B3*Inputs!B7
Quote!B5     Labour cost                =B4*Inputs!B9
Quote!B6     Overhead                   =B5*Inputs!B5
Quote!B7     Supplies and equipment     =B2*Inputs!B7*Inputs!B6
Quote!B8     Cost                       =B5+B6+B7
Quote!B9     Price per month            =MROUND(B8/(1-Inputs!B10),5)
Quote!B10    Revenue per labour hour    =B9/B4
Quote!B11    Check                      =IF(B10<Inputs!B9*(1+Inputs!B5)/(1-Inputs!B10),"LOW","OK")

Five mistakes recur in first drafts. Weekly hours are multiplied by 4 instead of the weeks-per-month cell. The price formula adds the margin to cost as a percentage, which is markup by another name. Overhead is applied to supplies as well as labour, or left out altogether. The MAX for the minimum visit is missing, so the retail unit prices at $315. And a fixture row uses the area formula, which divides a count by a rate it does not have. Enter both test buildings and compare each result with the assistant's hand-worked figure and your own sum. Do not paste client names or contract details into a consumer chat; using Claude with Excel and Google Sheets safely covers what to leave out.

A second prompt turns the assistant into a reviewer. Paste the task table and the cost summary, without names, and ask it to find problems rather than rewrite anything:

Review this commercial cleaning quote for errors and weak assumptions. Do not
rewrite it. List each problem with the line it affects and why it matters.
[paste task table, cost stack and price]

A reply on the office quote might say that weekly hours are multiplied by four, that vacuuming has no allowance for furniture, that the washroom time assumes no deep clean, and that no minimum visit is stated. Treat the first point as a spreadsheet error to fix and the others as questions to answer from the site. The assistant cannot see the building. It checks the logic, and the rates stay yours. If you want the document that carries the price, drafting a commercial cleaning proposal comes next, and ChatGPT prompts for quotes, rotas and complaints has more prompts for the same business.

Commercial cleaning pricing questions

Should I quote commercial cleaning per square foot?

Quote the building from hours, then express the result per square foot if the client asks. A flat rate per square foot ignores washrooms, frequency and floor types, which drive most of the labour. Use the figure only as a sanity check against your own range for similar buildings, never as the starting point.

What margin should a commercial cleaning contract carry?

That depends on your overheads and how steady the contract is, so work it out from your own accounts rather than copying a number. Decide the profit you need after overhead, express it as a share of price, and divide your cost by one minus that share. Review it at each renewal.

Where do I get production rates for the task sheet?

Time your own crews on real tasks, then cross-check against published benchmarks such as ISSA's cleaning times, which ISSA itself describes as bidding guides rather than time-motion studies. Do not take a rate from an AI chat reply, because it will sound confident and have no source behind it.

How do I price a first deep clean separately?

Treat it as a one-off line with its own hours, not as part of the monthly price. Estimate the extra time against the maintenance sheet, cost it with the same loaded labour and overhead, and add the same margin. Say in the quote what the monthly price assumes about the building's starting condition.

Further reads

Sources: ISSA article 'How to Calculate Cleaning Times' (June 2022), for the cleaning-time formula, its worked examples and its guidance on benchmarks and time studies.

Want a quoting sheet your estimator can run?

On a 1:1 call we can go through your task times and overheads, decide which parts of the quoting process an AI assistant should handle, and set up checks that catch bad quotes early.

Book a 1:1 call with me