In short
- Most RTO is decided at three moments: when the order is placed, before it is shipped and when the first delivery attempt fails.
- A WhatsApp or IVR confirmation step for COD orders, run before the shipping label is created, stops many unwanted orders from ever leaving the warehouse.
- NDR responses need to reach the buyer within hours, not days, because couriers typically make a limited number of attempts before marking a parcel RTO.
- Prepaid nudges work best as a small, clear incentive shown at checkout, and hiding COD for risky carts is possible on any plan through public Shopify Functions apps.
- Measure RTO by pincode, product, traffic source and payment method so you fix the real cause rather than applying blanket rules.
To reduce RTO on Shopify, you need to intervene at three points: confirm cash on delivery orders before they ship, respond to failed delivery attempts (NDRs) within hours, and give buyers a clear reason to prepay at checkout. Each of these can be automated with tools you probably already use, such as Shopify Flow, your shipping aggregator and WhatsApp.
The rest of this guide shows how to set up each automation, what to measure and where brands usually go wrong.
- Before dispatch: verify every COD order by WhatsApp or IVR and cancel the ones that do not confirm.
- During delivery: treat each NDR as a live sales conversation and get the buyer's answer back to the courier fast.
- At checkout: nudge buyers to prepay with a small incentive and limit COD on high-risk carts.
- Always: measure RTO by pincode, product, channel and payment method, not as one blended number.
Why RTO hurts more than it looks
A returned COD parcel costs you forward shipping, return shipping, packaging and often a damaged or unsellable product. It also locks up inventory for one to three weeks while the parcel travels back. None of that shows up in your Shopify sales report, which still counts the order.
Here is a worked example. Say you ship 3,000 COD orders a month with an average order value of ₹1,200, and forward plus return shipping costs you ₹140 per returned parcel. If 25% of COD orders come back, that is 750 parcels and ₹1,05,000 a month in shipping alone, before product damage and staff time. Bringing that to 18% would save roughly ₹29,000 a month in shipping and put about 210 more delivered orders on your books. Your own numbers will differ, but the maths shows why small percentage gains matter.
Step 1: Find where your RTO actually comes from
Before automating anything, export 90 days of orders with delivery status from your shipping panel and join them to Shopify order data. Then break RTO down by:
- Payment method: COD versus prepaid.
- Pincode and state: a handful of pincodes often drive a large share of returns.
- Traffic source: UTM source and campaign. Some ad audiences produce impulse orders that never get accepted.
- Product and price band: high-ticket COD orders and certain SKUs behave very differently.
- Courier: compare RTO for the same pincodes across couriers.
- Customer history: first-time buyers versus repeat buyers, and phone numbers with previous RTOs.
This tells you which rules to build. If one campaign has double the RTO of the rest, fix the targeting before you add friction for everyone.
Step 2: Verify COD orders before they ship
COD verification is the single most direct lever. The goal is simple: no COD order gets a shipping label until the buyer has confirmed it.
How the workflow runs
- A new order is created in Shopify with a COD payment method.
- Shopify Flow (or a webhook to your automation tool) tags the order cod-unverified and places it on hold so your shipping app does not pick it up.
- Within a few minutes, a WhatsApp template goes to the buyer with the order summary and two quick-reply buttons: Confirm or Cancel.
- If the buyer confirms, the tag changes to cod-verified and the order is released for fulfilment.
- If there is no reply after a set time (for example, 6 hours), an automated IVR call or a second message goes out.
- If there is still no response after 24 to 36 hours, the order is cancelled or moved to a manual call queue, depending on its value.
Shopify Flow is available as a free app on the Basic, Grow, Advanced and Plus plans, but its Send HTTP Request action, which you need to call a WhatsApp provider directly, is limited to Grow, Advanced and Plus, according to the Shopify Help Center. On Basic, use a WhatsApp app that listens to Shopify order events itself.
Keep messaging costs predictable
Meta moved the WhatsApp Business Platform to per-message pricing from 1 July 2025. Utility templates sent inside an open customer service window are free, but a confirmation message that starts the conversation is charged as a utility template, as explained in Meta's pricing documentation. Classify your confirmation template as utility, not marketing, and keep promotional content out of it.
Add address quality checks
While you are verifying, check the address too. Flag orders where the address line is very short, lacks a house or building number, or the pincode does not match the city. Ask the buyer to reply with a landmark in the same WhatsApp thread. Clean addresses reduce NDRs later.
Step 3: Treat every NDR as a sale you can still save
An NDR (non-delivery report) is raised when the courier fails to deliver. Common reasons include buyer not reachable, premises closed, address incomplete or buyer refused. Shiprocket notes that couriers make a maximum of three attempts before marking the shipment RTO, and it already sends automated SMS and IVR follow-ups to buyers for reasons such as buyer not contactable, as described on the Shiprocket blog.
You can go further with your own automation:
- Subscribe to courier or aggregator tracking webhooks so NDR events reach your system in near real time.
- Send the buyer a WhatsApp message with the reason and three options: reattempt today or tomorrow, update address or phone, or choose a preferred date.
- Push the buyer's choice back to the courier. Delhivery's NDR API, for example, supports re-attempt, edit details and deferred delivery (up to six days from the first pending date), per the Delhivery API reference.
- If the buyer does not respond within a few hours, route high-value orders to a human caller.
- For refused-at-door cases, record the phone number so repeat offenders can be blocked from COD.
We cover the full NDR playbook, including message templates and escalation rules, in a separate guide on NDR management in this series.
Step 4: Nudge buyers to prepay
Every order that switches from COD to prepaid removes most of its RTO risk. The nudge should be visible, simple and honest.
| Tactic | Where it shows | What to watch |
|---|---|---|
| Prepaid discount (for example ₹50 or 5% off) | Product page, cart and payment step | Margin impact versus RTO saved |
| Small COD handling fee | Payment step, clearly labelled | Conversion drop on COD-heavy segments |
| Faster dispatch or free gift for prepaid | Cart and checkout banner | Fulfilment capacity |
| COD to prepaid conversion link | Post-purchase WhatsApp message | Share of COD orders converted |
| COD limit on large carts | Checkout payment options | Abandonment on high-value carts |
The post-purchase link is underused. After a COD order is confirmed, send a UPI payment link offering a small cashback if the buyer pays now. Buyers who have already committed are often happy to pay by UPI, and the order becomes prepaid before it ships.
Hiding COD for risky carts
To hide or restrict COD based on cart value, pincode or customer tag, you need a payment customisation. Shopify's help pages confirm that public apps built on Shopify Functions work on Basic and higher plans, while custom apps built on Functions need Shopify Plus (see checkout customisation). Typical rules include no COD above ₹5,000, no COD for pincodes with very high historical RTO, and no COD for phone numbers tagged after previous refusals.
Step 5: Build a simple RTO scorecard
Automations need a feedback loop. Review these numbers every week:
- COD share of orders and COD confirmation rate.
- Orders cancelled at verification (these are RTOs you avoided).
- NDR rate, NDR response rate and NDR-to-delivered rate.
- RTO rate by payment method, courier, pincode cluster and campaign.
- Net delivered revenue, which is the figure that actually pays the bills.
Feed RTO data back into your ad platforms too. If you send only delivered orders as conversions, or use value rules that discount COD, your campaigns learn to find buyers who actually accept parcels. Our guide on why Shopify tracking can mislead you explains how to set that up.
Common mistakes to avoid
- Verifying after the label is created. If the courier has already picked up, cancellation costs you shipping anyway.
- Using marketing templates for confirmations. They cost more and may be blocked by users who opt out of promotions.
- Blanket rules. Blocking COD for a whole state when three pincodes cause the problem loses good customers.
- No human fallback. High-value orders deserve a phone call when automation gets no reply.
- Ignoring the courier. If one courier has far worse RTO for a region, change the allocation rule.
Get your RTO automations built properly
COD verification, NDR follow-ups and prepaid nudges are not complicated individually, but connecting Shopify, your courier, WhatsApp and reporting reliably takes careful setup. TNM designs and builds these workflows for Indian D2C brands, from order tagging and payment rules to courier webhooks and weekly RTO dashboards. See our AI workflow automation service to talk through your current RTO numbers.
Frequently asked questions
There is no single benchmark you can rely on, because RTO varies widely by category, price point, region and the share of COD orders. The useful comparison is against your own history. Track RTO separately for COD and prepaid orders, by courier and by pincode, and aim to bring the worst segments down first rather than chasing an industry average.
Usually not. For many Indian categories, removing COD cuts conversion more than it saves on returns. A better approach is to keep COD but add friction where risk is high: confirmation messages, COD limits on large carts, COD blocked on repeat-RTO phone numbers or pincodes, and a small prepaid incentive. Test the impact on net delivered revenue, not just orders.
A small COD handling fee can shift some buyers to prepaid and discourage impulse orders, but it can also lower conversion. Frame it transparently at checkout, keep it modest, and test it against a prepaid discount of similar value. Some buyers respond better to a reward for paying online than to a charge for paying cash, so measure both.
Yes. Shiprocket already sends automated SMS and IVR follow-ups for common NDR reasons, and Delhivery offers an NDR action API for reattempts and address edits. A lightweight setup uses courier webhooks, a WhatsApp Business API provider and a simple workflow tool to message the buyer and push their choice back to the courier.
You can usually see the effect of COD confirmation within the first few weeks, because cancelled orders stop being shipped immediately. NDR and prepaid-nudge improvements take longer to read, because you need enough delivered and returned orders to compare. Plan for at least one full month of clean data before and after each change.