Ask a services owner which client is their best. They'll name the one paying the most. Ask them which is worst. They'll name the one emailing the most. Both answers are guesses. And honestly, they're often the same client.
The gap between what a client pays and what they cost is the actual game. Most owners never see it, because the numbers that would reveal it live in different systems, and none of them talk to each other.
The reason it stays a guess is structural. In any services shop below the size of "we have a finance team", nobody works on one account. The same designer touches four brands in a day. The same senior joins whichever call is on fire that afternoon. Your accounting software knows what each client paid you. It has no idea what each client cost you. That cost is a set of salaries. Salaries don't decompose by client.
So the question, which client is actually profitable, is genuinely hard. The standard answers online are written by people selling the software that answers it. Here's the method without the software.
Why the revenue ranking is the wrong ranking
Ranking by revenue tells you who funds the business. Not who builds it. Those are different lists. Acting on the first while believing it's the second is how a growing agency runs out of money.
The mechanism is simple. Revenue is contracted and fixed. Cost is behavioural and variable. Two clients on the same retainer can burn wildly different amounts of the only thing you actually sell. Which is senior attention.
One sends a brief, approves in one round, pays on time. The other reopens settled decisions, adds a stakeholder in month three, needs a call before every approval. On the revenue list they're identical twins. On the margin list they aren't in the same business.
Put another way: same invoice, different appetite. The invoice is what your bank sees. The appetite is what your team feels. Only one of those two shows up in a report.
This is the same failure mode that a profitable retainer quietly becoming an unprofitable one describes for a single account over time. What follows is the cross-sectional version. Not one account drifting. A whole book of clients you need to rank against each other at a single moment.
The three costs that never reach the client's line
Before allocating anything, know what you're allocating. Three categories are systematically missing from the mental version of this calculation.
Unbilled thinking time. The forty minutes before the call, spent reading the last three months of the account. The Sunday evening when a campaign is misbehaving. It's real. It's expensive, because it's almost always senior time. And it appears in no timesheet, because it doesn't feel like work being done on something.
Coordination overhead. Every client adds internal cost that has nothing to do with the work. Status meetings. Handovers between people. Someone re-explaining context to someone new. The project manager's time. Coordination scales worse than linearly with the number of stakeholders on the client side. A client with one decision-maker and one with four are not one-and-four. Closer to one and nine. Because the cost is in the connections, not the people.
Rework. Not revisions you priced for. Rework caused by a brief that changed, an approval that reversed, a spec nobody wrote down. Rework is the single largest hidden cost in most service businesses, and the one clients are least willing to see itemised.
None of these appear as a line in your P&L. They appear as salaries. Which is exactly why allocation is necessary rather than optional. And why the ability to read the statement you're decomposing matters first, which is the ground covered in how to read a profit and loss statement without an accounting degree.
Choosing an allocation basis, and what each one hides
Allocation means taking a shared cost and splitting it across clients using some proxy for consumption. The proxy you pick determines the answer. So pick it deliberately, and know its blind spot.
This isn't a new problem. It's the core of activity-based costing, which Robin Cooper and Robert Kaplan set out in Measure Costs Right: Make the Right Decisions. Their argument: managers were making pricing and mix decisions on distorted cost information, precisely because overhead was being smeared evenly across things that consumed it unevenly.
| Basis | How it works | What it hides | Use when |
|---|---|---|---|
| Revenue share | Client's share of revenue × total overhead | Assumes big clients cost proportionally more. They usually cost less per rupee | You need a number today and nothing else exists |
| Headcount share | Overhead ÷ people, assigned by who works where | Ignores seniority. An hour of principal time and an hour of junior time cost the same | Team is small and roughly uniform in seniority |
| Tracked hours × loaded rate | Actual hours at true cost per person | Only as good as your time tracking, which in most agencies is fiction | You genuinely track time and people fill it in honestly |
| Activity / touchpoint counts | Count the things that drive cost (calls, rounds, stakeholders) | Takes effort to design; needs review as the work changes | You want an honest answer without a timesheet culture |
Revenue-share is the most common method and the most misleading. Its error runs in the opposite direction to the truth. It charges your largest client the most overhead, when large accounts typically have the lowest overhead per rupee. One relationship. One set of meetings. One context to hold. Smearing overhead by revenue makes big clients look worse and small clients look better than they are. Which flatters exactly the accounts you should be scrutinising.
Loaded cost, not salary. Whatever basis you choose, the per-person cost must be fully loaded. Salary plus employer contributions. Plus the cost of the tools that person needs. Plus their share of rent and admin. Divided by realistically available hours rather than contracted ones. Nobody delivers 40 billable hours in a 40-hour week. If you use contracted hours you'll understate cost by something like a third, uniformly, and every client will look profitable.
The version that works when nobody tracks time
Most small agencies don't track time. Installing timesheets to answer this question usually fails. The data is bad for the first two months, people resent it, and you get an answer six months after you needed one.
The workable substitute is to count activities instead of minutes. Kaplan and Anderson's time-driven refinement of activity-based costing makes the same move. Estimate the time each transaction demands, rather than surveying people about how they spend their days.
In practice, for one representative month, count per client:
- Scheduled calls, and how many people from your side attended each
- Revision rounds on delivered work
- Distinct approvers involved in any decision
- Out-of-hours or same-day requests
- Days from your delivery to their sign-off
Then attach a standard time estimate to each. One figure per activity type, agreed once, applied to everyone. A call with three people from your side costs three times a call with one. A revision round costs whatever a revision round costs in your business.
Two properties make this better than timesheets for this purpose. It's retrospective, so you can run it on last quarter from your calendar and inbox without waiting. And it measures the drivers of cost rather than its symptoms. So the output tells you what to change, not merely who is expensive. "This account runs four approvers" is actionable. "This account consumed 61 hours" is not.
A worked example
Numbers below are invented for illustration and round on purpose. They aren't anyone's real book.
Take a small agency billing ₹12,00,000 a month across three clients, with total monthly costs of ₹9,00,000. Of that, ₹6,00,000 is delivery salaries and ₹3,00,000 is overhead. Overall margin is 25%. Looks healthy.
| Client A | Client B | Client C | |
|---|---|---|---|
| Monthly fee | ₹6,00,000 | ₹4,00,000 | ₹2,00,000 |
| Share of revenue | 50% | 33% | 17% |
| Delivery cost (activity-based) | ₹2,40,000 | ₹2,40,000 | ₹1,20,000 |
| Overhead (by revenue share) | ₹1,50,000 | ₹1,00,000 | ₹50,000 |
| Net margin | ₹2,10,000 (35%) | ₹60,000 (15%) | ₹30,000 (15%) |
Client A and Client B burn identical delivery cost, even though B pays two-thirds of A's fee. B is the one with four approvers and the reopened decisions. The revenue ranking says A, B, C. The margin ranking says A, then B and C indistinguishably, with B consuming twice the capacity of C to produce the same profit.
Now notice what the overhead row did. Allocating overhead by revenue share charged Client A three times what it charged Client C. On the assumption that A generates three times the admin. If A is a single-stakeholder account and C is a fragmented one, that assumption is backwards. The real gap between A and the others is wider than the table shows. The allocation basis moved the answer. Which is the whole point of choosing it consciously.
Rank on contribution margin, not net margin
The number to rank clients on is revenue minus the costs that would actually disappear if the client did.
Net margin, after allocated overhead, is the right number for pricing and for judging the business overall. It's the wrong number for ranking clients. Allocated overhead is not avoidable. Your rent doesn't fall when a client leaves.
Fire the client with the worst net margin and you don't save their allocated overhead. You redistribute it across the survivors. The next-worst client becomes the worst. That loop has an obvious endpoint, and it isn't a healthier business.
So keep two columns and use them for different decisions:
- Contribution margin (revenue − avoidable direct cost) answers: is this account worth keeping?
- Net margin (contribution − allocated overhead) answers: is this account priced correctly, and can the business support its current cost base?
A client with positive contribution and negative net margin isn't a client to fire. It's a client to reprice. Or a signal that your overhead is too heavy for the book you have.
What to do with the answer
You've found your worst account. The instinct is to fire it. That's usually the fourth-best option and the most expensive to reverse. Work the list in this order.
1. Fix the drivers before touching the price. Most unprofitable accounts are unprofitable for two or three specific, nameable reasons. An approval chain with no single owner. A standing weekly call that could be a written update. A delivery format that gets rebuilt every month. These are cheap to change and they don't require a difficult conversation. Fix them and re-measure a quarter later. A meaningful share of "bad clients" resolve here.
2. Reprice to the observed cost. If the drivers are structural to how the client works rather than to how you work, the price should reflect them. This is a much easier conversation when you can describe consumption rather than assert value. Approvers, rounds, turnaround expectations. How to raise your prices without losing the accounts you want to keep covers how to run it. If your floor rate itself is wrong, that's a different and more urgent problem, and pricing your services properly is the fix.
3. Re-scope. Reduce what's delivered to match what's paid. Often more palatable to a client than a price rise. And it makes the trade explicit rather than absorbing it silently. Cut a weekly call to fortnightly. Move a report from bespoke to templated. Package what was ad-hoc into a fixed cadence. The client sees "we simplified"; you see "we stopped bleeding".
4. Then, and only then, exit. Exit on the pattern, not on the number. A single bad quarter is noise. The signals that actually justify it are in when to fire a client, the four signals, and why revenue is never one.
One more thing worth checking before any of the above. Whether the account is unprofitable or merely slow to pay. They feel identical from the inside and need opposite responses. The difference between cash flow and profit is the distinction to hold onto.
How often, and the trap of doing it too often
Quarterly. Monthly is too noisy. One campaign launch or one bad month of rework will swing a small account's margin enough to trigger a decision you wouldn't make on a longer view. Annually is too slow to catch drift while it's still cheap to correct. Ninety days is a wide enough window to smooth out the odd bad week, and a short enough one that you can actually still remember what happened inside it.
Run it on the same basis each time. The absolute number matters less than the direction. Changing your allocation method between periods destroys the comparison that makes the exercise worth anything. If you must change the method, recompute the prior period on the new basis so you keep a like-for-like series.
Two failure modes worth naming. First, precision theatre. Spending three weeks refining an allocation model to move a client's margin from 14% to 15%. The decision you make at 14% and at 15% is the same decision. Get to a defensible number quickly and spend the saved effort on the drivers.
Second, showing the output to the team. A ranked list of clients by profitability, seen by the people delivering the work, changes behaviour in ways you didn't intend. It becomes a reason to under-serve the bottom of the list. Which is precisely how a fixable account becomes a lost one.
FAQs
How do I calculate profit per client if my team works on multiple accounts?
Split each person's fully loaded cost across accounts using a consumption proxy. Tracked hours if you have honest ones. Counted activities if you don't. Then subtract the result from that client's revenue. The proxy doesn't have to be perfect. It has to be consistent, applied the same way to every client, and reviewed when the shape of the work changes.
Should I allocate overhead by revenue or by hours?
By hours or activities where you can, because that's closer to actual consumption. Revenue-share allocation systematically penalises large accounts, which usually carry the lowest overhead per rupee. Revenue share is defensible only as a first pass when you have nothing else. Treat its output as directional rather than as a basis for firing anyone.
What is a good profit margin per client for an agency?
There's no universal figure worth quoting. Any specific percentage you read is someone's book rather than a benchmark. The useful comparison is internal. The spread between your best and worst accounts on the same measurement basis, and whether that spread is widening. A tight spread means your pricing model matches how work actually gets consumed. A wide one means some clients are subsidising others.
Should I fire my least profitable client?
Not on the first measurement, and not on net margin. Check contribution margin, revenue minus genuinely avoidable cost, because allocated overhead doesn't leave when the client does. Then work the cost drivers, then the price, then the scope. Exit is the last option and should follow a pattern across quarters rather than a single bad number.
What is activity-based costing and do I need it?
It's the practice of assigning overhead according to the activities that actually consume it, rather than spreading it evenly. You need the idea. You almost certainly don't need the full apparatus. Counting five or six cost drivers per client for one representative month gives you most of the accuracy at a fraction of the effort. Which is the argument behind the time-driven version of the method.
How do I account for time spent on a client that nobody logs?
Estimate it deliberately rather than letting it default to zero. Pick standard figures. Preparation time per call, context-switching cost per interruption, the true length of a revision round. Agree them once and apply them uniformly. A consistent estimate applied to every client is far more useful than precise data on the fraction of work people remember to log.
Key takeaways
- The revenue ranking and the margin ranking are different lists. Only one tells you how the business is doing.
- Unbilled thinking time, coordination overhead and rework are the three costs that never reach the client's line.
- Your allocation basis determines your answer. Choose it consciously and keep it stable across periods.
- Revenue-share allocation is backwards. Big accounts usually carry less overhead per rupee, not more.
- Use fully loaded cost over realistically available hours, or every client will look profitable.
- Count activities, not minutes, if you don't have a working timesheet culture.
- Rank on contribution margin. Net margin is for pricing decisions, not keep-or-drop decisions.
- Fix the drivers, then the price, then the scope. Exit last.
- Quarterly, same method every time. Don't show the ranked list to the delivery team.
Top comments (0)