Unit economics
The P&L tells you whether Mangrove made money last year. Unit economics tells you whether the next order, the next channel or the next customer will. This lesson takes the finance view: which costs really belong to one order, what a partner order earns by channel once you count the cost of giving credit, and how to judge CAC, LTV and payback without the traps that make growth plans look better than they are.
By the end you can
- Sort costs into variable, fixed and allocated, and explain why a fully loaded cost per order misleads decisions
- Build the contribution of a $250 partner order for the app and phone channels, including the cost of 23 days of credit
- Calculate CAC by channel and CAC payback in months for an app customer and a new partner shop
- Work out cohort LTV on contribution, with and without discounting, and say when discounting changes the answer
- Spot revenue LTV, blended CAC and averages that hide a losing segment
The everyday picture
A woman drives her own car as a taxi. Fuel and tyre wear cost her about $0.30 a kilometre. Insurance, her licence and the car loan cost $400 a month, whatever she drives. Last month she made 200 trips, so she tells herself each trip "costs" $2 of fixed cost plus its fuel.
At 9 pm a passenger wants a 4 km ride for $3. Fuel is $1.20. Add her $2 of fixed cost and the trip "costs" $3.20, so she says no. That is a mistake. The insurance and the loan are paid whether she takes the trip or not, and the trip would have left her $1.80 towards them. Each refusal also spreads the same $400 over fewer trips, so the rest look dearer.
The fixed costs still matter: all her trips together must earn more than $400 a month. Unit economics keeps the two questions apart: does one more unit earn more than it costs to deliver, and does all the units' earning cover the fixed costs?
Which costs belong to one order
You met the method in pm-27: the average 30-minute "Now" order has an $18 basket and, after goods, rider, packaging, payment fees and a $1.50 discount, loses $0.40. Without the discount, a repeat order earns $1.07. The finance question is which costs belong in that line.
Every cost falls into one of three groups for a given decision:
- Variable costs come with each order and disappear without it.
- Fixed costs stay the same this month whatever the volume: engineers' salaries, rent, software licences.
- Allocated costs are slices of shared costs handed out by a rule, such as share of revenue or orders. The total is real money; the slice stays when an order goes.
Here is how that goes wrong at Mangrove. In fin-01 you saw technology opex of $24M in FY2025. A slide in last year's budget pack divided it by about 21.6 million app orders a year and called the result "technology cost per order": about $1.11. Next to the $1.07 repeat order, every app order seems to lose 4 cents, and the slide concluded that app growth destroys value.
Three things are wrong with it. First, most of the $24M is staff, licences and network, which stay the same if Mangrove takes 1,000 fewer orders tomorrow. Second, the same technology runs 320 stores and the Partner app. Divide the $24M by every order and store checkout (about 146 million a year) instead and the "cost per order" falls to about $0.14. When the allocation key decides the answer, the answer is not about the order. Third, the technology cost that really grows with orders is small: the cloud services behind the customer app cost about $210,000 a month for about 1.8 million orders, about $0.12 an order.
That $0.12 is the marginal cost of technology for an app order, or a little less, since part of that cloud bill is a base load that runs at 3 am too. It belongs in contribution, and pm-27's order line left it out. With it, the repeat order earns about $1.07 − $0.12 = $0.95, the number we use below.
The rule follows. Decisions about volume, price and channels use contribution, built from variable costs only. Fixed costs are compared in total with total contribution, at the level where someone could cut them: a team, a store, a product line.
Quick check
Which of these belongs in the contribution of one extra app order?
Only the cloud load changes when one more order happens, so only it is variable. Salaries, a retainer and depreciation are real costs of the business, but they stay the same if the order does not happen. Allocating them per order is the tempting mistake: it makes each order look worse and invites decisions that cut volume while the fixed costs stay.
A partner order, line by line
About 4,000 partner orders arrive a week from corner shops, about 62% of them in the Partner app and about 1,500 by phone to the sales reps. The average order is about $250, and Mangrove's wholesale margin is about 7%, so each order leaves $17.50 of gross margin. Delivery from the distribution centre (DC) costs about $11 per drop. Then come the costs that depend on the channel, which pm-27 measured as cost to serve: $0.20 for an app order and $1.75 for a phone order ($1.00 of rep time plus $0.75 for the 1 phone order in 12 corrected at about $9).
One more cost hides here. Shops have 14 days to pay, and on average they pay after 23. Until then Mangrove holds a receivable instead of cash, money that cannot pay a supplier or reduce a loan. Mangrove's finance team charges money tied up at 12% a year, its rate for projects. So the cost of credit on one order is $250 × 12% × 23 ÷ 365, about $1.89.
One $250 partner order App Phone
Wholesale margin (7%) +17.50 +17.50
Delivery drop from the DC -11.00 -11.00
Cost to serve: handling -0.20 -1.00 (phone: 10 min of rep time)
Cost to serve: corrections 0.00 -0.75 (1 in 12 x $9)
Contribution before credit +6.30 +4.75
Cost of credit (23 days at 12%) -1.89 -1.89
Contribution after credit +4.41 +2.86Two things stand out. The drop is the biggest cost, so route density moves partner economics more than anything in the app. And the cost of credit is larger than the whole phone-versus-app difference. It is not an operating cost in the P&L, since interest sits below operating profit, but 4,000 orders a week at $1.89 is about $390,000 a year, roughly the $3M of partner receivables on the balance sheet at 12%.
Now total it by channel for a normal week:
| Channel | Orders a week | Contribution before credit | After credit | Week, after credit |
|---|---|---|---|---|
| App | 2,500 | $6.30 | $4.41 | about $11,020 |
| Phone | 1,500 | $4.75 | $2.86 | about $4,290 |
| All partner orders | 4,000 | $5.72 average | $3.83 average | about $15,310 |
That is about $800,000 a year after credit, which has to cover the reps' salaries, the Lagoon Digital contract (about $390,000 a year) and the Partner app team. Moving 500 phone orders a week to the app adds about $40,000 a year, as pm-27 found. Getting shops to pay on their 14-day terms would save 9 days of credit, about $0.74 an order or roughly $150,000 a year, so paying in the app on delivery is a product feature with a finance payoff.
Quick check
A shop that orders by phone pays, on average, 45 days after delivery. What is its contribution after credit on a $250 order?
Credit for 45 days is $250 × 12% × 45 ÷ 365, about $3.70. The phone order's contribution before credit is $4.75, so about $1.05 is left. $2.86 is the average shop at 23 days, which is exactly the number that hides late payers. $4.75 forgets credit altogether.
Think first: if every phone order moved to the app tomorrow, would Mangrove save $1.75 an order?
No. It would save the $0.75 of corrections, which are real credit notes and second deliveries. The $1.00 of rep time becomes cash only if the reps' hours go to something that pays, such as signing shops, or if Mangrove hires fewer reps. The app order still costs $0.20. And some shops might order less without the rep's call, losing $2.86 after credit for each order. A saving per order is a claim about what changes, so name the change.
CAC by channel and payback
CAC is a channel's acquisition spend divided by the customers it brought in, and CAC payback is the months of contribution it takes to earn that back. pm-27 used a CAC of about $12 for the app. Tomás split last month's paid acquisition by channel:
| App channel | Spend | New customers | CAC | Payback |
|---|---|---|---|---|
| Referral rewards | $24,000 | 3,000 | $8 | month 4 |
| Search ads | $33,000 | 3,000 | $11 | month 7 |
| Social ads | $38,000 | 2,000 | $19 | never |
| All paid channels | $95,000 | 8,000 | about $12 | month 9 |
Payback uses pm-27's app customer (3 orders a month, 80% still ordering each month) at $0.95 an order. In month 1 a customer earns 3 × $0.95 = $2.85. In month 2 only 80% of the cohort is left, so expected contribution is $2.28, then $1.82, and so on. For a $12 CAC the running total passes zero in month 9, and it can never pass 3 × $0.95 × 5 = $14.25, because the expected lifetime is 1 ÷ (1 − 0.8) = 5 months. Social ads at $19 never pay back. A blended CAC of $12 makes all three look acceptable.
The quick version, "CAC ÷ monthly contribution", gives $12 ÷ $2.85, about 4.2 months, because it assumes nobody leaves. The cohort payback takes more than twice as long, and it is the one finance teams use.
A new partner shop works the same way, with bigger numbers and a ramp. Signing one shop takes a rep about 10 hours, counting visits to shops that say no: about $60 at $6 an hour fully loaded. Add a $30 welcome credit on the first order (counted here, so it stays out of that order's contribution) and CAC is about $90. New shops place orders in the app and start small: about 3 orders in month 1, 5 in month 2, 7 in month 3, then about 9 a month like an average shop (4,000 orders a week across 1,800 shops). About 98% of shops still order each month.
New partner shop, app orders at $4.41 after credit, CAC $90
Month Orders Shops left Contribution Cumulative
1 3 100% $13.23 -$76.77
2 5 98% $21.61 -$55.16
3 7 96% $29.64 -$25.52
4 9 94% $37.35 +$11.83 pays back
12 9 80% $31.78 +$284.98A partner shop pays back far faster than an app customer, because it brings about $40 of contribution a month against $2.85. That argues for signing shops. The limit is that the 1,800 shops Mangrove serves were probably the easiest to sign, so the next shop usually costs more to win and may sit off the usual routes.
Quick check
Why does the app's blended CAC of about $12 mislead the marketing budget?
An app customer earns at most $14.25 over their expected lifetime, so any channel above that never pays back. The blend of $8, $11 and $19 sits at about $12 and looks fine. Option 3 is a real mistake too, but this table already counts paid customers only; the problem here is mixing channels. Cloud cost belongs in contribution, not CAC.
Cohort LTV, with and without discounting
LTV is the total contribution you expect from a customer over the time they keep buying. Build it from a cohort: all customers who joined in the same month, followed month by month, as in pm-23. Each month's contribution is orders × contribution per order × the share of the cohort still buying.
A dollar in month 30 is worth less than a dollar today, which could repay debt or fund a project earning 12% a year. Discounting divides each future month by (1 + r) to the power of the month. A 12% yearly rate is about 0.949% a month, since 1.12 to the power of 1/12 is about 1.00949.
Undiscounted Discounted at 12% Drop
App customer (5 months) $14.25 $13.60 about 5%
Partner shop (lifetime) about $1,930 about $1,290 about a third
Partner shop (36 months) about $970 about $830 about 15%For the app customer, discounting barely matters, because most of the money arrives in the first months. For a partner shop that stays for years (98% monthly retention means an expected lifetime of about 50 months), it removes about a third. Long lifetimes are also where the forecast is weakest, so many finance teams cap LTV at a horizon such as 36 months. Discounted and capped, a new shop is worth about $830 against a $90 CAC, and that is the number to bring to a budget meeting.
Three mistakes turn LTV into a sales slide:
- LTV on revenue. $250 × 9 orders a month × 50 months is $112,500 per shop, and means nothing when Mangrove keeps a few dollars an order. Use contribution after credit.
- Blended CAC. One CAC across channels, or across old cities and new ones, hides the channel or city that never pays back.
- Averages that hide segments. The average shop pays in 23 days; a phone shop that pays at 45 days keeps about $1.05 an order instead of $2.86. The average drop costs $11; a shop off the usual routes may cost $14. Split by channel, payment days, city and route before you trust an average.
Quick check
You discount two LTVs at 12% a year. Which one falls the most, in percentage terms?
Discounting hits money that arrives late. The app customer's value comes almost all in the first months, so it drops by about 5%; the shop's value spreads over about 50 months and drops by about a third. A 12% yearly rate does not take 12% off a total; the cut depends on when the money arrives.
Do it
Build a one-page unit economics sheet for one channel your team runs, ready for a budget review.
Pick the unit and the channel
One order, shop-month or subscriber-month, for one channel, from last month's actual data.
Sort every cost line
For each line ask what changes if one more unit happens. Mark it variable, fixed or allocated, and write its source (finance ledger, cloud bill, ops report).
Measure the marginal technology cost
Cloud cost of the services that handle this unit ÷ units. Note any base load that does not move with volume.
Add the cost of credit for business customers
Amount owed × the finance team's yearly rate × average days to pay ÷ 365. Ask finance for the rate and for days to pay by segment.
Add CAC and cohort payback by channel
Spend per channel ÷ customers that channel won. Payback month from cohort retention, not from CAC ÷ monthly contribution.
Compare fixed costs in total
Total contribution per month against the fixed costs someone could cut. Write the volume at which they are covered.
OutputPartner orders, app channel, September per order Wholesale margin 7% of $250 +17.50 Delivery drop -11.00 Cost to serve (support, servers, payments) -0.20 Contribution before credit +6.30 Cost of credit: 250 x 12% x 23 / 365 -1.89 Contribution after credit +4.41 New shop: CAC $90 (10 h rep time $60 + welcome credit $30) Ramp 3, 5, 7, then 9 orders a month; 98% of shops stay each month Cohort payback: month 4 LTV 36 months, discounted: about $830 Fixed: partner squad $480,000 a year Covered at about 109,000 extra app orders a year (2,100 a week)
Bring it to your team
Ask these whenever a cost per order or a growth plan reaches a budget review.
- Which lines in this cost per order change if we take one more order, and which are allocations?
- What is our marginal cloud cost per order, and how much of the bill is a base load?
- For business customers, how many days do they really take to pay, and is the cost of credit in the numbers?
- What is CAC per channel, and in which month does each channel's cohort pay back?
- Is LTV built on contribution, discounted, and capped at a horizon we can defend?
- Which fixed costs does this channel's total contribution need to cover, and at what volume?
Red flags
- A "fully loaded cost per order" used to decide whether to take more orders.
- A cost per order that changes a lot when someone changes the allocation key.
- LTV on revenue or basket value, or with no horizon for customers who stay for years.
- One blended CAC for every channel or city.
- Payback calculated as CAC ÷ monthly contribution with no churn.
- B2B unit economics that ignore payment days.
Practice
Contribution per partner order, by channel
The table partner_order holds a sample of one week's partner orders: channel is 'app' or 'phone', value_cents is the order value and corrected is true if the order needed a correction after delivery. Use these constants: wholesale margin 7% of value, delivery drop 1100 cents, handling 100 cents for a phone order and 20 cents for an app order, and 900 cents for each corrected order. Return one row per channel with channel, orders (the count) and avg_contribution_cents: the average contribution per order after margin, drop, handling and corrections, rounded to whole cents. Leave the cost of credit out.
CREATE TABLE partner_order (id int PRIMARY KEY, channel text, value_cents int, corrected boolean); INSERT INTO partner_order VALUES (1, 'app', 24000, false), (2, 'app', 31000, false), (3, 'app', 18000, false), (4, 'app', 27500, false), (5, 'app', 22000, true), (6, 'app', 26500, false), (7, 'app', 25000, false), (8, 'app', 29000, false), (9, 'phone', 25000, false), (10, 'phone', 30000, true), (11, 'phone', 21000, false), (12, 'phone', 26000, false), (13, 'phone', 19500, true), (14, 'phone', 28500, false);
-- Average contribution per order by channel (cents, rounded)
-- margin 7% of value, drop 1100, handling: phone 100, app 20,
-- each corrected order costs 900 more
SELECT channel,
count(*) AS orders,
round(avg(value_cents * 0.07 - 1100)) AS avg_contribution_cents
FROM partner_order
GROUP BY channel;
[{"channel": "app", "orders": 8, "avg_contribution_cents": 544}, {"channel": "phone", "orders": 6, "avg_contribution_cents": 250}]
Show a solution
SELECT channel,
count(*) AS orders,
round(avg(value_cents * 0.07 - 1100
- CASE WHEN channel = 'phone' THEN 100 ELSE 20 END -- handling
- CASE WHEN corrected THEN 900 ELSE 0 END -- fixing errors
)) AS avg_contribution_cents
FROM partner_order
GROUP BY channel;Each order's costs are subtracted inside avg(), so the corrections are spread over all orders in the channel, exactly like the $0.75 average in the lesson. This sample's phone orders had 2 corrections in 6, far more than the usual 1 in 12, which is why they earn only $2.50 here. A small sample can mislead, so check the count before you trust an average.
Should reps get a sign-up bonus in a new city?
For 2027, the head of partner sales proposes a $60 bonus for each shop a rep signs in a new city, on top of the usual $90 CAC. Shops there are off the current routes, so each drop costs about $14 instead of $11. Assume new-city shops order in the app at $250 an order, about 6 orders a month from the first month, pay after 23 days (credit cost $1.89 an order), and 98% stay each month. Calculate the contribution per order and per month, the CAC, the simple payback and the cohort payback month, and recommend what to change first. Then check what happens if the drop cost falls back to $11.
- Your contribution per order uses margin, drop, cost to serve and credit (about $1.41)
- You put the bonus in CAC ($150) and count it once
- Your payback counts churn (about month 22), not only CAC ÷ monthly contribution (about 18 months)
- You find that the drop cost moves payback far more than the bonus does
- Your recommendation names a lever, its owner and a result that would make you stop or scale
Show a model answer
Per order 17.50 - 14.00 drop - 0.20 serve - 1.89 credit = $1.41
Per month 6 orders x $1.41 = about $8.46
CAC $90 + $60 bonus = $150
Simple payback 150 / 8.46 = about 18 months
Cohort payback (98% stay each month) = month 22
LTV, 50-month lifetime, undiscounted 8.46 x 50 = about $423 (2.8 : 1)
Without the bonus (CAC $90) cohort payback month 12
Drop back to $11, with the bonus $4.41 x 6 = $26.46 a month, payback month 6The drop cost matters far more than the bonus. At $14 a drop, each order keeps only $1.41, and even without the bonus a shop takes a year to pay back. Bringing the drop to $11 makes the bonus affordable, with payback in month 6. Recommend that the head of partner sales and the DC transport lead sign shops along a few dense clusters first, so trucks can add drops to existing routes, and pay the bonus only in those clusters. Review after three months: scale if drop cost in the clusters is near $11 and shops order about 6 times a month; stop the bonus if drops stay above $13.
Check yourself
A music streaming service spreads its $50M a year of engineering and office costs over 10 million subscribers and says each subscriber "costs" $0.42 a month on top of royalties. It wants to drop a $3 student plan whose royalties and payment fees are $2.40 a month. What should the finance partner say?
The $0.42 is an allocation of fixed costs. Remove the plan and those costs remain, spread over fewer subscribers. The decision rests on contribution ($3 − $2.40 = $0.60) and on whether students would move to a dearer plan instead. Changing the allocation key only changes the slide, not the cash.
A wholesale distributor sells $400 orders at a 6% margin. Shops pay on average 60 days after delivery and the company's cost of money is 10% a year. Roughly how much of the order's margin does credit consume?
$400 × 10% × 60 ÷ 365 is about $6.58, out of a $24 margin. A receivable is an asset, but it is cash the company cannot use for 60 days, and that has a cost. $24 confuses the yearly rate with the cost for 60 days.
A meal-kit company's deck says CAC payback is 3 months: CAC $60, and an active customer brings $20 of contribution a month. Half of new customers cancel after the first month, and the rest stay about 10 months. What is the strongest objection?
Per original customer, the cohort earns $20 in month 1, then about $10 a month while half remain, so it reaches $60 in month 5. The quick formula assumes nobody leaves. Discounting matters little over a few months, and comparing with revenue is the revenue-LTV mistake.
Flashcards
Key takeaways
- Contribution uses variable costs only. Technology's marginal cost for an app order is up to about $0.12 of cloud; the $1.11 "fully loaded" figure is an allocation.
- A $250 partner order keeps $6.30 in the app and $4.75 by phone; 23 days of credit then take about $1.89 from both.
- Calculate CAC and payback per channel and per cohort: social ads at $19 never pay back an app customer, while a $90 partner shop pays back in month 4.
- Build LTV on contribution, discount it and cap the horizon when customers stay for years; never use revenue.
Sources and further reading
- The Dangerous Seduction of the Lifetime Value (LTV) Formula, Bill Gurley, Above the Crowd, 2012
- SaaS Metrics 2.0: A Guide to Measuring and Improving What Matters, David Skok, For Entrepreneurs
- Contribution Margin: Definition, Overview, and How To Calculate, Investopedia
- Days Sales Outstanding (DSO), Investopedia