Key Takeaways
  • ROAS is measured in the ad platform; contribution margin is measured in your bank account. Only one of them can fund salaries.
  • In an Indian D2C P&L, the four costs that break the ads-dashboard story are COGS, two-way shipping on RTO, customer returns, and discounts.
  • A COD order and a prepaid order are two different products with two different break-even ROAS targets — in the worked model below, 4.1x versus 2.8x.
  • Max allowable CAC is not a gut number. It is the blended contribution margin per order shipped, after RTO and returns.
  • A prepaid incentive is worth paying for only up to the margin gap it closes — ₹164 per order in the model below, not whatever the checkout app suggests.

A brand does ₹40 lakh a month at a blended 3.2x ROAS. The dashboards are green. The founder still cannot pay himself, and nobody in the growth meeting can say exactly why.

The answer is almost always the same: the business is being run against ROAS, a number the ad platform reports, instead of contribution margin per order, a number the bank confirms. Those two numbers agree only in a business with no returns, no cash on delivery, no discounts, and no shipping — which is to say, no Indian D2C brand.

This is the model we use to fix that. It is arithmetic, not opinion. Every rupee figure below is illustrative and labelled as such; the point is the structure, which you should re-run with your own numbers.

Why ROAS cannot answer the question you are asking

ROAS answers: for every rupee of ad spend, how much order value did the platform attribute to itself?

Three things are wrong with that as a business metric.

  1. It is attributed, not audited. Reported conversions depend on the attribution windows and attribution system you selected in the ad account (Meta Business Help Centre, “About Facebook’s attribution system”). Two brands with identical sales can report different ROAS.
  2. It is denominated in order value, not margin. ₹1 of order value on a heavily discounted, COD, tier-3 order is not ₹1 of order value on a prepaid repeat order.
  3. It stops counting at checkout. The expensive part of an Indian D2C order happens after checkout — the courier leg, the failed delivery, the return, the settlement fee.

ROAS is still useful as an in-platform optimisation signal. It is useless as a target until something outside the platform tells you what the target should be.

The definition

Contribution margin per order (CM) is the money left from one order after every cost that exists only because that order exists.

Fixed costs — rent, salaries, tools, retainers — are deliberately excluded. They are not caused by the order. Contribution margin is what the order contributes toward covering them.

CM (delivered, kept order)
  = Net revenue                 (collected value, after discount, net of GST)
  − Landed COGS
  − Pick, pack and materials
  − Forward shipping (actual courier invoice, not rate card)
  − Payment or COD collection fee

Then two haircuts that Indian brands cannot skip:

CM (blended, per order shipped)
  = (1 − RTO rate) × [ (1 − return rate) × CM − return rate × return cost ]
    − RTO rate × RTO cost

That second formula is the whole article. Everything below explains where its inputs come from and what it changes.

The cost lines that never make it into the ads meeting

Cost line Where it actually lives Why it gets missed
Landed COGS Purchase invoices, duty, inbound freight Teams use ex-factory cost, not landed
Pick, pack, materials 3PL invoice or in-house labour Treated as overhead, not per-order
Forward shipping Courier invoice with weight-slab corrections Rate card is quoted; invoice is billed
RTO — failed delivery Courier invoice, both legs, plus repack Hidden inside a monthly logistics bill
Customer returns Reverse pickup, QC, refurbishment, write-off Booked as “returns” against revenue, not per cohort
Payment fees Gateway settlement reports Netted at source, so nobody sees the line
COD handling Collection fee and remittance cycle Assumed to be “free money”
Discounts and coupons Order-level discount field Reported as a marketing cost, not a margin cut
Marketplace commission Channel settlement statement Compared against gross, not net

Two of those deserve their own numbers.

Payment fees are knowable, so know them. Razorpay’s published India pricing is a 2% platform fee on domestic instruments plus 18% GST on that fee, with no setup charge, no AMC and no refund processing fee (Razorpay Pricing, India, updated May 2026). If you are registered and claiming input credit, model the fee net of it. Whatever your provider, pull the number from a settlement report, not from the sales pitch.

RTO is the line that decides Indian D2C profitability. Shiprocket puts average Indian RTO at 20–25% of shipped orders, spiking to about 40% in COD-heavy verticals like fashion and footwear, with COD orders returning at 20–30% against 10–15% for prepaid, and the strongest operators holding under 10% through address verification and delivery flexibility (Shiprocket, “How RTO Protection Services Reduce E-Commerce Revenue Loss”, 29 August 2025). Use your own courier data; use these as a sanity check on whether your reported rate is plausible.

A worked example

One SKU. All figures illustrative and ex-GST unless stated.

Input Prepaid COD
Collected value (after 10% coupon) ₹1,529 ₹1,529
Net revenue (ex-GST at 18%) ₹1,295 ₹1,295
Landed COGS ₹515 ₹515
Pick, pack, materials ₹40 ₹40
Forward shipping ₹80 ₹80
Payment / COD fee ₹31 ₹40
CM per delivered, kept order ₹629 ₹620

Nine rupees apart. On the ads dashboard these two orders are identical twins. Now add the haircuts.

  • RTO cost per failed order: forward leg ₹80 + return leg ₹80 + repack and QC ₹30 + damage or write-down provision ₹20 = ₹210.
  • Customer return cost: sunk forward ₹80 + reverse pickup ₹80 + QC and refurbishment ₹40 = ₹200, and you also lose the margin on that order.
  • Rates used: prepaid 3% RTO, 8% returns. COD 25% RTO, 6% returns — COD returns are lower because refusal already happened at the door, where it was counted as RTO.

Blended contribution margin per order shipped:

Prepaid COD
CM per delivered, kept order ₹629 ₹620
After returns ₹563 ₹571
After RTO ₹540 ₹376

The same product, sold at the same price, through the same ad, is worth 30% less margin when it ships COD. Not 9 rupees less. One hundred and sixty-four.

What that does to your media targets

Break-even ROAS is not a number you feel. It is collected order value divided by contribution margin:

Break-even ROAS = Collected value ÷ Blended CM per order
Prepaid: 1,529 ÷ 540 = 2.8x
COD:     1,529 ÷ 376 = 4.1x

A campaign running at 3.5x ROAS is profitable on prepaid traffic and loss-making on COD traffic. That single fact reorganises a media plan.

Generalised, for any brand:

Blended CM as % of collected value Break-even ROAS ROAS needed to bank 10% of order value
20% 5.0x 10.0x
25% 4.0x 6.7x
30% 3.3x 5.0x
35% 2.9x 4.0x
40% 2.5x 3.3x
50% 2.0x 2.5x

Read the right-hand column before the next time someone calls a 4x campaign “great”.

Maximum allowable CAC = blended CM per order. Above it you are buying revenue with equity. In the model above, ₹540 on prepaid and ₹376 on COD.

You can also invert it to find the RTO rate at which a cohort stops paying for itself. At a ₹350 CAC on the COD cohort:

(1 − r) × 620 − r × 210 = 350
620 − 830r = 350
r = 32.5%

Above roughly a 33% RTO rate, that COD cohort is burning cash at a CAC the dashboard calls healthy. Festive-season traffic, new pincodes and aggressive discount codes are exactly the conditions that push a cohort past that line — which is why the number needs to be watched weekly, not quarterly.

The levers this model exposes

Once margin is the target, the highest-value levers stop being bid adjustments.

1. Payment mix is a margin lever, not an ops detail

Same model, brand at 60% COD:

0.6 × 376 + 0.4 × 540 = ₹442 blended CM

Shift to 40% COD:

0.4 × 376 + 0.6 × 540 = ₹474 blended CM

+₹32 per order, zero extra ad spend. That is the same effect as cutting CAC by ₹32 across every order you ship.

2. Prepaid incentives have a ceiling you can calculate

The margin gap between prepaid and COD is ₹164. So any incentive that converts a COD cart to prepaid is worth paying up to ₹164 — and not one rupee more.

A ₹75 prepaid discount on a switched order: ₹540 − ₹75 = ₹465, against ₹376 if it had shipped COD. +₹89 per switched order. A ₹200 “prepaid offer”, enthusiastically recommended by a checkout app, destroys ₹36 per order. The maths decides, not the app.

3. Creative and targeting can pre-qualify for margin

Discount-led hooks recruit discount-led buyers, who over-index on COD and on refusal at the door. Product-truth creative, size and fit confidence, and clear delivery expectations do not just lift conversion rate — they change the composition of who converts. Measure creative on contribution margin per shipped order, not on in-platform ROAS, and the ranking of your winners changes. That is a change to how a creative testing engine scores its results.

4. Pincode and courier rules are margin rules

RTO is not evenly distributed. Once orders are tagged with courier, pincode and payment method, the worst pockets are visible within a few hundred orders: restrict COD there, force verification, or route to the courier that actually delivers in that cluster.

5. Lifecycle converts the second order

A COD first order is acceptable if the second order is prepaid. That is a WhatsApp and email lifecycle job: delivery confirmation, prepaid nudge with the calculated incentive, and a reorder flow that defaults to prepaid. The same logic sits behind a D2C lifecycle system.

How to instrument it in 30 days

You need one order-level table. Nothing more exotic.

Fields: order ID · date · payment method · collected value · discount code · SKU and landed COGS at time of sale · courier · destination pincode and tier · actual shipping charged on the invoice · RTO flag · return flag · reverse-logistics cost · gateway settlement amount · first-order or repeat.

Week 1 — assemble. Export orders from the store, shipments from the courier panel, settlements from the payment gateway. Join on order ID. Where a join fails, fix the ID, do not average the gap.

Week 2 — compute. Contribution margin per delivered order, then blended per shipped order, split by payment method. Then by SKU. Then by channel.

Week 3 — set targets. Convert CM into break-even ROAS and maximum CAC per payment method and per channel. Publish them. Every campaign now has a target derived from the P&L instead of from last month’s screenshot.

Week 4 — act on the two worst cells. Usually a discount-code cohort and a COD pincode cluster. Fix those before touching anything else.

Two rules that keep this honest. Use actual invoices, not rate cards — weight-slab corrections and fuel surcharges are exactly where the modelled margin and the banked margin diverge. And wait for sample size: a cohort with 40 orders tells you very little about a 25% RTO rate. As a working rule of thumb, treat cohort-level RTO as directional until you have a few hundred shipped orders in it.

Where this model stops

Intellectual honesty is part of the method, so here are its limits.

  • It is CM1. Add marketing cost and you get CM2; add fulfilment overhead and variable team cost and you get CM3. Know which one you are quoting.
  • It ignores LTV by design. If your repeat rate is measured — not assumed — you may spend above first-order CM. “We have great LTV” without a cohort table is not a measurement.
  • It is seasonal. Festive RTO behaves differently from March RTO. Recompute after every major sale event.
  • It does not fix demand. A perfect margin model on a product nobody wants just tells you the truth faster.
  • It assumes your COGS is current. Fabric, freight and duty move. A stale COGS snapshot makes every downstream number wrong.

The same discipline, applied to ourselves

This is an argument about deciding from a measured number and refusing to promise what you have not measured. We hold our own work to it. When we rebuilt our own site’s organic search foundation, the honest baseline was 24 clicks in 90 days, and the recorded forecast explicitly refused to claim that the work would double clicks in 30 days. That case study, including the numbers we would not claim, is here: the dongolabs.com SEO rebuild.

FAQ

Is MER dead? No. Blended MER is a good spend-control ratio at the business level. The problem is never MER itself — it is picking a MER target by feel. Derive the target from contribution margin and MER becomes useful again.

Can I still optimise campaigns to ROAS inside the platform? Yes. Platform algorithms need an in-platform signal. Set the target from the CM model, and where the platform supports value rules, weight conversion value by payment method so the algorithm stops treating a COD order and a prepaid order as equals.

What if I sell mostly on marketplaces? Add the commission, fulfilment fee and marketplace return rate as additional lines. The structure is unchanged; the CM is usually lower, so the break-even ROAS is higher. Channel comparisons only become fair at the CM level.

How often should I rebuild the model? Monthly, and immediately after any change to shipping rates, COGS, discount policy or payment mix. It is a spreadsheet, not a project.

What if my RTO rate is already low? Then your margin lever sits elsewhere — usually discounts or COGS. Run the same table; the cost line with the largest gap between assumed and invoiced is where the money is. A free growth teardown is a fast way to find which line that is.

Sources

All rupee figures in the worked example are illustrative and labelled as such. They are structure, not benchmarks. Replace them with your invoices.

The short version

Buy media against contribution margin per order shipped, computed after RTO and returns, split by payment method. Convert it into a break-even ROAS and a maximum CAC per cohort. Then spend against those, and let ROAS go back to being what it always was — a dashboard reading, not a business result.

If you want this built on your data rather than explained again, that is what our performance marketing and CRO work starts with. Start a project.

Related: Google Ads vs Meta Ads for Indian D2C · Shopify conversion rate optimization guide · How to build a creative testing engine · Shopify development