Profit metric

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.

Source: Shopify, shipping partners, ad platforms, your cost sheetComputed: Per order, rolled up by SKU and monthBetter when: HigherAlso called: Contribution margin 1, 2, 3
Formula
CM1 = Net revenue โˆ’ Fulfilment costs
CM2 = CM1 โˆ’ Ad spend
CM3 = CM2 โˆ’ Operational costs

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.

Updated November 2026 ยท 6 min read
01

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.

CM1 ยท after fulfilmentWhat each order leaves once the product is made, shipped and paid for. The pool ad spend comes out of. Owned by product, sourcing and operations.
CM2 ยท after adsProfit after acquisition. The number that says whether marketing is earning or burning. Owned by marketing.
CM3 ยท after operationsWhether the business makes money once team, warehouses and software are paid for, spread across every order.
02

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.

InputWhere it comes fromLayer
net_revenueShopify orders, after discounts, GST, cancellations and RTOStarting point
cogsUnit cost per SKU, entered by the brandCM1 (fulfilment)
shippingShipping partner invoices, including the return leg on RTO ordersCM1 (fulfilment)
gateway_feesPayment gateway or COD remittance chargesCM1 (fulfilment)
handlingPackaging and pick-pack cost per orderCM1 (fulfilment)
ad_spendMeta, Google and other ad platformsCM2
operational_costTeam salaries, warehouses and software for the period, divided by orders in the periodCM3
CM1 %CM1 รท Net revenueShare of each rupee available for ads, overheads and profit.
Break-even ROAS1 รท CM1 %The ROAS at which ad spend eats exactly all of CM1, leaving CM2 at zero.
Operational cost per orderOperational costs รท OrdersWhat each order has to carry in team, warehouse and software cost. Falls as volume grows.
Why judge marketing on CM2, not revenue?Marketing doesn't control COGS or courier rates, but it does control which products and customers it brings in and what it pays for them. CM2 is what's left after the ads, so it shows directly whether spend is earning or burning. A team chasing revenue will happily scale a low-margin, high-RTO product and call it growth.
03

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.

  1. 1Cost every SKUEnter unit COGS per variant. Until you do, sensible defaults keep the numbers usable.
  2. 2Use actual fulfilmentPull shipping costs and RTO outcomes from your logistics partners, matched to each order.
  3. 3Split multi-item ordersAllocate shared shipping and fees across the SKUs in an order rather than charging them to one.
  4. 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.

04

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.

LineAmount% of net revenue
Net revenueโ‚น1,000100%
Fulfilment: COGS โ‚น300, shipping โ‚น80, gateway โ‚น20, handling โ‚น30โˆ’โ‚น43043%
CM1โ‚น57057%
Ad spendโˆ’โ‚น30030%
CM2โ‚น27027%
Operational cost per order (โ‚น30,00,000 รท 15,000)โˆ’โ‚น20020%
CM3โ‚น707%
From โ‚น1,000 to โ‚น70Margin leftCost taken out
Net revenueFulfilmentCM1Ad spendCM2OperationsCM3
  • 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.

SKU A ยท โ‚น1,200 comboPush in ads
Product margin70%
CM152%
Break-even ROAS1.94
COGS โ‚น360, shipping, gateway and handling โ‚น220. CM1 is โ‚น620 per order, so ads can cost more and still leave CM2 positive.
SKU B ยท โ‚น600 singleNeeds a higher bar
Product margin75%
CM142%
Break-even ROAS2.40
COGS โ‚น150, shipping, gateway and handling โ‚น200. Its product margin looks better, but CM1 is only โ‚น250, so it needs a 2.40 ROAS to break even against SKU A's 1.94.
05

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.

Healthy
You seeCM2 positive on campaigns and CM3 rising as order volume grows.
Do thisKeep scaling, and lean spend towards the SKUs with the highest CM1 per order.
Watch
You seeCM1 % slipping month on month while ROAS holds.
Do thisFulfilment is the leak, and your break-even ROAS just went up. Check RTO by campaign, COD share and courier rates before touching ads.
Act now
You seeCM2 negative on acquisition campaigns and no repeat purchase to recover it.
Do thisGrowth is buying losses. Cut spend on SKUs below break-even ROAS, raise AOV with bundles, or reprice.
Expected
You seeCM2 positive but CM3 negative while order volume is still low.
Do thisOverheads aren't spread over enough orders yet. Volume is the lever, so keep scaling profitable campaigns and hold fixed costs flat.
06

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.
07

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.