Guides / Bidding
How to bid a commercial cleaning contract
A janitorial bid is mostly a labor estimate. Get the hours right, load them with your real labor cost, and the price follows. Here is the method SweepMath uses, so you can check every number it gives you.
1. Walk the building and measure cleanable area
Split the building by space type, because each type cleans at a different speed: offices, lobbies and corridors, break rooms, restrooms, and any specialty space. Record cleanable square feet for each. For restrooms, count fixtures (toilets, urinals, sinks) as well.
2. Turn area into labor minutes
ISSA's published method is: square feet ÷ production rate (sq ft per hour) × 60 = minutes. Its example: mopping 1,000 sq ft at 5,355 sq ft per hour takes about 11.2 minutes (ISSA).
Restrooms work better by fixture: fixtures × minutes per fixture. ISSA's example uses 3 minutes per fixture, so a 10-fixture restroom is 30 minutes (ISSA).
Add every area's minutes to get minutes per visit. See the production rates guide for starting rates and their sources.
3. Add supervision, then convert to monthly hours
If a supervisor or lead spends part of each shift inspecting, add that as a percentage of hours. Monthly hours are hours per visit × visits per week × 52 ÷ 12. Using 52 ÷ 12 (about 4.33 weeks a month) avoids under-counting months with five service weeks.
4. Load the wage
The wage is not your labor cost. Add employer payroll taxes, workers' compensation insurance and any benefits as a "burden" percentage. Loaded rate = wage × (1 + burden %). For reference, the BLS reports a May 2025 median of $17.71 per hour for janitors and building cleaners (BLS); use what you actually pay in your market.
5. Add supplies
Either as a percentage of labor cost or as dollars per square foot per month. Track what you actually spend on similar accounts and use that.
6. Set overhead and profit as a share of price
Overhead (insurance, vehicles, office, sales time) and profit are usually expressed as a percentage of the price, not of cost. That gives two prices:
- Break-even = direct cost ÷ (1 − overhead %). Below this you lose money on every visit.
- Price at target = direct cost ÷ (1 − overhead % − profit %).
Direct cost is loaded labor plus supplies. Adding a markup to cost instead of dividing by (1 − %) is a common way to end up below your target profit.
7. Check the quote you actually plan to send
Market pressure often pushes the quote below the target price. Before you send it, compute your profit at that price: profit % = (price − direct cost − overhead % × price) ÷ price. Then ask what happens if the crew is 10% slower than planned. If that already puts you near zero, the bid is fragile.
Worked example
This is the sample bid built into the calculator. The inputs are illustrative; replace them with yours.
| Area | Size | Rate | Minutes / visit |
|---|---|---|---|
| Offices | 14,000 sq ft | 3,289 sq ft/hr | 255.4 |
| Lobby and corridors | 3,000 sq ft | 5,000 sq ft/hr | 36.0 |
| Break room | 800 sq ft | 2,800 sq ft/hr | 17.1 |
| Restrooms | 16 fixtures | 3 min/fixture | 48.0 |
That is 356.6 minutes, or 5.94 hours, per visit; with 5% supervision, 6.24 hours. At 5 visits a week that is about 135 hours a month. With a $17.71 wage, 18% burden, supplies at 5% of labor, 15% overhead and a 12% profit target, the calculator gives a break-even of about $3,490 and a recommended price of $4,065 per month. If the crew runs 10% slower than planned, profit at that price falls to 3.9%. Open the calculator and load the sample bid to see every line.