Skip to content

Answers · Commercial cleaning

Janitorial job costing by building: which cleaning accounts actually make money

Janitorial job costing answers one question the company-wide profit and loss statement cannot: which buildings earn money and which ones quietly cost it. It can be done by hand from three exports the office already has — payroll hours by building, the hours each bid assumed, and the revenue invoiced per building — and the first finding may not be a number at all but the hours that carry no building code. Software can track it, but it does not have to start there. This guide shows the by-hand version: why one margin hides the buildings, the three exports, the unassigned hours, the columns of the sheet, how to read the result, and how to keep it monthly.

By , founder of Lumina Business Advisory · Updated · Sources checked · Editorial standards

Why one company-wide margin hides the buildings

Free self-check · two taps · no email

Hand-off 6 of 6 · Payment → Margin

If deposits stopped today, how many days could cash cover payroll and bills?

Choose the answer that sounds like your business.

Answer it in the Self-Audit

A profit and loss statement adds every building together. A company can show a healthy margin while two or three accounts lose money every month, carried by the buildings that were bid well. Nothing on the statement says which is which, so the owner prices the next bid and the next renewal from the average.

The gap can start at the walkthrough without anyone making a mistake. Steven Pahl, who described more than 20 years in commercial cleaning on an Alignable owner forum in 2018, bid a store at the hours the cleaning took and found afterwards that “it took additional 45 min to take the trash to the dumpster.” Hours like those never show up as a loss on the statement. They show up as payroll, spread across the company.

For an outside reference, there is one government figure worth knowing. In the Census Bureau’s 2022 Statistics of U.S. Businesses, the 8,828 janitorial-services employer firms with receipts of $1 million to under $100 million reported annual payroll equal to about 42 percent of their receipts. That ratio is our arithmetic from the published table; it counts compensation paid to employees, not the employer’s own payroll taxes and insurance on top, and it covers every kind of janitorial-services employer in the industry code. It is a sense of scale, not a benchmark. The benchmark that matters is each building against its own bid.

Three exports, one spreadsheet

Pick the last full quarter, so every shift has been paid and every invoice has gone out. Then pull three exports and put each building on its own row.

  • Payroll hours by employee and by job or building code, with the hourly rate, from the payroll provider or the timekeeping system. Include overtime as its own column.
  • The bid sheet for each building: the hours a week it assumed, the frequencies, the wage rate it was priced on, and the monthly price that resulted.
  • Invoiced revenue per building for the same quarter, from the accounting system: the recurring amount plus every extra billed, kept as separate columns.
  • Supplies by building, if the company tracks them that way. If it does not, leave the column empty for now rather than guessing.

Three columns of numbers per building is enough to start. Software that already holds job codes and budgets can produce the same view, provided every hour was coded and every budget was updated after the last scope change. The by-hand version is a way to check that the software’s view is complete.

The hours with no building on them

When the payroll hours are added up by building code, some of them may belong to no building at all. Whatever share does is itself the finding. It shows where the company cannot yet see its own costs.

List the uncoded hours by type before deciding what to do with them. Spreading them evenly across every building is the tempting shortcut, and it hides exactly the information the exercise is meant to find: which buildings are drawing on hours nobody budgeted.

  • Supervisor cover: the area supervisor who fills in for a call-off at one building, two nights a week
  • Floater and relief cleaners scheduled where they are needed that night
  • Floor crews on weekends doing strip and wax, extraction or post-construction cleans
  • Training shifts, where a new cleaner works beside an experienced one on a specific route
  • Travel between buildings for crews and supervisors who cover several sites in one shift

Hours like these can be assigned after the fact from the schedule, the supervisor’s texts or the floor crew’s calendar. What cannot be assigned goes on its own line, and the size of that line is the first number to bring down next quarter.

Janitorial job costing, column by column

For each building, the sheet needs a short set of columns. Each one comes from a record, not from memory.

  • Revenue: recurring invoices plus extras billed for the quarter
  • Hours bid per week, and hours paid per week, supervisor cover and assigned floater hours included
  • Wages: hours paid times the rates actually paid on that building
  • Labor burden: payroll taxes and workers’ comp at the company’s own rates, from the payroll provider and the insurance policy, not from a rule of thumb
  • Supplies, where tracked
  • Contribution: revenue minus wages, burden and supplies, in dollars and as a share of revenue

Illustrative example: three buildings each bill $10,000 a month. Building A was bid at 90 hours a week and pays about 88; Building B was bid at 90 and pays about 104, mostly supervisor cover and a longer trash run; Building C was bid at 70 and pays about 72, but its rate rose from $13 to $15 since the bid. All three look alike on the invoice register. Sorted by contribution, B sits at the bottom, C in the middle and A on top, and each one needs a different conversation. The numbers are invented for the example; the company’s own rows are the only ones that count.

Reading the result: hours, rate or scope

A building at the bottom of the sheet got there for one of a few reasons, and the reason decides the fix.

Paid hours above bid hours is a scope or a workload question. Either the building changed since the walkthrough — new tenants, more restrooms, a longer route to the dumpster — or the bid was thin from the start. The fix is a walkthrough with the property manager and a revised spec, priced as scope.

Hours on budget at a higher wage rate is a price question. Wages moved, by law or by the labor market, and the price did not. That is the case for a price increase letter, built from the building’s own wage rows.

Extras done and not billed is a billing question. If the floor crew’s weekend hours sit against a building whose invoice shows no extra for the same month, the gap is between the hallway request and the office.

And some buildings lose money at any reasonable price. One cleaning company, answering a 2017 Alignable thread on why cleaning companies underbid, said simply: “they have no idea of their costs.” A building priced that way, by anyone, will not be fixed by better supervision. Its options are a new price at renewal, a smaller scope, or letting it go at the next rebid.

Making it a monthly number

The by-hand exercise is worth doing once to see the shape of the problem. Its real value comes when it repeats without anyone rebuilding it.

  • Every shift carries a building code in timekeeping, including supervisor cover and floater hours. A shift with no code is sent back before payroll closes.
  • Every bid’s hours are entered as the building’s budget when the contract starts, and updated whenever the scope changes.
  • Every extra gets a slip with a building and a price, or an owner’s written decision to do it for nothing.
  • Once a month, the owner sees paid hours against bid hours for every building, and the three buildings with the lowest contribution, set against their own previous months.

The trend is the benchmark. A building that slips two months in a row is a conversation to have now, not at the rebid.

When this does not need outside help

A company with a few buildings, an owner who still walks each one and payroll that already codes every hour can run this in an afternoon and repeat it monthly. If the software already shows budgeted against actual hours by job, and every hour is coded, the work is reading the report, not building one.

An outside review earns its fee when the records do not connect: payroll with no building codes, bids kept in someone’s email, extras agreed in a lobby, contracts past their anniversary at the walkthrough price, payroll due weeks before the client pays. Our Revenue Review takes two weeks. It reads the company’s payroll export, bid sheets, invoices and contracts, read-only, and prices each building’s gap as a monthly dollar figure where the records support one. It grades no supervisors, gives no accounting, tax or legal advice, and leaves every pricing and staffing decision with the owner. We do not run a cleaning company, and there are no client case studies on this site yet.

If it is unclear whether any of this is worth a fee, start with a free 20-minute call, where a company too small for the arithmetic is told so.

Before any next step

What should you do next?

Fix it yourselves.
If the cause is clear, it lives inside one process, and one person can own it — take the play from this page and run it. That outcome is fine with us; it is why the play is published in full.
Order one bounded build.
If the fix is known but needs configuration or integration inside your stack — a cadence wired into your own system, an alert, a handoff — scope that one build, with us or with anyone you trust. The six systems we build show what bounded looks like.
Start with the Review.
If the causes are debatable, the problem crosses departments or systems, or the economics are unclear — diagnose before anyone builds. The Revenue Review: $4,500 fixed, two weeks, computed from your own records. Read a sample finding before you decide — free, no email.

Asked right after

How do you calculate profit on a commercial cleaning account?
Take the account’s invoiced revenue for a full quarter, extras included. Subtract the wages actually paid on that building (hours paid times rates paid, supervisor cover included), the payroll taxes and workers’ comp at the company’s own rates, and supplies where tracked. The remainder is the building’s contribution before overhead.
What is a good profit margin for a commercial cleaning company?
The useful answer is the company’s own margin by building, read against its own previous quarters. The margin ranges we read on software-vendor and coaching sites had no primary source behind them. The one government reference: in Census 2022 data, janitorial firms with $1 million to under $100 million in receipts reported payroll equal to about 42 percent of receipts.
What is janitorial job costing?
Tracking revenue and cost per building or per contract instead of only for the company as a whole. In practice it means every payroll hour carries a building code, every bid’s hours become that building’s budget, and every month the paid hours are set beside the bid hours and the revenue.
How do I know which cleaning accounts are losing money?
Sort the buildings by contribution after wages, burden and supplies, and read the bottom three. Then check why: paid hours above bid hours, a wage rate that rose while the price stayed, or extras done and never billed. Each reason has a different fix.
Do I need job costing software to do this?
Not to start. Three exports and a spreadsheet show the picture for one quarter. Software helps when it is kept complete — every hour coded, every budget updated after a scope change — and the by-hand version is a good way to check that it is.

The next step

Bring us the process that keeps getting stuck.

A 20-minute conversation about the workflow, the teams and the systems involved — and a straight answer on whether The Revenue Review is the right next step. If it is not, we say that on the call.

A real person answers or calls you back the same business day.

Free self-check · 2 taps