CM1, CM2 and CM3
Three layers of contribution margin that show what's left of each rupee of revenue after fulfilment, then ad spend, then operating costs. CM1 tells you what you can afford to spend on ads. CM2 tells you whether the ads paid off. CM3 tells you whether the business is actually making money.
Fulfilment covers COGS, shipping, payment gateway fees and handling. Operational costs (team, warehouses, software) are allocated per order: total operational cost รท orders in the period.
What are CM1, CM2 and CM3?
Revenue tells you how much came in. It says nothing about how much you keep. Two products can sell for the same price and leave very different amounts behind once you pay for the product, ship it, collect the money, pay for the ad that sold it and keep the lights on.
Contribution margin peels those costs away in layers. Each layer answers a different question, and each one belongs to a different team.
How it's calculated
Start from net revenue, the money customers actually paid you after discounts, GST, cancellations and RTO, then subtract costs in three layers.
| Input | Where it comes from | Layer |
|---|---|---|
| net_revenue | Shopify orders, after discounts, GST, cancellations and RTO | Starting point |
| cogs | Unit cost per SKU, entered by the brand | CM1 (fulfilment) |
| shipping | Shipping partner invoices, including the return leg on RTO orders | CM1 (fulfilment) |
| gateway_fees | Payment gateway or COD remittance charges | CM1 (fulfilment) |
| handling | Packaging and pick-pack cost per order | CM1 (fulfilment) |
| ad_spend | Meta, Google and other ad platforms | CM2 |
| operational_cost | Team salaries, warehouses and software for the period, divided by orders in the period | CM3 |
Tracking it by SKU, not just in total
A brand-level CM1 averages your best and worst products together. The decisions happen at SKU level: which product to push in ads, which bundle to build, which one to stop discounting. CM3 is the exception: operational costs are shared, so it's read per month at brand level.
- 1Cost every SKUEnter unit COGS per variant. Until you do, sensible defaults keep the numbers usable.
- 2Use actual fulfilmentPull shipping costs and RTO outcomes from your logistics partners, matched to each order.
- 3Split multi-item ordersAllocate shared shipping and fees across the SKUs in an order rather than charging them to one.
- 4Allocate overheads monthlyDivide the month's team, warehouse and software cost by the month's orders to get the operational cost each order carries for CM3.
BooleanMaths calculates CM1 for every SKU, using default costs until you enter your own, and takes CM2 down to campaign level by subtracting attributed ad spend.
Worked examples
Example 1: Where โน1,000 of revenue goes
An illustrative order with โน1,000 of net revenue, from a brand that spends โน30,00,000 a month on team, warehouse and software and ships 15,000 orders a month.
| Line | Amount | % of net revenue |
|---|---|---|
| Net revenue | โน1,000 | 100% |
| Fulfilment: COGS โน300, shipping โน80, gateway โน20, handling โน30 | โโน430 | 43% |
| CM1 | โน570 | 57% |
| Ad spend | โโน300 | 30% |
| CM2 | โน270 | 27% |
| Operational cost per order (โน30,00,000 รท 15,000) | โโน200 | 20% |
| CM3 | โน70 | 7% |
- CM1 57%Every โน1 of ad spend needs to bring back at least โน1.75 of net revenue just to break even. That 1.75 is this brand's break-even ROAS.
- CM2 27%After paying โน300 in ads to win the order, โน270 is left. Marketing earned its keep on this order.
- CM3 7%Each order carries โน200 of overhead today. At 30,000 orders a month with the same team and warehouse, that falls to โน100 and CM3 rises to โน170 per order.
Example 2: The better product margin isn't always the better CM1
Two illustrative SKUs from the same brand. Shipping, gateway and handling cost about the same per order whatever the price, so they hit the cheaper product much harder.
Using contribution margin to decide
Read CM1 by SKU, CM2 by campaign and month, and CM3 at brand level each month. These rows are starting points; tune them to your category and cash position.
Common mistakes
- Starting from gross revenueGST, discounts and RTO orders were never yours. Start from net revenue or every margin is inflated.
- Forgetting the RTO shipping legFailed COD deliveries cost two-way shipping. Leave that out of fulfilment and COD-heavy products show a CM1 they don't have.
- One brand-wide CM1An average hides the SKUs that lose money on every ad-driven order.
- Reading CM3 per campaignOperational cost is shared across all orders. Judge campaigns on CM2 and the business on CM3.
- Mixing up the layer namesOther teams draw the layers differently. Write down your definitions so finance and marketing compare the same number.
Frequently asked questions
Is CM1 the same as gross margin?
No. Gross margin usually stops at the cost of the product. CM1 also takes out shipping, payment gateway fees and handling, so it's lower and closer to what each order really leaves you.
Where do influencer and agency fees go?
If they scale with how hard you push acquisition, treat them like ad spend and take them out in CM2. Fixed retainers sit better in operational cost for CM3. Pick one rule and keep it.
How does CM1 connect to break-even ROAS?
Break-even ROAS is 1 divided by CM1 as a share of net revenue. At 57% CM1 you need a ROAS of about 1.75, measured on net revenue, for CM2 to stay above zero.
Why does CM3 improve as we grow?
Operational costs are divided by the number of orders. If the team and warehouse stay the same size while orders double, each order carries half the overhead, so CM3 per order rises even when CM2 per order is flat.
What if I don't know my exact costs yet?
Start with reasonable defaults and replace them as you go. A rough CM1 by SKU beats a precise revenue number for deciding where ad money goes.
See contribution margin for every SKU
BooleanMaths calculates CM1 at SKU level from your orders, shipping and RTO data, and CM2 after attributed ad spend, so you know which products and campaigns are worth putting money behind.