You quoted $1,800 a month to clean a three-story office building, landed the contract, and then watched the profit evaporate. One cleaner called out and you paid overtime to cover the shift, the supply closet burned through two cases of floor finish you hadn't priced in, and the client added a Saturday trash pull that never made it onto the invoice. By month three, you were doing $21,600 a year in revenue and wondering why the bank account didn't show it.
If that sounds familiar, the issue isn't pricing — it's knowing what each contract really costs you. Cleaning looks like simple recurring revenue from the outside. Inside, it is a labor-heavy, supply-sensitive, route-dependent operation where a few un-tracked hours or a leaky chemical budget decides whether you keep 35 percent margin or 8 percent.
This guide shows how to set up bookkeeping that tells you the truth by contract, pay period, and supply order, so you can bid with confidence and spot losers before they drag the quarter.
Why cleaning bookkeeping is different from other service businesses
Most service businesses sell time. A cleaning business sells clean square feet on a schedule, delivered by a crew, with consumables you provide. That creates three bookkeeping quirks that generic small-business advice misses:
1. Revenue is promised before costs are known. You sign a monthly flat fee, then learn how many hours it actually takes in that building with that tenant mix.
2. Labor is 50 to 70 percent of every dollar. Industry surveys consistently put direct labor — wages, payroll taxes, workers' comp, and benefits — at more than half of total operating cost, and in many commercial portfolios closer to 65 percent. When labor moves one point, margin moves one point.
3. Supplies behave like hidden inventory. Chemicals, paper goods, trash liners, and microfiber don't sit on a retail shelf, but they are a rolling consumable asset. Buy in bulk, stage across jobs, lose track, and your cost of goods sold looks like a rounding error until quarter-end reveals you spent 8 to 12 percent of revenue on products for work billed as "labor included."
Get these three right in the books and almost every other decision — bidding, hiring, routing, supply buying — gets easier.
Build a chart of accounts that mirrors how you actually operate
You don't need 80 accounts. You need a handful that map to decisions you make every week.
Income — split by how you sell
- Recurring Janitorial — Contract (nightly office, common-area, restroom service)
- Recurring Residential/Maid — Contract (weekly, biweekly homes)
- Project Work (strip-and-wax, carpet extraction, post-construction, window cleaning)
- Specialty/Add-Ons (day porter, consumable restocking billed separately, electrostatic disinfection)
Why split: Recurring janitorial typically nets 30 to 50 percent gross margin in healthy operations, project work 50 to 60 percent, and specialty work higher. If you book them all as "Cleaning Income," a profitable wax job masks a losing nightly contract.
Cost of Goods Sold / Direct Costs
- Direct Labor — Cleaning Staff (wages for hours on-site, including travel between jobs when paid)
- Payroll Taxes & Workers' Comp — Direct
- Cleaning Supplies & Chemicals (chemicals, floor finish, pads, liners, paper where you provide them)
- Equipment Consumables & Small Equipment (mop heads, vac bags, sprayers under your capitalization threshold)
- Subcontractor Labor (when you 1099 a crew for overflow)
- Vehicle Mileage / Fleet Fuel (if crews drive your vans between accounts)
Operating Expenses
- Office/Admin Salaries
- Sales & Estimating
- Rent, Insurance, Software (bidding, scheduling, time-tracking, QuickBooks or equivalent)
- Vehicle Lease / Depreciation — Non-allocable portion
- Equipment Depreciation
- Marketing
Tip: Keep owner pay in a separate equity/draw or salary account, not buried in direct labor, or your per-job margin will look better than it is.
Job costing by contract: the one report that decides your bids
If you only build one management report, build this.
What to track for every contract, every month
| Field | Where it lives in the books |
|---|---|
| Billed revenue (monthly fee + billable extras) | Income by customer/project |
| Direct labor hours and cost (regular + overtime, by crew) | Time tracking -> payroll -> COGS |
| Supplies issued to the job | Supply issues from inventory or direct expense coded to job |
| Mileage / travel allocable | Vehicle log coded to job |
| Equipment wear allocation (optional) | Small estimate per hour on floor machines, auto-scrubbers |
Gross profit for the contract = Revenue − Direct costs. Gross margin % = Gross profit ÷ Revenue.
Run this monthly, not quarterly. By quarter, a bad contract has already cost you three months.
How to estimate before you have history
Use production rates, then verify with time tracking. For example:
- General office janitorial often bids at $28 to $50 per hour of cleaning time, higher for medical or industrial.
- Open office, daily service: many estimators start near 2,500 to 3,500 square feet per hour per cleaner for light janitorial, less for restroom-heavy or high-detail space.
A quick example: 15,000 sq ft office, nightly, five nights a week. At 3,000 sq ft per hour, that's 5 hours per night, 25 hours per week, about 108 hours per month. At $18/hour loaded to $23 with taxes and comp, direct labor is roughly $2,484/month before supplies and drive time. Add supplies at 4 to 6 percent of revenue for office work (more if you provide paper), add drive time, add 10 to 15 percent contingency for call-outs and re-cleans, then apply your target margin.
The point is not the square-foot math. The point is having a consistent starting model and then replacing assumptions with your own tracked hours within 60 to 90 days.
The re-bid trigger
Set a rule: any contract below your floor margin for two consecutive months gets a price, scope, or walk decision. Without this rule, you tolerate a loser because "the client might give us more buildings."
Common levers to repair a contract before you fire it:
- Reduce frequency on low-value tasks (e.g., vacuuming perimeter offices three times weekly instead of nightly)
- Convert unpaid extras to billable tickets (Saturday service, initial deep clean, supply restock)
- Re-route to cut drive time or pair with a nearby account
- Swap a two-person crew for one experienced cleaner with the right equipment to cut hours without cutting quality
Payroll-to-revenue: the dial that tells you if you can hire
For cleaning, the payroll-to-revenue ratio deserves its own review cadence.
Healthy benchmarks owners use in 2025–2026 vary by size and niche, but a useful frame is:
- Solo owner-operator still cleaning: total labor including the owner can be 35 to 50 percent of revenue (owner pay is flexible).
- Small commercial team (3 to 10 cleaners): direct cleaning labor 45 to 60 percent, total payroll including admin 55 to 70 percent.
- Larger janitorial (10+ employees with a manager): direct labor pushing past 55 percent is the signal you are overstaffed or underpriced more often than you are inefficient.
Track it two ways:
- Payroll % of revenue this month (pay period payroll ÷ that month's collected or billed revenue — pick one and stay consistent).
- Payroll % over a rolling 3-month average to smooth a seasonal dip. A retailer client's December spike can make January look like a payroll crisis if you read a single month.
How to read movement:
- Ratio rising while revenue flat = hours per job creeping up, overtime, or scope creep without price.
- Ratio rising with revenue flat and headcount flat = wage drift or overtime concentration. Look at overtime as a share of total hours; keeping it under 5 to 8 percent is a common discipline for small teams.
- Ratio falling after a price increase = you finally captured the labor cost — bank it, don't immediately add overhead.
A practical hiring check: Before adding a full-time cleaner at $18/hour (about $3,120/month base before taxes, comp, and PTO), confirm you have $5,500 to $6,500 in new recurring monthly revenue at your target margin to cover the loaded cost and leave room for management time and unbillable hours. Hiring into hope is the fastest way to push the ratio past 70.
Time tracking that actually works for crews
Crews won't log time in a spreadsheet at midnight. Use what they will use:
- Phone-based clock-in/clock-out tied to each building (geofenced if possible).
- One job code per contract, plus a separate "travel" code and "re-clean / callback" code.
- A supervisor review weekly that asks: where did we exceed estimated hours by more than 10 percent, and why?
Code time daily, review weekly, reprice monthly. That loop is what turns time tracking into job costing instead of theater.
Supply inventory tracking that protects margin without wasting half a day counting
You don't need a warehouse system. You need to know three things: what you bought, where it went, and what it cost per dollar of revenue.
The simple method that fits a chemical closet
Step 1: Buy into one account. All cleaning chemicals, liners, paper, gloves, pads go to Cleaning Supplies (asset if you want to treat bulk as inventory, or direct COGS if you expense as used — pick one and stay consistent; larger operators should use the asset method).
Step 2: Issue to jobs. Transfer from bulk to a job when you deliver a case to a building. Even a tote sheet ("12/3 — 1 case liners, 2 gal neutral cleaner → 123 Main St") is enough to start. Code the issue to that job's supplies line.
Step 3: Review cost per revenue. Monthly, compute Supplies as % of revenue overall and for your top three contracts. For general office janitorial where you provide chemicals and liners only, 3 to 6 percent is a common target. If you bundle paper and soap, 8 to 12 percent can be normal — but you should be pricing that bundle explicitly rather than donating it.
Red flags:
- A single contract spiking from 4 to 9 percent supplies in one month: check for over-portioning, theft, or a building using far more paper than your survey assumed.
- Overall supplies drifting up all quarter while revenue is flat: you are buying retail, losing bulk price, or not bidding supply cost into new contracts.
When to track quantities, not just dollars
For your top five SKUs by spend — typically trash liners, toilet tissue, hand towels, neutral cleaner, disinfectant, and floor finish — track units on hand at month-end. You are not chasing perfect perpetual inventory. You are catching that moment when the "we have plenty" closet actually holds three weeks of stock at last month's burn rate and you are about to panic-buy at retail.
A 10-minute end-of-month count on those five items plus a reorder point ("reorder liners when we hit 4 cases") prevents both emergency buys and the slow capital drain of a garage full of product you won't run through for six months.
Equipment and small tools
Set a capitalization threshold — often $1,000 to $2,500 for small operators — and stick to it. A $400 auto-scrubber pad driver, a $180 vacuum repair, and $60 in vac bags in the same month should not all hit the same line. Consumables like pads and bags are direct job or supply costs; the scrubber itself depreciates over its useful life; repairs hit equipment maintenance. Mixing them hides your true supply burn rate.
Billing and revenue recognition that keeps cash and reality aligned
Monthly flat-fee contracts: Bill on the first of the month for that month's service. Revenue is earned as you perform, but for cash-basis filers, the key discipline is to record it in the month it was earned for management reporting even if a check arrives late. Accrual-basis books will defer pre-billed months — keep a simple deferred revenue check for any large prepaid annual deals.
Project work: Bill when the job is complete and inspected, not when scheduled. If you collect a deposit, book it as a liability (Customer Deposits) until you earn it.
Extra tickets and day porter adds: Create a separate service item so every add shows as its own line. Clients dispute "miscellaneous labor — $325." They pay "Saturday post-event trash pull — 3 hrs × $55 + $18 supplies."
Unbilled work at month-end: If a crew worked December 29 to 31 and you bill January 5, accrue the December portion as earned revenue and a receivable so December's job margin isn't missing three days of wages without their revenue.
Collections reality
Commercial clients pay net 15 to net 30 on paper and day 35 to 45 in practice. Run an accounts receivable aging weekly for your top 10 accounts. A client who was profitable on paper at 25 percent margin is unprofitable if their average days to pay is 60 and you are fronting payroll every two weeks plus supply cost. Charge interest or, more usefully, price your terms: a 1 to 1.5 percent discount for payment within 10 days is worth modeling against your line-of-credit cost.
The five ratios to glance at every month
You don't need a dashboard of 30 metrics. These five tell you where to dig:
- Gross margin by contract — which accounts earn their keep
- Payroll % of revenue (monthly + 3-month rolling) — whether you can hire or must reprice
- Supplies % of revenue — whether bulk buying and issue discipline are working
- Hours per clean vs. estimate — whether bids match reality
- Average days to pay (DSO) — whether revenue turns into cash fast enough to make payroll without stress
Put them on one page. Review with whoever schedules crews and buys supplies, not just the bookkeeper.
Common mistakes that show up in the books months late
Quoting without a labor burden. The cleaner makes $18, but you pay about $22 to $24 loaded with FICA, unemployment, workers' comp, and a slice for PTO and turnover hiring cost. Bid on $18 and you self-fund every payroll tax deposit.
Coding labor to the wrong job. A cleaner covers two buildings in one shift and the whole shift posts to the first job. That job looks like a loser, the second looks like a star, and you reprice the wrong one.
Expensing all chemicals when purchased. Buy $1,400 in floor finish in March for three wax jobs April through June, expense it in March, and March margin looks terrible while April through June looks brilliant. Use a supply asset and issue as used.
Not tracking drive time. Two 45-minute accounts 30 minutes apart pay hourly but eat a third shift in windshield time. If you don't code travel, every route looks profitable and the map makes you unprofitable.
Forgetting turnover cost. Cleaning turnover commonly exceeds 75 to 100 percent annually. Every new hire carries recruiting time, training hours you paid for that didn't bill to a client, and a few weeks of lower production. Book recruiting and training as overhead, but watch hires per month as a leading indicator: a hiring surge this month pushes payroll % up next month even if revenue hasn't moved yet.
A simple monthly close checklist for a cleaning operation
You can run this in under an hour once the habits are set:
- Reconcile bank and credit cards — flag personal charges immediately
- Approve crew time, post payroll, allocate to jobs
- Post supply issues to jobs, count top five SKUs
- Invoice all recurring contracts and extra tickets issued that month
- Run job profitability by contract — flag any below floor margin
- Update the 3-month rolling payroll-to-revenue and supplies-to-revenue ratios
- Age receivables — call or email any balance over 30 days with a ticket attached
- Record equipment purchases or repairs to the correct account — not "office supplies"
Quarterly, add: review Square/PayPal/stripe-equivalent deposits if you take residential payments through an app, true up sales tax if your state taxes project cleaning differently from recurring janitorial, and estimate quarterly taxes so April doesn't surprise you.
Keep your financial picture as clean as your buildings
Cleaning businesses that scale aren't the ones that clean faster. They are the ones that know which buildings pay them to come back and which ones they politely exit. That knowledge doesn't come from gut. It comes from job costing by contract, a disciplined payroll-to-revenue target, and supply tracking tight enough that a missing case of liners shows up as a number, not a shrug.
Start small: code labor and supplies to the job this month, even if you only do it for your five biggest accounts. One month of real data will teach you more about your prices than a year of estimating in a vacuum.
Simplify Your Financial Management
As you tighten job costing and payroll discipline across dozens of contracts, keeping clear, auditable records makes every re-bid, every hire, and every tax filing easier. Beancount.io gives you plain-text accounting you fully control — version-controlled, transparent, and ready for AI-assisted review — so your books reflect how you actually run the operation. Get started for free and turn the back office into a quiet advantage.