RTO and COD in Indian D2C: Your ROAS Is Wrong Until Delivery Confirms
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 JourneyOrder 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.
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.
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.
Three things happen between the dashboard number and your bank account, and each one is invisible in standard reporting:
- RTO removes a fifth to a third of orders outright.
- Reverse logistics charges you for the privilege, on orders that produced nothing.
- 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
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.
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 FlowPrepaid 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.
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.
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.
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.
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:
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 HierarchyBreakeven 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.
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.
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.
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.
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.
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.