RTO in Indian Ecommerce: What It Costs and How to Reduce It
Every return-to-origin parcel costs you forward freight, reverse freight and handling, with no revenue to show for it. Here is the real maths of RTO, why it happens, and the checkout fixes that bring it down.

A delivered order earns you margin. A cancelled order earns you nothing. An RTO order — one that ships, fails delivery and comes back — costs you money. For COD-heavy Indian stores, return to origin is often the largest controllable leak in the P&L, and most of it can be fixed before the parcel is ever packed.
What RTO means
RTO stands for return to origin. The courier attempts delivery (usually two or three times), fails, and sends the parcel back to your warehouse. It is different from a customer return: the buyer never accepted the parcel, so there is no sale to refund — only freight to pay.
What one RTO actually costs
Take a ₹1,200 COD order weighing 1 kg, shipped from Delhi (110001) to Patna (800001) on the rest-of-India lane.
- Forward freight: base ₹65 + ₹46 for 1 kg = ₹111
- Fuel surcharge at 12%: ₹13, giving ₹124
- GST at 18%: ₹22, so the forward leg is about ₹147
- Return leg: commonly billed at or near the forward rate, so roughly another ₹147
- Repacking, quality check and handling: say ₹25
That is around ₹320 spent to earn nothing. The COD fee (around ₹35 plus 1.5% of order value) is usually charged only when cash is collected, but check your contract — some rate cards bill it on attempt.
Now look at what it does to a month. Assume a 40% gross margin (₹480 per order) and a delivered COD shipping cost of ₹209 per order, so each delivered order contributes ₹271.
- At 15% RTO: 85 delivered × ₹271 minus 15 returned × ₹320 = ₹18,235 per 100 orders, or ₹182 per order shipped
- At 25% RTO: 75 × ₹271 minus 25 × ₹320 = ₹12,325, or ₹123 per order shipped
Ten points of RTO removed a third of the contribution. No ad optimisation gives you that back.
Why parcels come back
RTO rates vary widely by category and audience — it is common to hear figures in the 20–30% range for COD-heavy impulse categories, and low single digits for prepaid orders. The causes are consistent:
- COD refusals. The buyer changed their mind, found it cheaper elsewhere, or was never serious. Nothing was paid, so nothing is lost by refusing.
- Bad addresses. Missing house numbers, wrong landmarks, a pincode that does not match the city.
- Unserviceable or poorly served pincodes. The order was accepted for a pincode the carrier reaches rarely or not at all.
- Customer not reachable. Wrong phone number, or nobody home across three attempts.
- Slow delivery. The longer a COD parcel takes, the more likely the buyer has moved on.
How to reduce it
1. Check the pincode before you take the order
Do not accept orders you cannot deliver well. A serviceability check at address entry blocks unserviceable pincodes and tells you the expected delivery window, so the promise matches the lane.
2. Validate the address while it is being typed
Auto-fill city and state from the pincode and reject mismatches. A six-digit pincode that resolves to the right post office removes a whole class of "address not found" failures. You can test any pincode with the pincode lookup tool.
3. Price COD honestly
Show the COD fee as its own line at checkout. A visible ₹53 fee on a ₹1,200 order filters out casual orders and nudges serious buyers to prepaid. Our COD cost guide covers the pricing patterns.
4. Confirm COD orders before dispatch
A WhatsApp or IVR confirmation within an hour of ordering catches wrong numbers and regret before you pay forward freight. Cancelling at this stage costs nothing.
5. Gate COD by pincode, not by state
Track RTO per pincode. Where a pincode has a chronic refusal history, offer prepaid only, or cap the COD order value. A blended national RTO number hides exactly the pockets that are hurting you.
6. Shorten and state the delivery window
Tell the buyer the realistic date and hit it. Send the tracking link and an out-for-delivery message so someone is home.
Put the cost in your order flow
The cheapest way to make RTO visible is to compute the freight at the time of the order. One call returns the lane, the SLA and every charge:
POST /v1/rates/calculate
{
"origin": "110001",
"destination": "800001",
"weight_grams": 1000,
"payment_mode": "cod",
"order_value": 1200
}
Store the forward cost against each order. When a parcel comes back, you know its loss in rupees, by pincode, and you can decide where COD stays switched on. The free plan includes 1,000 rate calls a month — sign up and price last month's RTO orders to see your own number.
Frequently asked questions
What is RTO in ecommerce?
RTO means return to origin: a shipped parcel that could not be delivered and is sent back to the seller's warehouse. It differs from a customer return because the buyer never accepted the order. The seller pays freight in both directions and earns no revenue.
Who pays for RTO charges?
The seller does. The courier bills the forward leg and the return leg, and the return is commonly priced at or close to the forward freight. That is why a single RTO can cost more than twice the shipping of a delivered order.
How can I reduce RTO on COD orders?
Start at checkout: verify pincode serviceability, auto-fill city and state, and show the COD fee clearly. Then confirm COD orders before dispatch and restrict COD on pincodes with a poor delivery history. Faster, accurately promised delivery reduces refusals further.
