Most cleaning companies track revenue by client. Almost none track profit by client. That gap is where the money hides.
The uncomfortable part: your biggest account is usually the one you'd fight hardest to keep, and it's often the one bleeding you dry. Big contracts come with big expectations — extra site visits, "quick" scope additions that never get billed, a route that only makes sense if you ignore the drive time, and a payment cycle that stretches to 60 days while your crew gets paid every two weeks.
When you only look at top-line numbers, all of that stays invisible. You feel busy. Revenue looks healthy. But the bank account never quite reflects the growth. That disconnect almost always traces back to the same root cause: you don't actually know which clients make you money and which ones you're subsidizing.
This is a system for fixing that. Not a spreadsheet trick — a repeatable way to segment your portfolio, build account-level P&L with allocation rules you can defend, and run every client through a simple three-step decision ladder: retain, renegotiate, or offboard.
Revenue and profit stop moving together as you scale
At two or three accounts, you can hold the math in your head. You know the Johnson building takes your crew about three hours, you priced it at a level that felt fine, and payments show up on time. Easy.
At fifteen, twenty, forty accounts, that intuition breaks. And it doesn't break loudly — it breaks quietly. Profit erosion in cleaning operations rarely comes from one bad contract. It comes from a dozen accounts each losing a little, in different ways, that no single report ever surfaces.
-
The legacy account priced three years ago, never re-quoted, now underwater after wage increases
-
The high-touch account where the client emails constantly and every request pulls a supervisor off other work
-
The geographic outlier that adds 40 minutes of unpaid drive time to an otherwise tight route
-
The scope-creep account where "can you also do the break room" happened six times and none of it got billed
-
The slow-pay account that's profitable on paper but ties up cash you need elsewhere
Each of these looks fine in a revenue report. Client-level profitability analysis is the only thing that separates them from the accounts actually funding your business.
Step one: segment the portfolio before you touch a spreadsheet
Before allocating a single cost, sort your accounts. This matters because the allocation rules that make sense for a one-hour retail storefront are completely different from those for a five-day-a-week medical office. Run one flat model across everything and you'll get numbers that are technically consistent and practically useless.
Stop losing bookings in operational chaos.
Wipyly helps you manage, confirm, and optimize every cleaning appointment efficiently.
- Centralized booking management
- Automated client notifications
- Staff scheduling & route optimization
No credit card required
| Axis | Why it matters | Typical splits |
|---|---|---|
| Service type | Different labor intensity and margin structure | Recurring maintenance, deep/one-off, specialty (floors, windows, post-construction) |
| Site profile | Drives supervision, compliance, and rework risk | Standard commercial, high-compliance (healthcare/food), multi-site |
| Contract behavior | Predicts hidden cost load | Clean/hands-off, high-touch, chronic scope creep, slow pay |
You're not building this to be pretty. You're building it so that when you look at a group of accounts, you're comparing like with like. A high-touch medical account carrying 12% margin might be perfectly acceptable. A hands-off retail storefront at 12% is a problem you should have caught months ago.
One mistake to avoid: don't segment by how much you like the client.
Segment on operational and financial traits only.
Step two: build account-level P&L with allocation rules you can defend
This is where most owners stall, because they assume account-level P&L means enterprise accounting. It doesn't. You need four cost buckets and a consistent way to spread them.
The four buckets
1. Direct labor. The biggest line, and the one people estimate wrong most often. Use actual time on site plus drive time, not the time you quoted. If you built task-level timing tables when you priced the work, you already have a baseline — but track against reality, because the gap between quoted and actual hours is exactly where margin leaks.
2. Direct materials and consumables. Chemicals, liners, pads, anything that gets consumed at that site. For most maintenance accounts this is small and can be allocated per labor hour. For specialty work it can be significant and should be tracked directly.
3. Allocated overhead. Supervision, vehicle costs, insurance, admin, software. This is where allocation rules matter. Don't spread overhead evenly per account — spread it by a driver that reflects real consumption.
4. Cost of cash and rework. The two buckets almost nobody includes, and the two that flip "profitable" accounts into losers. Slow payment has a real carrying cost. Rework — redoing work that failed inspection — is pure margin destruction.
Allocation rules that hold up
-
Labor → tracked directly per account (actual hours × loaded labor rate)
-
Drive time → allocated to the account that causes it, not split across the route evenly
-
Supervision → allocated by supervisor-hours logged per account, or by a risk weight (high-compliance sites carry more)
-
Vehicle and fuel → allocated by drive minutes to the site
-
Admin and software → allocated per active account, or per invoice volume if a few accounts generate most of the paperwork
-
Cost of cash → apply a monthly carrying cost to any account past your standard payment terms
The "allocated by the account that causes it" principle is the whole game. A route that ends with one far-flung site should carry that drive cost against that account — not smeared across the four efficient stops before it. Smearing is how outliers hide.
A worked example
-
Monthly revenue about $4,800
-
Direct labor ~$2,600 (actual hours came in higher than quoted — about 8% over)
-
Drive time (allocated to this outlier site) ~$420
-
Materials ~$180
-
Supervision (standard commercial, low weight) ~$210
-
Vehicle/fuel ~$260
-
Admin/software ~$90
-
Cost of cash (pays at ~55 days vs. 30-day terms) ~$110
Total cost: roughly $3,870. Net margin: about $930, or ~19%.
That looks fine — until you notice the labor overrun and the drive-time load. Fix the routing or re-quote the hours and this account jumps toward 26–28%. Leave it alone, and one more wage bump pushes it under 12%. This is exactly the kind of account that looks healthy on a revenue report and is one cost increase away from turning red.
Step three: run every account through the decision ladder
Once you have account-level P&L, don't just admire it. Route each account through three gates, in order.
``
Account P&L Review
↓
[Gate 1: Retain?] — Margin solid + low operational risk → RETAIN
↓ No
[Gate 2: Renegotiate?] — Fixable economics + solid relationship → RENEGOTIATE
↓ No
[Gate 3: Offboard] — Margin fails + client won't move → OFFBOARD
``
A quick visual to keep the ladder clear when you present it to your team.
Gate 1 — Retain
An account clears the retain gate if it hits your target margin band and doesn't carry hidden operational risk — chronic rework, constant supervisor drag, compliance exposure. These accounts need nothing except protection. Watch them at renewal and re-quote on schedule so they don't quietly slide into the next gate.
Worth noting: retention isn't passive. The accounts you retain today become the underwater accounts of two years from now if you never revisit the pricing. Build re-quote triggers into your renewal process so healthy accounts stay healthy.
Gate 2 — Renegotiate
An account lands here when the work is fine but the economics aren't. Margin is thin, but the site is operationally clean and the client relationship is solid. These are fixable.
-
Reprice to current cost reality (a modular pricing engine for mixed cleaning contracts gives you margin bands and decision gates so you're not negotiating from a gut number)
-
Re-scope — drop or reprice the tasks that keep creeping in
-
Re-schedule to fix routing so drive time stops eating the account
-
Re-term the payment — a slow-pay account can become profitable just by tightening terms; a stage-based collections ladder recovers margin without touching price at all
Gate 3 — Offboard
The hardest one, and the one owners avoid longest. An account belongs here when it fails on margin and the client won't renegotiate, or when the operational drag — rework, complaints, supervisor time — makes it destructive even at a decent margin.
Offboarding isn't dumping the client mid-contract. It's a controlled exit: honor the term, decline renewal, or hand it off cleanly. Do it deliberately so it doesn't damage your reputation.
The mental shift that makes this easier: offboarding a losing account doesn't shrink your business. It frees a crew and a route slot for an account in your healthy margin band. That capacity almost always gets refilled by better work.
When each move actually makes sense
Retain makes sense when: margin is solid, the site is low-drama, and there's room to grow the account — more sites, more frequency, add-on services.
Renegotiate makes sense when: the relationship is worth keeping and the economics are fixable through price, scope, schedule, or terms. Don't renegotiate an account the client already treats as a commodity — you'll just teach them to push harder.
Offboard makes sense when: you've tried to renegotiate and hit a wall, the account is a rework magnet, or it's blocking capacity you could deploy at a higher margin. Also offboard when a client's behavior is bleeding into how your crew treats other sites.
Who should NOT run this ladder yet: if you can't see actual (not quoted) labor hours per account, fix that first. Every gate in this ladder depends on real cost data. Running it on estimated costs just automates bad decisions faster.
A remediation playbook for the accounts you decide to save
Most accounts won't be clear retain-or-offboard cases. They'll land in renegotiate, and that's where a repeatable playbook saves you from re-inventing the conversation every time.
Underwater legacy account (priced 2+ years ago):
-
Pull the account P&L and the original quote side by side
-
Document what changed — wages, frequency, added scope
-
Present a phased increase tied to specific cost drivers, not a flat "prices went up"
-
Offer a scope trade (drop a low-value task) to soften the number
-
Set a re-quote reminder so it never drifts this far again
Scope-creep account:
-
List every task currently being performed vs. the contracted scope
-
Quantify the unbilled time in dollars per month
-
Either fold it into a revised contract or formally pull it back
-
Lock the new scope with sign-off so it can't creep again
Slow-pay-but-profitable account:
-
Calculate the actual carrying cost of their payment behavior
-
Move to shorter terms, deposits, or auto-pay before touching price
-
If they won't move on terms, price the cost of cash into the rate
High-touch account draining supervision:
-
Track supervisor hours against the account for a full month
-
Convert that time to a real cost and add it to the P&L
-
Restructure how the account is serviced — a single point of contact, scheduled check-ins instead of constant fire drills
-
If it can't be tamed, reprice for the true service level
These aren't one-size-fits-all scripts. The actual conversation will vary. But having the numbers ready before you walk in changes the dynamic completely — you're not guessing, and the client can tell.
A real scenario
A commercial cleaning company running around 30 accounts — mostly recurring office and retail — felt stuck. Revenue was up roughly 20% year over year, but the owner's take-home hadn't moved. Classic "growing broke" pattern.
Building account-level P&L took about two weeks of tracking real hours and payment timing. The result: six accounts were running below 10% margin, and two were actually negative once drive time and rework were allocated properly. Together those eight accounts represented close to a third of revenue and almost none of the profit.
The decision ladder sorted it quickly. Four went to renegotiate — three accepted phased increases, one accepted a scope pullback. Two slow-pay accounts moved to shorter terms. The two negative accounts wouldn't budge on price, so both were offboarded at renewal over the following quarter.
Twelve weeks later, revenue dipped slightly — but net profit was up meaningfully, and the crews freed up by the offboarded sites got redeployed onto a new account in the healthy margin band. The owner's summary was blunt: "I was working hardest for the accounts costing me the most."
How this connects to the rest of your operation
Account-level profitability isn't a one-time audit. It's a feedback loop that should plug into how you price, how you renew, and how you route.
The cleanest way to make it stick is to bake profitability review into your client lifecycle so every renewal triggers a P&L check, not just a contract re-sign. If you've mapped out an operational client lifecycle with SLA handoffs and renewal triggers, the account P&L becomes one more gate at renewal — the point where you decide, consciously, whether each account still belongs in the retain band.
The tracking side is where operational software earns its place. Once real labor hours are flowing in from the field, payment timing from invoicing, and route data by site, the account-level P&L can largely build itself — instead of eating two weeks of manual spreadsheet work every quarter. The value isn't automation for its own sake. It's that you actually keep doing the analysis instead of doing it once and letting it go stale. The accounts that quietly go underwater do so because nobody's watching. A platform that flags a slipping account the moment actual hours cross quoted hours turns a quarterly cleanup into a running signal you can act on early.
The takeaway
Growth in a cleaning business is not the same thing as profit, and the difference lives at the account level. Segment your portfolio so you're comparing like with like. Build a P&L for each account with allocation rules that push costs onto the accounts that actually cause them — especially drive time, supervision, rework, and slow pay. Then run every account through retain, renegotiate, offboard, and act on where it lands. The companies that do this stop mistaking activity for progress. They shed the accounts that were quietly subsidized by their better work, protect the ones actually carrying the business, and rescue the fixable ones with a repeatable playbook instead of a stressful one-off conversation. You end up with a leaner portfolio, more profit, and a lot less of that gnawing feeling that you're busier than ever with nothing to show for it.
Ready to simplify your cleaning operations?
Join 1,000+ cleaning businesses using Wipyly to save time, reduce scheduling conflicts, and enhance client satisfaction.