Returns, RTO & COD
Returns, RTO and COD are built into the core app because this is where D2C brands most often lose money.
Returns & replacements
Started from the order page, two flavours:
- Return: a reverse pickup from the customer back to you.
- Replacement: a new outbound parcel (same items or corrected ones), created as a proper clone order that flows through the normal pick → pack → ship pipeline, flagged so packers know it's a replacement. The items you pick when creating it are what the clone order — and its shipping label — list, so the packer sends exactly those; tick "same items as the original order" to resend everything. One of the two is required — a replacement can't be created without saying what's being sent.
Created one by mistake? Open the return or replacement and use Cancel (support and up; a reason is required). It cancels the whole order at the courier too — possible only before the parcel is picked up — and if a cancelled replacement's stock had already been deducted, the units go back on the shelf automatically.
For each one the system creates the Shiprocket shipment, tracks it, and gives your warehouse a receiving step: when the parcel arrives, record its condition: good (restocks automatically if you've enabled that) or damaged (goes to the damaged bucket, never back into sellable stock). Reasons are captured at creation, so you can later see why things come back.
RTO (return to origin)
COD reality: some parcels never get delivered and come back. The system:
- tracks which shipments have flipped to RTO status via the courier feed,
- gives the warehouse an RTO scan-in: scan each returned parcel as it arrives, so "the courier says 14 are coming back" reconciles against "we've physically received 9". The scan matches the order number or either waybill — couriers usually bring a parcel back on a new (RTO) waybill, and that's the number printed on the box. The RTO tab also flags parcels the courier says are back but nobody has scanned,
- restocks good units / flags damaged ones, same as returns.
NDR (non-delivery reports)
When a courier can't deliver ("address issue", "customer unavailable"), the order's shipping status shows it. The re-attempt/RTO action buttons stay in Shiprocket's panel.
Amazon returns (the Amazon tab)
Parcels come back from Amazon with a return label whose barcode is a different number from the outbound one, and different again if the same order is returned twice. The Amazon tab knows those numbers because it reads Amazon's returns report every sync, so:
- Scan the label in the box at the top (a USB scanner, or the camera button on a phone or tablet). The order is booked in and its stock goes back on hand — good until you say otherwise.
- The tab says whether the parcel is an RTO (never reached the customer, so it is unopened stock) or a customer return (it has been in someone's hands), and why Amazon says it is coming back.
- Coming back is your bench queue: what Amazon says is on its way and has not been scanned in yet.
- Open the box and find it fake, faulty or the wrong item? Flag it under Condition and the units move to the damaged count instead. Add a photo of the sealed parcel, the opened box or the damage from the same row.
- A cancelled order whose stock was already put back is booked in without crediting it twice; the tab says so.
- A label for an order older than your first sync says "never loaded here": download an Order Report from Seller Central for that period and press Load past orders — it makes those orders scannable and moves no stock.
COD reconciliation
Couriers collect cash for you and remit it later, in lumps. The COD screen matches those remittances against delivered COD orders, so you always know:
- how much COD is delivered but not yet remitted,
- which orders a given remittance (UTR) actually covered,
- what's been outstanding unusually long.
The "money received" side comes straight from Shiprocket:
- Every morning, the system asks Shiprocket about each delivered COD order that hasn't been remitted yet and records what has been paid out. Nothing to download, nothing to upload. Only delivered orders are asked about — a parcel still in transit cannot have been remitted.
- Pull from Shiprocket — the button on the COD tab does the same thing right now. The first run on a long history takes several minutes; after that it is quick because only unanswered orders are checked.
Recording a remittance and marking the order paid in Shopify are two separate steps on purpose. Once money is recorded, the COD tab shows "N remitted but still unpaid in Shopify" with a Mark paid button. Press it and those orders are marked paid in Shopify in the background. Nothing is written to Shopify without that press.
Any view of the COD tab can be downloaded as a CSV (the ↓ CSV pill) — the "Discrepancies" list is what you take to the courier, oldest first.
Returned (RTO) and cancelled orders never count as remitted, even if an old record says COD was received: the parcel came back, so no customer paid.
The common thread
Across all three screens the idea is the same: anything not yet accounted for sits on a visible list until it is.
Sounds like your floor? Create your workspace: brand name, email, password.
Create your workspace →