Metric Explainers

RTO and COD in Indian D2C: Your ROAS Is Wrong Until Delivery Confirms

By Chinmay Raibagkar·August 28, 2026·12 min read·Some SQL

The 60-second version

A cash-on-delivery order is a promise, not revenue. With RTO rates running 15-35%, order-time ROAS overstates reality by a third — here is how to measure delivered ROAS instead.

  • What happened, in one line
  • What to do about it this week
  • What you can safely ignore

Your Meta dashboard says the campaign did 3.2x. Your Shopify store agrees: ₹32,00,000 in orders against ₹10,00,000 of spend.

Eleven days later, 1,400 of those orders have come back undelivered. The customer never paid — they never had to, because it was cash on delivery — and you paid the courier twice, once out and once back. The campaign's real return is not 3.2x. It is closer to 2.2x on revenue and, once the reverse logistics are counted, meaningfully below breakeven.

This is not an edge case in Indian D2C. It is the default condition, and almost no reporting stack accounts for it.


Why this is structurally different

A COD order is a promise, not a transaction. In a prepaid business, checkout and payment are the same event — when the order exists, the money exists. In a COD business they are separated by 4 to 9 days, a courier, and a customer who has committed nothing and can decline at the door at zero cost. Every metric that treats order creation as revenue is measuring intentions.

Where the Money Actually Is

Data Journey
Stage 1Day 0
Order placed

Ad platform books a conversion at full basket value. Shopify records an order. Nothing has been paid. This is the number your dashboard shows.

₹32,00,000 'revenue'
Stage 2Day 4–9
Delivery attempted

Some share is refused, unreachable, or has a wrong address. Those orders return to origin. You pay forward and reverse shipping on every one.

−22% RTO, −₹31L of orders
Stage 3Day 12–21
Cash remitted

The courier remits collected cash on its own cycle, typically weekly or fortnightly, net of its charges. Only now does revenue become cash.

₹24,96,000 realised

Three things happen between the dashboard number and your bank account, and each one is invisible in standard reporting:

  1. RTO removes a fifth to a third of orders outright.
  2. Reverse logistics charges you for the privilege, on orders that produced nothing.
  3. Remittance lag means even successful COD revenue arrives one to three weeks after the order, which is a working-capital problem separate from the profitability one.

The three numbers you actually need

Most Indian D2C reporting has one number: order-time ROAS. Here are the three that replace it.

Delivered ROAS  = Delivered order revenue ÷ Ad spend
Realised ROAS   = (Delivered revenue − RTO costs) ÷ Ad spend
Contribution ROAS = (Delivered contribution margin − RTO costs) ÷ Ad spend

Each strips one more layer of fiction. The third has a threshold — below 1.0, the campaign consumed more than the gross profit it produced.

One campaign, four ROAS numbers

₹10,00,000 spend, 1,600 orders
Order-time ROAS3.20x₹32,00,000 of orders placed. The dashboard number.
Delivered ROAS2.50x22% RTO on the 68% COD share → ₹24,96,000 delivered
RTO cost drag−₹4,27,000239 RTOs × ₹190 round-trip freight, plus ₹35 handling and a 4% write-off on returned stock
Realised ROAS2.07xDelivered revenue minus the cost of the failures
Contribution margin₹7,73,00031% of delivered revenue, after COGS, freight, packaging and RTO costs
Contribution ROAS0.77xThe campaign consumed ₹2,27,000 more than the gross profit it created
From 3.2x to 0.77x without a single attribution argument. Every step is arithmetic on costs that already exist in your systems — freight bills, courier RTO reports, order line items. Nothing here is modelled or estimated.

The uncomfortable part: a team optimising to "keep ROAS above 3x" would call this campaign a marginal success and scale it.


Computing delivered ROAS

The join is straightforward once the courier status data is in the same place as the orders. The structural point is that an order's outcome is not known on the day it was placed, so any query grouping by order date must handle immaturity explicitly.

Delivered and Realised ROAS by Campaign

Show query

The maturity filter is not optional. Without WHERE order_date <= CURRENT_DATE() − 14, the last two weeks show artificially low delivered ROAS because the parcels have not landed yet. Teams that skip it pause campaigns that were working, based on data that had not finished arriving. Report a settled window and a separate in-flight view, never one blended series.


Reducing RTO, in order of effect

RTO is not weather. A large share of it is addressable, and the interventions have very different effort-to-return profiles.

RTO Reduction, Highest Return First

Process Flow
1

Prepaid incentive at checkout

A 5–10% discount for prepaid payment converts a share of COD orders into prepaid ones, and prepaid orders have a fraction of the RTO rate. Usually the single largest lever, and it is a pricing change rather than an engineering project.

2

Order confirmation before dispatch

An automated WhatsApp or IVR confirmation, with a cancel option, before the parcel ships. A customer who cancels pre-dispatch costs you nothing; the same customer refusing at the door costs full round-trip freight.

3

Address and phone validation at checkout

Pincode serviceability checks, phone-number format validation, and an OTP on the delivery number. A meaningful share of RTO is simply undeliverable data.

4

Block or restrict repeat RTO customers

RTO is heavily concentrated in repeat offenders. Flag customers with prior RTOs and require prepayment from them — a customer-level flag, not a blanket policy.

5

Segment campaigns by delivered performance

RTO rate varies enormously by pincode, product and creative. Once measured per campaign, budget can shift towards the segments that actually deliver.

That last point is where reporting turns into money. RTO is not evenly distributed:

Where RTO Actually Concentrates

Show query

The patterns this surfaces are consistent across most Indian D2C businesses: COD RTO rates are multiples of prepaid rates, low-AOV orders return far more often than high-AOV ones, and a minority of pincodes account for a disproportionate share of the cost. Campaign-level variation is often as large as the COD-versus-prepaid gap — which means creative and audience choices are quietly determining your RTO rate, and nobody is looking.


What this does to your targets

Everything downstream shifts, and shifts in the same direction.

Re-Deriving Your Targets for a COD Business

Reporting Hierarchy
Tier 1
Breakeven ROAS, RTO-adjusted

Breakeven divided by the delivery rate, plus the RTO cost drag. At 45% contribution margin and 22% RTO, breakeven moves from 2.22x order-time to roughly 3.1x — a 40% higher bar than the prepaid version of the same business.

1 ÷ (margin × delivery rate) + RTO drag
Tier 2
Platform bid targets

Platforms optimise on order-time conversions, because that is all the pixel sees. Set the in-platform tROAS to your RTO-adjusted breakeven, not your nominal one — otherwise the algorithm optimises towards a target that loses money.

tROAS = RTO-adjusted target
Tier 3
Payback and working capital

COD remittance lag adds one to three weeks to payback beyond what the contribution curve implies. The cash constraint is tighter than the margin arithmetic suggests.

Payback + remittance lag

Send delivery outcomes back to the platforms. Both Meta's Conversions API and Google's offline conversion import accept updated or reversed conversion values. Feeding RTO back means the bidding algorithm learns to find customers who actually accept deliveries, not just ones who click "Place Order". This is the highest-leverage use of the delivered-ROAS data you just built, and it is the step almost nobody takes.


Frequently asked questions

What RTO rate is normal?

It varies widely by category, price point and geography, so treat any single published figure with suspicion. What is consistent is the shape: COD rates are a large multiple of prepaid rates, low-AOV orders return more than high-AOV ones, and rates concentrate heavily in specific pincodes. Measure your own by segment — the segment variation is far more actionable than any benchmark.

Should I just stop offering COD?

Rarely the right answer. COD is a large share of the addressable market in India, and removing it removes those customers entirely rather than converting them to prepaid. The better move is to price the difference: a prepaid discount that is smaller than your per-order RTO cost is profitable on every order it converts, and costs you nothing on the ones it does not.

How do I handle orders still in transit?

Exclude them from settled reporting with a maturity filter, and show them separately as in-flight. Never blend a settled series with an immature one — that is what makes recent days look like a collapse and triggers panic-pausing of working campaigns.

Does RTO affect prepaid orders too?

Yes, but far less, and the economics differ: a prepaid RTO becomes a refund, so you return the money and eat the freight both ways, but the customer had committed something and self-selected as more likely to accept. Track them separately — blending prepaid and COD RTO rates hides the single most important segmentation in the dataset.

Where does the RTO cost belong — marketing or operations?

In contribution margin, which means it lands in both. It is a variable cost per order, so it reduces the margin every ROAS target is derived from. Assigning it to operations and leaving marketing targets unchanged is exactly how a business runs campaigns that operations then loses money delivering.


The summary

  • A COD order is a promise, not revenue. Order-time ROAS measures intentions; delivery decides whether they became money.
  • Three numbers replace it: delivered ROAS (was it delivered), realised ROAS (net of RTO costs), contribution ROAS (net of everything, with a 1.0 threshold).
  • RTO costs are paid twice — forward and reverse freight — plus handling and a write-off on returned stock, on orders that produced nothing.
  • Always use a maturity filter. Reporting unsettled days makes working campaigns look broken.
  • RTO concentrates by payment method, AOV band, pincode and campaign — that last one means your creative choices are setting your RTO rate.
  • Re-derive breakeven ROAS on the delivery rate. At 45% margin and 22% RTO the bar rises roughly 40%, and every platform bid target should move with it.
  • Feed delivery outcomes back through the conversion APIs, so the algorithm optimises for customers who accept parcels rather than ones who click.
Free tool

Breakeven ROAS Calculator

Enter your gross margin to find the minimum ROAS at which a campaign stops losing money — and the target ROAS at a chosen profit goal.

CR

Chinmay Raibagkar

About author →

Founder of DataLens AI. He helps non-technical teams read their ad and database numbers with confidence — which number to trust, what to do next, and what to ignore.