Logistics & Shipping

Reducing RTO on cash-on-delivery orders

A returned COD parcel costs you freight in both directions, the packaging, the handling and days of stock nobody can sell. Here is where those returns come from and which lever moves each cause.

By Rehan Idrisi · · 7 min read

Part of: Logistics & Shipping

A cash-on-delivery parcel that comes back unopened costs more than the sale it failed to make. You paid to send it. You pay again to get it back. In between, a saleable unit sat in a van while your money sat inside it. The loss never arrives as one visible number: it spreads across freight both ways, packaging, handling, and days of stock nobody could sell.

What an RTO takes out of you

  • Forward freight, billed the moment the parcel leaves your dock, whether anyone accepts it or not.
  • Return freight, billed again on the way home, usually against the same weight slab.
  • Packaging spent on the first shipment and rarely fit to reuse.
  • Handling at both ends: picking and packing, then receiving, inspecting, restocking.
  • Days of stock in transit that nobody can sell, a second lost sale on a fast mover.
  • Working capital frozen inside a unit that is in neither your warehouse nor a customer's hands.

On a thin-margin SKU, one return erases the contribution from several successful orders. Your own rate card and product cost decide the damage, so put real numbers through the COD and RTO cost calculator on this site instead of assuming the loss equals the product cost.

Three different failures wearing one label

RTO is a reporting category, not a cause. Three unrelated problems land in it, and a fix aimed at one does nothing for the other two. Sort your returns before you spend anything on prevention.

The address was never deliverable

A missing floor or landmark. A pin code that does not match the locality. A phone number with a digit dropped. The order was real and the buyer wanted it. Nothing at the customer's end went wrong. The parcel could not be placed in a hand.

The buyer changed their mind, or never meant it

Cash on delivery removes every consequence of an impulse. The order costs nothing to place and nothing to refuse. By the time a rider calls, days have passed, the purchase feels less urgent, a cheaper listing turned up elsewhere, or the cash is not in the house that afternoon. Some of these orders were never serious at all.

The delivery attempt failed

Here the buyer still wants the product and the address is fine. Nobody was home. The call came from an unknown number and went unanswered. These orders are recoverable, and they are lost only when the attempt cycle runs out before anyone reaches the buyer.

Fix the address where it is created

Checkout is the cheapest place to catch a bad address.

  1. Validate the pin code against the locality and state, and surface a mismatch while the buyer is still on the form.
  2. Make the phone field strict: correct length, sensible prefix, and a visible confirmation of the number you will call.
  3. Ask for a landmark or building identifier in its own field, not as an afterthought inside a free-text box.
  4. Normalise what you store so the courier's parser has less to guess at, and offer a returning buyer their known-good address first.

A pin code outside a carrier's cash network is cheaper to refuse on the form than to discover after pickup.

Confirm the order while the buyer still remembers placing it

An order confirmation is a second chance for the buyer to say no while the parcel is still on your shelf, the only moment a cancellation is free. Channel and timing decide whether it works at all.

  • Reach the buyer on a channel they already read. A message inside an app the phone is logged into gets opened. An unknown number ringing mid-afternoon does not.
  • Do it early. The gap between order and confirmation is where intent decays.
  • Give a one-tap confirm and an equally easy cancel. Hiding the cancel option converts a free cancellation into an expensive return.
A cancellation before pickup costs nothing but the packing slip. Treat every cancelled COD order as a saved RTO.

Move buyers to prepaid without punishing the ones who will not move

A prepaid order removes refusal at the door as a failure mode, so shifting the payment mix is the largest single lever available. The trap is treating COD buyers as a problem to be taxed. Many of them buy from you repeatedly, and pay in cash for reasons unrelated to intent.

  • Offer a small, clearly stated incentive for paying now, and put that option first while leaving COD selectable in one tap.
  • Offer partial prepayment on higher-value orders, a token amount now and the balance on delivery. Skin in the game changes behaviour at the door.
  • Keep any COD fee small and explained, and make the prepaid refund path visible. Most cash preference is a trust position, and trust is answered with a return policy, not a discount.

Score the order with signals you already hold

No model or third-party risk API is needed to start. Every store holds enough to separate the safe orders from the ones worth a phone call.

  • Order value, since the high-value cash parcel is the one a buyer hesitates over at the door and the one that costs most to bring home.
  • Address completeness: length, landmark present, parses cleanly, pin code and locality in agreement.
  • Customer history. A buyer who has accepted deliveries before is a different proposition from a first-time cash order.
  • Pin code history from your own records, which beats any generic list because it reflects your catalogue, your couriers and your buyers.
  • Duplicate orders placed in a short window to one address or number.

Combine them into a simple score and attach an action to each band. Low risk ships straight away. Medium risk gets an automated confirmation before a label is generated. High risk gets a human call, or a prepaid-only offer. Revisit the bands each quarter.

NDR handling decides how many attempts you get

A non-delivery report is the courier telling you an attempt failed. Carriers make further attempts before sending a parcel home, and how many is set by your contract, so read it there instead of assuming.

  1. Pull NDR events automatically and work them the same day. One sitting in a dashboard until tomorrow has already burned an attempt.
  2. Contact the buyer yourself, on your own channel. The courier's call is one ring from an unknown number; yours carries your name and the order.
  3. Feed corrected information back to the courier: a fixed address, an alternate number, a preferred time window, a nearby handover point where one exists.
  4. Know your reattempt window and work inside it. Once a parcel is marked for return, the cost is committed.

Measure per cohort, or you will optimise nothing

One blended RTO figure for the whole store hides every fixable pattern inside it. Break it apart and the levers appear.

  • By pin code and zone, which exposes route and coverage problems.
  • By courier, since two carriers serving the same pin code can behave very differently.
  • By product, which separates an expectation problem from a delivery problem.
  • By price band, which shows where partial prepayment would pay for itself.
  • By first-time against repeat buyer, usually the sharpest split of the lot.

Every RTO carries a reason code from the courier and a real reason from the buyer. They are frequently not the same reason.

Price each cohort against the contribution earned by the orders in it that did deliver. A few will be worth refusing cash on delivery for outright.

What is the most effective way to reduce RTO on COD orders?

Fix addresses at checkout and confirm the order quickly on a channel the buyer already reads. Those two remove most avoidable returns. Add simple risk scoring from data you already hold, same-day NDR follow-up with your own call, and a prepaid incentive that rewards paying early without penalising cash buyers.

Share this guideLinkedInXWhatsAppFacebook
All guides