Two accounts bill you $90,000 a year. On the gross margin line, they look like twins. One pays by bank transfer, orders twice a month in full pallets, and contacts support maybe four times a year. The other pays by card, orders eleven times a month in small batches, returns roughly a tenth of what it buys, asks for expedited shipping in December, and emails your operations lead before almost every order.
Your profit and loss statement will never tell you these are different customers. It is organized by what you bought: payroll, software, freight, processing fees. To calculate the true cost of serving a customer, you have to re-cut those same expenses by who caused them.
Deloitte defines cost to serve as all the activities and costs required to provide a product or service to a customer, and notes it can be analyzed across products, customers, channels and regions. That last part matters more than it sounds. The unit you choose shapes the answer, and choosing badly is the most common reason these models produce confident nonsense.
Decide what you are not measuring first
Scope confusion ruins more cost-to-serve models than bad math does. Three decisions up front prevent it.
Leave acquisition cost out
Cost to serve is a post-sale number. Advertising, sales commission, discovery calls and proposal time belong in acquisition payback and lifetime value analysis, not here. Blend them together and every customer in their first year looks like a disaster, which buries the operational signal you can actually act on this quarter.
Keep the two conversations separate. Acquisition cost tells you whether your marketing works. Cost to serve tells you whether your operations and pricing work. They interact, of course, since trust and reputation lower what you pay to win customers, but mixing them in one number helps neither.
Separate one-time setup from ongoing service
Implementation, onboarding, data migration, training, site surveys and first-order handholding are real costs, but they are not recurring. Hold them on their own line, then spread them across the tenure you actually expect, not the tenure you hope for. A customer who costs $4,000 to onboard and stays two years carries $2,000 a year of setup cost. The same customer churning at nine months carries a very different number.
Pick your denominator before you pull any data
Per customer per year works for B2B and subscription businesses. Per order works for ecommerce and distribution. Per ticket works when support time is the dominant cost. Per shipment works when freight is. The right denominator is the one that matches the decision you intend to make. If you are deciding whether to raise minimum order sizes, model per order. If you are deciding whether to renew an account, model per customer per year.
Every cost runs on a meter
Here is the trap that swallows small-business cost models. You take $240,000 of overhead, divide it across customers in proportion to their revenue, and feel rigorous. But that method cannot find a problem. If overhead is 18% of revenue for everyone, every customer carries the same percentage, and the customer draining your operations team looks exactly like the one who never calls.
Revenue-based allocation is a mirror, not a measurement. It gives you back the assumption you fed in.
The fix is to ask one question for each cost line: what actually makes this number go up? In practice, almost every cost to serve runs on one of five meters.
- Orders. Picking, packing, order entry, invoicing, packaging materials, quality checks. Driven by order count, not order value. A $200 order and a $2,000 order often consume identical handling cost.
- Touches. Support tickets, calls, emails, site visits, training sessions, collections chasing. Driven by interaction count, weighted by who handles it.
- Movement. Freight, fuel, mileage, delivery labor, returns logistics. Driven by parcels, weight, zones or miles.
- Dollars. Payment processing, chargebacks, financing cost on extended terms, bad debt. These genuinely scale with transaction value, which is why they are the one place percentage allocation is honest.
- Calendar. Committed capacity held for a specific customer: a dedicated account manager, reserved warehouse space, a named engineer, a standing service window. Driven by time, regardless of activity.
Tag every line of your expense sheet with one meter. The ones you argue over longest are usually the ones that matter most.
The calculation, step by step
The SBA’s planning guidance tells owners to build a business plan, an expense sheet and five-year projections, and points out that an existing business already has an established customer base and defined operating expenses. That is exactly the raw material here. You are not creating new data. You are re-sorting data you already have.
Step 1: Start from the expense sheet, not from theory
Pull twelve months of operating expenses. Exclude cost of goods sold for now, since that is already attributed to orders. Exclude acquisition spend, per the scope decision above. What remains is the pool you are going to distribute.
Step 2: Assign each line to a meter and build a rate
Suppose warehouse labor, packaging and order administration total $180,000 and you shipped 9,000 orders. Your order-handling rate is $20 per order. Suppose support payroll plus tooling totals $96,000 across 6,400 tickets, giving $15 per ticket. These are illustrative numbers, but the method is the point: cost pool divided by driver volume equals a rate you can apply to any customer.
Weight the touch rate if your escalation pattern is uneven. A ticket resolved by a junior agent and a problem that pulls your operations manager into a two-hour call are not the same event, and averaging them flatters your worst accounts.
Step 3: Pull the counts per customer
Deloitte makes the point that a usable model needs a blend of financial, operational and transactional data, and that master data design, data quality and cost model ownership are the make-or-break considerations. Translated for a ten-person company: your accounting system knows the money, your shipping platform knows the parcels, your helpdesk knows the tickets, and nothing links them unless someone makes the customer identifier consistent across all three. Fix the identifier first. Everything downstream depends on it.
Step 4: Handle payment costs as their own line
Payment method can change a customer’s profitability without anything else changing. Stripe lists ACH Direct Debit at 0.80%, capped at $5. On a $12,000 invoice, that is $5. The same invoice run on a card at 2.9% plus 30 cents, the rate Shopify shows starting from on its $29 Basic plan, costs about $348. One customer, two payment habits, a $343 swing on a single transaction.
Channel matters too. A $60 order through PayPal Checkout at 3.49% plus $0.49 costs about $2.58 in fees. The same $60 taken in person through Stripe Terminal at 2.7% plus $0.05 costs about $1.67. Small per order, meaningful across a customer who buys two hundred times a year.
Step 5: Subtract, then rank
Revenue, minus cost of goods sold, minus order-handling cost, minus touch cost, minus movement cost, minus payment cost, minus any committed capacity, minus amortized onboarding. What you get is customer-level operating profit. Rank every customer by it. The ranking is more valuable than any individual number, because the ranking is what drives decisions.
Your inputs go stale faster than you think
A cost model built once and never revisited becomes a confident liar. The inputs move, and some of them move for reasons that have nothing to do with your business.
Carrier pricing is seasonal. USPS applied temporary peak-season increases from October 5, 2025 through January 18, 2026, running roughly 5.2% on Ground Advantage, 5.6% on Priority Mail and Parcel Select, 4.6% on Priority Mail Express and 6.3% on Priority Mail Express Flat Rates. If a customer concentrates most of their volume into that window, an annual average shipping rate understates what they cost you and overstates what everyone else costs you.
Mileage assumptions drift and sometimes jump mid-year. The IRS business standard mileage rate was 70 cents per mile in 2025, rose to 72.5 cents on January 1, 2026, and was then revised to 76 cents for expenses paid or incurred on or after July 1, 2026. A field service route model built on the 2025 figure is nearly 9% light by the second half of 2026. Date-stamp every assumption in the model so you can see at a glance what is aging.
Software pricing changes shape, not just price. HubSpot moved Service Hub to a seat-based model for new customers on March 5, 2024 and removed seat minimums, which turns support tooling from a flat team cost into something that scales with how many people you need touching accounts. The same shift is visible in usage-based AI and automation pricing, such as HubSpot Credits at $0.010 per credit, or Zendesk’s Action Builder allowances by plan, where monthly Suite Enterprise subscriptions have access to 225,000 actions per month. Zendesk’s own published seat pricing spans a wide range, from $19 per agent per month on Support Team paid yearly to $55 on Suite Team and $115 on Suite Professional. The practical consequence: support software is no longer pure overhead. Part of it now behaves like a per-interaction cost, which means a high-touch customer genuinely costs more in tooling than a quiet one.
Your own plan tier is a trade between fixed and variable cost, and the crossover is computable. Shopify lists Basic at $29 a month with card rates from 2.9% plus 30 cents, and Advanced at $299 a month with rates from 2.5% plus 30 cents, plus access to live third-party shipping rates. The plan costs $270 more per month, or $3,240 a year, in exchange for 0.4 percentage points on card volume. That pays for itself somewhere around $810,000 of annual card processing, ignoring the feature differences. Below that volume you are buying features, not savings. Running that arithmetic for your own stack is a twenty-minute exercise that most owners never do.
How precise does the model need to be?
There is no published benchmark for what cost to serve should be as a percentage of revenue, and anyone offering one is guessing. Business models differ too much. So the question is not accuracy in the abstract. It is whether the model is accurate enough to support the specific decision in front of you.
Use what I would call the ranking test. Build the simplest version you can. Then change one assumption that you know is rough, by a lot. Double the support rate. Switch from averaged freight to actual parcel costs. Add the returns processing cost you left out. If the order of your customer list barely moves, your model is good enough, and more precision is procrastination. If customers jump five or ten places, you have found the driver that actually matters, and that is the one to measure properly.
This settles the usual argument between “a rough 80/20 model is fine” and “you need activity-based costing.” Both are right in different places. Start rough everywhere, then invest granularity only where the ranking is unstable.
One warning on roughness. The costs most often missing are the ones that live in a department that does not report to finance: the hours someone in accounts spends chasing a slow payer, the time returns take to inspect and restock, the compliance paperwork one regulated client demands, and above all the owner’s own hours. Owner time is the single most underpriced input in small businesses, because it never appears as a variable cost on any statement. If one customer eats four hours of your week, that customer has a cost nobody has recorded.
What to do once you know
The instinct after the first run is to fire the bottom of the list. Resist it for one cycle. In almost every case, the better move is to change the terms that created the cost, because a repriced customer keeps contributing to fixed-cost absorption while a terminated one takes their contribution with them.
Deloitte’s own published case describes a global shipping and logistics provider that found its pricing did not cover the total cost to serve key customers, and used that data to negotiate new terms. Negotiation, not termination. That is usually the right first instinct, and the data is what makes the conversation possible.
Fix the driver, not the price
If the problem is eleven small orders a month, a minimum order quantity or an order-consolidation discount solves it more cleanly than a price increase. If the problem is card fees on large invoices, offer a small discount for bank payment and you may hand back $300 to keep $343. If the problem is support volume, move that customer onto a service tier that matches what they actually use, or redesign the thing they keep calling about. Price increases are blunt. Driver changes are surgical, and customers accept them more easily because the logic is visible.
Tell sales the truth, carefully
The hardest internal conversation is explaining that a flagship account destroys margin. Do not lead with “this customer is bad.” Lead with the cost drivers: this account generates 31% of your order count on 12% of revenue. That framing attacks the behavior, not the relationship, and it gives sales something to negotiate. It also feeds backward into qualification, because the difference between good leads and bad leads is often visible in the cost profile of the customers they resemble. Over time, cost to serve should change who you pursue, not just how you bill. It is also the cleanest antidote to confusing revenue growth with profitable growth.
Put an expiry date on strategic subsidies
Some loss-making customers are worth keeping. They fill a delivery route, anchor a reference list, absorb capacity in a slow season, or are expected to expand. That is a legitimate decision, as long as you name it as a subsidy, quantify it, and attach a review date. An unprofitable account is a business decision. An unprofitable account nobody has looked at in three years is a leak.
Finally, watch what the model says about scale. If cost to serve per customer stays flat as volume grows, you have a staffing problem disguised as a growth problem, and it is worth asking honestly whether your business model can scale at all in its current shape. Growth only helps if serving the hundredth customer costs less than serving the tenth.
None of this requires a perfect number. It requires knowing who pays for whom. Once you can rank your customers by what they actually cost, pricing stops being a guess, saying no to the wrong work stops feeling reckless, and you can see which part of the business is genuinely carrying the rest.



