Blog · Finance metrics and formulas
Activity-based costing assigns overhead by the activities each product or customer uses, rather than by revenue or volume. This page sets out the four steps, builds activity rates for a distributor's four cost pools, charges four customers both ways, proves the charges reconcile, and covers when ABC changes the answer and when time-driven ABC is the simpler route.
Activity-based costing (ABC) assigns overhead to products or customers according to the activities they use, instead of spreading it by revenue or volume. Each pool of overhead gets a cost driver and a rate, such as $60 per delivery, and each customer is charged its driver count times the rate. On the four customers below, ABC turns the account that looks healthy under a revenue-based allocation into one that loses $20,000.
Overhead is the cost that does not belong to a single unit sold: order processing, delivery, customer service, returns, set-ups. Traditional costing spreads it with one broad rate, usually a percentage of revenue, labor hours or units. That works when every product or customer uses overhead in proportion to its size. It fails when they do not, and in most B2B businesses they do not.
ABC replaces the single rate with several:
Robin Cooper and Robert Kaplan made the case in Measure Costs Right: Make the Right Decisions (Harvard Business Review, 1988): managers in multi-product companies were "making important decisions about pricing, product mix, and process technology based on distorted cost information."
Activity rate = Cost pool / Total cost driver volume
ABC cost for a customer or product = Σ (Driver count × Activity rate)
Traditional allocation = Overhead × Customer revenue / Total revenue
This is cost allocation with better bases. Revenue, labor hours, square feet and headcount are all allocation bases; ABC picks, for each pool, the base that actually causes the cost.
A distributor has $600,000 of overhead a year, in four pools:
| Activity | Cost pool (USD) | Driver | Driver volume | Rate (USD) |
|---|---|---|---|---|
| Order processing | 180,000 | Orders | 3,600 | 50 per order |
| Delivery | 240,000 | Stops | 4,000 | 60 per stop |
| Customer service | 120,000 | Calls | 2,400 | 50 per call |
| Returns handling | 60,000 | Returns | 600 | 100 per return |
| Total | 600,000 |
The rows you need are one line per customer: revenue, gross margin, and the count of each driver for the same year.
| Customer | Revenue (USD) | Gross margin | Gross profit (USD) | Orders | Stops | Calls | Returns |
|---|---|---|---|---|---|---|---|
| A | 2,400,000 | 22% | 528,000 | 600 | 500 | 300 | 40 |
| B | 900,000 | 26% | 234,000 | 1,500 | 1,800 | 900 | 260 |
| C | 1,200,000 | 24% | 288,000 | 900 | 1,000 | 700 | 120 |
| D | 500,000 | 28% | 140,000 | 600 | 700 | 500 | 180 |
| Total | 5,000,000 | 1,190,000 | 3,600 | 4,000 | 2,400 | 600 |
Traditional. Overhead is 600,000 / 5,000,000 = 12% of revenue, so A is charged $288,000, B $108,000, C $144,000 and D $60,000.
ABC. Each customer's charge is its driver counts times the rates. With the rates in C2:F2 and a customer's counts in C5:F5:
=SUMPRODUCT(C5:F5,$C$2:$F$2)
Customer B: 1,500 × 50 + 1,800 × 60 + 900 × 50 + 260 × 100 = 75,000 + 108,000 + 45,000 + 26,000 = $254,000.
| Customer | Orders (USD) | Delivery (USD) | Service (USD) | Returns (USD) | ABC charge (USD) | ABC charge as % of revenue |
|---|---|---|---|---|---|---|
| A | 30,000 | 30,000 | 15,000 | 4,000 | 79,000 | 3.3% |
| B | 75,000 | 108,000 | 45,000 | 26,000 | 254,000 | 28.2% |
| C | 45,000 | 60,000 | 35,000 | 12,000 | 152,000 | 12.7% |
| D | 30,000 | 42,000 | 25,000 | 18,000 | 115,000 | 23.0% |
| Total | 180,000 | 240,000 | 120,000 | 60,000 | 600,000 | 12.0% |
The result after overhead, both ways:
| Customer | After traditional (USD) | % of revenue | After ABC (USD) | % of revenue |
|---|---|---|---|---|
| A | 240,000 | 10.0% | 449,000 | 18.7% |
| B | 126,000 | 14.0% | −20,000 | −2.2% |
| C | 144,000 | 12.0% | 136,000 | 11.3% |
| D | 80,000 | 16.0% | 25,000 | 5.0% |
| Total | 590,000 | 11.8% | 590,000 | 11.8% |
Under the revenue allocation, B has the second-best margin after overhead, at 14.0%. Under ABC it loses $20,000: it places 1,500 small orders a year, needs 1,800 delivery stops and returns 260 times, far more activity than its $900,000 of revenue suggests. A, the largest customer, places large, infrequent orders and was carrying overhead it does not cause.
ABC moves overhead between customers; it never creates or loses any. Three checks:
If driver counts by customer do not add up to the driver volume used in the rate, the charges will not sum to the pool. That is the first thing to check when an ABC model does not reconcile.
The two methods give the same answer when every customer or product uses activities in proportion to its revenue. The more diverse the base, the further apart they move: many small orders against a few large ones, standard against custom products, self-service against high-touch accounts.
ABC is worth the effort when overhead is a large share of cost and the customers or products differ sharply in how they use it. It changes little when overhead is small, or the business sells one product to similar customers. Where the charges sit in the P&L, between gross margin and net margin, is set out in gross margin vs contribution margin vs net margin.
Classic ABC surveys staff on how they split their time, which is slow and goes stale. Kaplan and Steven Anderson's time-driven activity-based costing (Harvard Business Review, 2004) replaces the surveys with "informed managerial estimates": the cost per minute of the capacity supplied, and the minutes each activity takes.
Time-driven rate = Cost of capacity supplied / Practical capacity in minutes
Cost = Minutes used × Rate
Applied to customers rather than products, ABC is cost to serve. How to calculate cost to serve per customer in Excel builds it step by step, cost to serve by industry lists the drivers that matter in each sector, and what is a good cost to serve gives the ranges to compare against.
Covirage's customer profitability tools apply the same logic to your delivery, order and activity files: each cost pool is charged by driver, and the charges reconcile to the pool. The arithmetic is done by deterministic tools; the external AI model explains the ranking and never does the calculation. See customer profitability to find the customers that buy the most and earn the least, with costs allocated by what each customer does, never by revenue. For the cost behavior underneath, see fixed vs variable costs; for the margin after variable costs, contribution margin ratio; for the per-customer P&L, unit economics.
It is a way of assigning overhead costs according to what actually causes them. Instead of charging every product or customer the same percentage of overhead, you count how many orders, deliveries, calls or set-ups each one uses and charge a rate for each.
Traditional costing spreads overhead with one broad rate, usually by revenue, labor hours or units. ABC uses several activity rates. The results differ most when customers or products use activities very differently: small, frequent, high-service accounts absorb more cost under ABC.
A cost driver is the activity measure that causes a cost pool to rise or fall, such as the number of orders processed, deliveries made, calls handled or machine set-ups. The driver's volume is the denominator of the activity rate.
It takes effort to set up and keep current, it needs driver data many companies do not record, and it can create false precision. Time-driven ABC, which estimates minutes per activity, reduces the effort. Keep the number of activities small.