A bid is a forecast. This is the audit. Put in what an account actually bills and the hours it actually takes — not the hours you assumed when you priced it — and find out what it really earns you. Free, and nothing leaves your browser.
| Revenue | — |
| Labor | — |
| Supplies | — |
| Other | — |
| Total cost | — |
| Profit per month | — |
—
Two honest levers, and one number that tells you how far off you are.
—
—
—
—
Almost every unprofitable cleaning contract was profitable on paper. The bid assumed a production rate, the production rate implied a number of hours, and the price was built on those hours. Then the building turned out to have more restrooms than the walkthrough suggested, the tile needed detail work every night, the customer started asking for the break room fridge, and the crew quietly started staying forty minutes longer.
Nobody rebid the account. The invoice stayed the same. And the margin went somewhere.
This is why the single most valuable number in a cleaning business is actual hours per account, and why so few contractors have it. Payroll knows total hours. The bid knows assumed hours. Almost nobody compares the two building by building — which means the accounts bleeding money look exactly like the ones that are not, right up until the year-end numbers do not make sense.
Run this check on your three biggest accounts using timesheet hours. If the answer surprises you, that is the finding, and it is worth more than any new lead.
Recurring janitorial work is commonly bid at 25–40% on price before company overhead — rent, admin, insurance not tied to payroll, your own time. If you are at 12% on the contract itself, there is very little left once overhead is carried.
Not per-account. Put only costs this specific account causes in "other" — supervision visits, travel, its own equipment. General overhead comes out of the pooled margin across all accounts, which is why a contract-level margin near zero is worse than it looks.
Not as the first move. Establish why the hours exceed the bid — scope creep, an optimistic production rate, or a staffing problem. Then go to the customer with the real numbers and either an agreed scope reduction or a price increase. Contractors are usually far more afraid of that conversation than customers are.
Because the burden is 25–45% of labor, and labor is most of the cost. Check an account at $15 instead of $20.50 loaded and you will see a margin that does not exist. That single substitution is why unprofitable accounts can look healthy for years.
All free, all in your browser, none of them ask for an email.
These tools are single screens of DayPorter, a CRM built for one trade: commercial cleaning. Bids save with the assumptions behind them, contracts sit under the buildings they cover, and what you win rolls up into monthly recurring revenue — so the gap between the bid and the job stops being invisible.
See what DayPorter does →