Free tool

Contract profitability check

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.

0% margin
—
Revenue—
Labor—
Supplies—
Other—
Total cost—
Profit per month—

—

What would have to change

Two honest levers, and one number that tells you how far off you are.

Lever one

Raise the price

—

Lever two

Reduce the hours

—

Reality

Revenue per labor hour

—

Over a year

Annual impact

—

The gap between the bid and the job

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.

Common questions

What margin should I be targeting?

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.

Should company overhead be in "other costs"?

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.

My margin is negative. Do I fire the client?

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.

Why does using the raw wage instead of the loaded rate matter so much?

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.

More free tools

All free, all in your browser, none of them ask for an email.

The app

Know this for every account, not just this one.

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 →