Shows which clients and service lines actually make money once delivery cost and hours are counted, and which are quietly subsidizing the rest.
A whole-business blended margin hides the one decision that moves a service business's numbers: which specific clients and services make money once you count what it costs, and how long it takes, to deliver them. This skill decomposes the blend. You supply a table of revenue, direct cost and hours per client or service line; it computes the contribution margin of each one, ranks the money-losers against the hidden stars, reads how concentrated your revenue and margin really are, and hands back an action list per problem account: reprice, systematize, upsell or exit. Every finding traces back to a row in your table, with the formula and a worked line shown, and the per-segment margins are written to your workspace metrics snapshot so the dashboard and downstream skills can read them. It is a repeatable method with a fixed input template, not a one-off spreadsheet interrogation.
This skill has no button. You start it by saying what you want. Any of these will do it:
| If you actually want | Use this instead |
|---|---|
| bookkeeping: categorizing expenses, reconciling a ledger, tax-ready accounts | your accountant or bookkeeping software; this skill reads a table, it does not keep books |
| the exit or rescue conversation with a client the ranking says is unprofitable | client-retention |
| designing the new price once the ranking says a segment must be repriced | offer-architect |
| cutting the delivery hours that make an account expensive to serve | client-delivery-engine |
| a one-off question about a spreadsheet with no repeatable template behind it | ask it directly in chat; this skill exists for the recurring margin read, not ad-hoc queries |
The whole skill runs off one input: a table with a row per client or service line. Paste it, drop a CSV or spreadsheet, or answer conversationally and the skill will assemble it. Each row carries:
| Column | What it means |
|---|---|
| segment | the client or service line the row describes |
| revenue | what that segment paid you over the period |
| direct delivery cost | money spent specifically to serve that segment: contractors, software seats, ad spend passed through, media |
| hours to serve | team hours spent delivering for that segment over the same period |
| loaded hourly cost | what an hour of delivery actually costs you: salary plus overhead and tools, divided by working hours, not the raw wage |
Missing hours mean exclusion, not estimation. If a segment's hours cell is blank, that segment is flagged in the provenance header and left out of the ranking. The skill will not guess the hours, and it will not silently drop the row either; you are told exactly what was excluded and why. If you track no hours at all, the skill runs on revenue and direct cost alone and says plainly that the labour view is unavailable.
| What you need | Why | |
|---|---|---|
| The revenue-and-cost table above, covering one consistent period | every number in the output derives from this table; mixing months and quarters in one table corrupts the ranking | Required |
| A loaded hourly cost you believe | the labour side of every margin is hours times this figure; a raw salary number understates it and flatters every account | Required |
A decision on which workspace you are in, _default for your agency or client--* when running it on a client's business | the memo and the metrics snapshot land in the active workspace | Required |
| Hours tracked per segment, even roughly | without hours a segment drops out of the labour ranking; a calendar-based estimate you stand behind beats no number, but the skill will never invent one for you | Optional |
brand/reports/metrics-snapshot.md in the workspace, so the dashboard and downstream skills read the same numbers you just saw.brand/reports/metrics-snapshot.md for the dashboard and downstream skills| The mistake | Do this instead |
|---|---|
| Trusting the blended margin because it looks healthy | Decompose it. A comfortable blend routinely hides a flagship account running at a loss, paid for by your smallest, quietest clients. |
| Ranking clients by revenue and calling the biggest one the best | Rank by contribution margin. As an invented example: a client paying 6,000 for the period who takes 90 delivery hours at a loaded 60 per hour has already cost 5,400 in labour before a single direct cost, while a 4,000 client needing little delivery time may out-earn them. |
| Guessing hours for a client nobody tracked, just to complete the ranking | Let the skill exclude and flag that client, then go get the real hours. A ranking with an honest gap beats a ranking with an invented number in it. |
| Using raw salary as the hourly cost | Load it: salary plus overhead, tools and management time, divided by actual working hours. The unloaded figure makes every account look better than it is. |
| Mixing periods, one client's quarter against another's month | One period per table, every row. Rerun the skill per period rather than blending them. |
| Firing a client off a single period's ranking | Rerun it on another period first. Onboarding-heavy months and one-off projects distort hours; act on a pattern, not a snapshot. |
The most common finding is not a small bad client. It is the flagship: the largest account, the one everyone serves first, showing negative contribution once hours are counted. That is why the ranking uses margin in money and margin percent side by side, and why the concentration read sits next to it. The account that fills your calendar and the account that funds your business are often not the same account.