How to Price a Commercial Cleaning Contract (Janitorial Bids)
Price a commercial cleaning contract by turning the building into hours, not by guessing a price per square foot. Walk the site, divide the cleanable square footage by a production rate (how many square feet a cleaner covers in an hour), add timed tasks like restrooms and kitchens, and multiply by the number of visits in a month. Cost those hours at a loaded labor rate, add supplies and overhead, set your margin, and quote one monthly price. Then check the hours your crew actually works against the hours you bid, because a janitorial contract is only as profitable as its real nightly time. CRMb puts the hours each cleaner punches at a building onto that building's job at their own rate, so you can see the margin on every account while the contract runs.
Residential cleaning is priced visit by visit. Commercial cleaning is different: you are bidding a recurring contract, often for a year, for a building you will clean hundreds of times. A small mistake in the hours per night repeats every night. Bid 45 minutes short on a five-night office and you have given away more than 16 hours of labor a month, for as long as the contract lasts. For one-off and residential cleans, see how to price a cleaning job. This guide is about the recurring commercial account.
Why commercial cleaning is priced by the month
Facility managers buy cleaning as a fixed monthly line in their budget. They want one number, one invoice, and a scope that does not change unless someone signs a change. That suits you too, if the number is right: a monthly contract is predictable revenue you can schedule a crew around.
The trap is that the monthly number hides the math. A building owner sees "$6,700 a month." You need to see "167 cleaner-hours, at a loaded $22.50, plus supplies and overhead, at a 25% margin." If you cannot rebuild your monthly price from hours, you cannot tell whether a contract is making money, and you cannot defend the price when the customer asks you to sharpen your pencil.
So every commercial bid follows the same order:
- Measure the building and define the scope.
- Convert the scope into hours per visit.
- Convert hours per visit into hours per month.
- Cost the hours, supplies and overhead.
- Set the price from the cost and your margin.
- Sanity-check the price per square foot and per hour.
- Track real hours against the bid once the contract starts.
Step 1: Walk the building and write the scope
Never bid a commercial account from a floor plan and a phone call. Walk it, ideally at the time of day you would clean it. Use a job site walkthrough checklist and record:
- Cleanable square footage by space type. Open offices, private offices, conference rooms, corridors, lobbies, break rooms, restrooms, stairwells. Exclude storage rooms and mechanical spaces you will not touch.
- Floor types. Carpet vacuums faster than hard floor that needs damp mopping. Note any floors that need periodic work such as stripping and waxing, which you will price separately.
- Fixture counts. Toilets, urinals, sinks, and showers in each restroom. Restrooms are timed by fixture, not by square foot.
- Trash points. The number of desks and bins drives how long trash runs take more than floor area does.
- Frequency. Five nights a week, three nights, weekly. Different areas often have different frequencies: restrooms nightly, offices dusted weekly.
- Access and constraints. Alarm codes, keys, working hours, elevators, where the closet and water source are.
- Who supplies consumables. Liners, paper towels, toilet tissue, hand soap. Decide whether they are included in your price or billed as used.
Then write it down as a scope of work: every task, by area, by frequency. The scope is what you are pricing. Without it, "clean the office" becomes whatever the tenant asks for this week.
Step 2: Turn square footage into hours with production rates
A production rate is how many square feet one cleaner can clean in an hour for a given type of space and level of service. It is the single most important number in a janitorial bid.
Commonly cited ranges for routine nightly cleaning look like this. Treat them as a starting point to test against your own crews, not as fixed figures:
| Space type | Typical production rate |
|---|---|
| General open office, mostly carpet | 2,500 – 4,000 sq ft per hour |
| Private offices, heavy furniture | 1,800 – 2,800 sq ft per hour |
| Corridors and lobbies | 4,000 – 6,000 sq ft per hour |
| Classrooms | 2,000 – 3,000 sq ft per hour |
| Medical and clinical spaces | 1,000 – 2,000 sq ft per hour |
| Restrooms | Timed per fixture, often 3 – 5 minutes each |
The formula is plain:
Hours per visit = cleanable square feet ÷ production rate, plus timed tasks.
Two cautions. First, published rates assume an experienced cleaner with the right equipment. A new crew with an upright vacuum will be slower than a trained one with a backpack vacuum. Second, your own numbers beat any table. After a few months of punched hours, you will know your real rate for each kind of building, and that is the rate to bid with next time. This is the same discipline as estimating labor hours for any job: start from a benchmark, then replace it with your history.
Step 3: Convert hours per visit into hours per month
Commercial contracts are priced monthly, but months are not equal. Use the average:
Visits per month = visits per week × 52 ÷ 12.
Five nights a week is 21.67 visits a month, not 20. Bidding on 20 drops more than a full visit's hours from your labor cost every month. Three nights a week is 13 visits a month. Once a week is 4.33.
Monthly hours = hours per visit × visits per month.
If parts of the building are cleaned on different frequencies, calculate each one separately and add them together.
Step 4: Cost the hours, supplies, and overhead
Labor. Multiply monthly hours by a loaded labor rate: the wage plus payroll taxes, workers' compensation, and other costs that rise with every hour worked. A cleaner paid $18 an hour can easily cost you $22 to $24 once those are added. If you do not know your number, work it out with how to calculate a labor burden rate. Labor is usually the largest cost in a janitorial contract by a wide margin, so this is the number to get right. Labor cost as a percentage of revenue is the check that tells you whether it is under control across the business.
Supplies. Chemicals, liners, microfiber, and consumables. Estimate a monthly amount from the building's size and traffic, cost it at what you actually pay, and decide how paper and soap are handled. Many contracts bill paper products separately, because usage depends on the tenant's headcount, not on your crew. If you stock supplies in each building's closet, cost them at average cost so a price increase on one delivery shows up in the job without you reworking the bid.
Overhead. Supervision, vehicles, insurance, equipment wear, software, and your office. Spread it across your work with an overhead rate, usually as a dollar amount per labor hour. Every contract needs to carry its share.
Periodic work. Carpet extraction, floor stripping and waxing, window washing, and high dusting are rarely part of the nightly rate. Price each one as its own line, either folded into the monthly price as an average or quoted separately when it is done. Leaving them in the base scope "because the customer expects it" is how a profitable account turns into a loss in the month you strip the floors.
Step 5: Set the price from cost and margin
Once you have the total monthly cost, price to a margin, not a markup:
Monthly price = total monthly cost ÷ (1 − target margin).
A 25% margin on $5,000 of cost is $6,667, not $6,250. Pricing with a 25% markup gives you a 20% margin instead, and the gap repeats every month for the length of the contract. Markup vs margin walks through why the two numbers are different.
What margin to target depends on your market and the account. Larger accounts with long terms and predictable work often carry thinner margins; small offices, short terms, and buildings with difficult access should carry more. Whatever you pick, decide it before you look at what you think the customer will pay.
Step 6: Sanity-check per square foot and per hour
Two numbers tell you whether your bid is in a sensible place.
Price per square foot per month. Divide the monthly price by the cleanable square footage. Building owners and facility managers often compare bids this way, so know your own number. It is a comparison, not a pricing method: a building with eight restrooms and a busy break room should cost more per square foot than an empty floor of cubicles, and a bid that ignores that will lose money on the first and overprice the second.
Price per worked hour. Divide the monthly price by monthly hours. This is your effective billing rate, and it should clear your loaded labor rate plus your overhead per hour with room to spare. If it does not, the hours are wrong or the price is.
A worked example: a 20,000 sq ft office, five nights a week
A property manager asks you to bid nightly cleaning for a two-floor office.
The walkthrough.
- 20,000 sq ft cleanable, mostly carpeted open office
- 4 restrooms with 20 fixtures in total
- Cleaned five nights a week
- You supply chemicals, liners, and consumables; paper is billed as used
Hours per visit.
- Office area: 20,000 ÷ 3,000 sq ft per hour = 6.7 hours
- Restrooms: 20 fixtures × 3 minutes = 1.0 hour
- Total: 7.7 hours per night
Hours per month.
- Visits per month: 5 × 52 ÷ 12 = 21.67
- Monthly hours: 7.7 × 21.67 = 167 hours
Cost per month.
- Labor: 167 hours × $22.50 loaded = $3,757.50
- Overhead: 167 hours × $6.00 per labor hour = $1,002.00
- Supplies (chemicals, liners, microfiber): $280.00
- Total cost: $5,039.50
Price.
- Target margin: 25%
- $5,039.50 ÷ 0.75 = $6,719.33, rounded to $6,720 per month
Sanity checks.
- Per visit: $6,720 ÷ 21.67 ≈ $310
- Per square foot per month: $6,720 ÷ 20,000 = $0.336
- Per worked hour: $6,720 ÷ 167 ≈ $40.24, comfortably above the $28.50 that labor and overhead cost per hour
You send one monthly price with a written scope, and a separate line for periodic floor care.
Three months later. The crew is averaging 8.6 hours a night, not 7.7. The tenant added a second break room and a group that works late, so trash runs take longer and the crew starts later. At 8.6 hours, monthly hours are about 186. Labor rises to $4,193, overhead to $1,118, and total cost to about $5,591. Margin falls from 25% to under 17%, and nobody sent you a change order. The price did not move, but the building did.
This is the most common way janitorial contracts lose money: not a bad first bid, but slow drift in nightly hours that nobody measures. The fix is to measure it.
Step 7: Track real hours against the bid, every month
A bid is an estimate of hours. The contract is the real hours. Compare them every month, building by building:
- Bid hours vs worked hours. If a building was bid at 167 hours and the crew worked 186, you know exactly where the margin went.
- Real production rate. Square footage divided by worked hours per visit gives your crew's actual rate in that building. Use it on the next bid for a similar space.
- Supply usage. A building that goes through liners twice as fast as you planned is telling you something about traffic, or about waste. See how to reduce material waste on jobs.
- Margin by account. Rank your buildings by margin, not revenue. Your biggest account is not always your best one. Customer profitability analysis shows how to read that list.
You cannot do this from timesheets typed in at the end of the week, because those hours are not tied to a building. You need each cleaner's hours recorded against the building they were in, at their own pay rate. With Punch, cleaners punch in when they reach the building, and those hours land on that building's job in CRMb at each person's rate, so a supervisor's hour and a new cleaner's hour are costed differently. Planned hours, worked hours, and margin sit together on the job, and Reports show margin across every account.
Contract terms that protect your price
The scope and the price are only half the bid. The terms decide whether the price survives.
Scope changes. State that added areas, added frequency, or added tasks are priced as a change to the contract. When a tenant expands into the next suite, you want a written revision, not an expectation.
Price adjustments. Include an annual adjustment, or a clause that allows you to revisit price when wages or supply costs rise by a set amount. Without it, a multi-year contract is a fixed price against rising costs. When you do need to move a price, how to raise your prices without losing customers covers how to say it.
Payment terms. Commercial customers commonly pay on net 30 or longer, billed monthly in arrears. That means you carry a month or more of payroll before you are paid. Price that in, and read invoice payment terms explained before you agree to anything past net 30. Commercial vs residential contracting covers the wider cash flow difference.
Term and notice. A 12-month term with 30 days' notice to cancel is common. Make sure the notice period covers the time it would take you to reassign or reduce the crew.
Consumables. Say plainly whether paper and soap are included, billed at cost, or billed at a set price per case.
For more on structuring the agreement itself, see recurring maintenance contracts for a service business.
Common commercial cleaning pricing mistakes
- Bidding a price per square foot you heard from someone else. Their buildings, wages, and overhead are not yours.
- Using 20 visits a month for five-night service. The real average is 21.67.
- Costing labor at the wage instead of the loaded rate. The burden is real money every hour.
- Folding periodic floor care into the nightly price without timing it. One strip-and-wax can consume a month's margin.
- Never re-measuring. Buildings change. Tenants move in, desks multiply, hours drift. If you do not compare worked hours to bid hours, you will find out at year-end.
- Scheduling without costing. A crew that is always busy is not the same as a crew that is profitable. Look at revenue per crew hour alongside the schedule.
Frequently Asked Questions
How do you price a commercial cleaning contract?
Measure the cleanable square footage and fixtures, convert them into hours per visit with production rates and timed tasks, multiply by visits per month, then cost those hours at a loaded labor rate. Add supplies and overhead, divide by one minus your target margin, and quote the result as a monthly price with a written scope.
How do you bid a janitorial job?
Walk the building at cleaning time, write a task-by-area scope, calculate hours from production rates, cost the hours, supplies, and overhead, and set the price from your margin. Present it as one monthly price, with periodic work such as floor stripping or carpet extraction as separate lines.
What is a production rate in commercial cleaning?
It is the number of square feet one cleaner can clean in an hour for a given type of space. General office space is often cleaned at 2,500 to 4,000 square feet per hour, while medical spaces and restrooms take much longer. Your own crews' measured rates are more accurate than any published table.
How much should I charge per square foot for office cleaning?
There is no single correct rate, because it depends on frequency, fixtures, traffic, wages, and overhead. Build the price from hours and cost first, then divide by the square footage to get your price per square foot. Use that number to compare bids, not to set your price.
How many visits are in a month for nightly cleaning?
For five nights a week, use 21.67 visits per month (5 × 52 ÷ 12). For three nights, use 13. For weekly service, use 4.33. Using a flat 20 for five-night service underprices every month.
How do you estimate the costs of a cleaning job?
Labor is the largest cost: hours multiplied by a loaded rate that includes payroll taxes and insurance. Add supplies at what you actually pay, overhead at your per-hour rate, and any periodic work. For residential and one-time cleans, see how to price a cleaning job.
Should supplies be included in a commercial cleaning price?
Chemicals, liners, and tools are usually included. Paper towels, toilet tissue, and hand soap are often billed separately, because usage depends on the building's occupants rather than your crew. Whichever you choose, write it into the contract.
Why do janitorial contracts lose money after they start?
Usually because nightly hours drift up while the price stays fixed. Tenants add people, spaces get rearranged, and new tasks creep in without a change to the contract. Comparing worked hours to bid hours each month catches the drift early.
Getting started with CRMb
Bid your next commercial account from hours, not a guess. Walk the building, convert the scope into hours with production rates, cost the hours, supplies, and overhead, and price to a margin. Then measure every month whether the building is taking the time you bid.
CRMb is built for this kind of work. You schedule a nightly visit once and set how often it repeats and when it ends, and CRMb builds the whole series on the schedule. Each cleaner's punched hours go onto that building's job at their own rate, supplies come off each building's closet count at the average you paid, and the margin on the account updates while the crew is still working. See how it fits commercial janitorial companies, and read how to schedule a cleaning crew for the scheduling side. CRMb runs on Mac, iPad, iPhone, and the web. Start your 14-day free trial and price your next contract from real hours.