Compare couriers city by city, using your own orders

Bifrost Tech

You probably know which couriers you use. Can you say which one to hand a parcel to for Multan, and which one for Lahore? One common answer is a single return rate per courier, worked out across the whole store. That rate is real. It just answers a question you are not asking.

Why one return rate per courier is not enough

A courier's store-wide return rate is an average. It mixes the cities where its parcels reach the door with the cities where they keep coming back. If most of your orders go to one big city, that city decides the number, and a problem in a smaller city disappears inside it.

The decision you actually make is per parcel, and a parcel goes to one city. So the useful question is narrower: in this city, whose parcels come back less often, in my own orders?

The comparison that matters: courier × city

Put your couriers down the side and your biggest cities across the top. In each cell, write the share of that courier's orders to that city that came back. That is the whole table. It is a side-by-side view, not a verdict. It puts each courier next to the others on the same route.

You can build it from an order export. The spreadsheet is the easy part. The four traps below are where it goes wrong.

Four traps when you build it yourself

  1. One order, two shipments, counted twice. Some orders leave in two parcels, sometimes with two couriers. If every shipment is a row, that order is counted twice, and a city with many split orders looks bigger than it is. Count each order once. Return Guard counts each order once, under the courier of its last shipment.
  2. A handful of orders in a cell. One return out of a few orders looks like a disaster or a triumph, and it is neither. It is too little to read. Decide before you start how many orders a cell needs before you believe its rate. Return Guard shows how many orders a thin cell is based on, and leaves it uncoloured until there are enough.
  3. Parcels still on their way. If you divide returns by everything you shipped, parcels that are still travelling count as "not returned". A city you only started shipping to last week will look calmer than it will a month from now. Return Guard's city table works the same way: it divides returns by every order shipped in the last 30 days, and a parcel still on the road is not a return yet. Read the most recent weeks with that in mind.
  4. Returns that are not recorded, or recorded late. If a courier's returns are not recorded, or are recorded late, its return rate looks lower than it really is. When nothing tells your records that a parcel came back, that courier can show no returns at all, and a zero there does not mean the parcels arrived. A parcel on its way back is not a return yet either; it counts as one only once it reaches you. Before you trust a low number, check that returns for that courier are actually being written down, and how long they take to show up.

Where Return Guard shows it

On the Couriers page, the table "RTO rate by city & courier" does this for your store. The columns are your five cities with the most shipped orders in the last 30 days. The rows are the couriers you shipped with. A cell with no orders shows "—".

The table can only show returns Return Guard has recorded, so for a courier whose parcels it cannot track, the numbers can be lower than the real ones.

The colours follow the levels you set in Settings, not a scale we chose for you.

The table does not choose a courier for you. It shows each route side by side, and the choice stays with you.

One question to take back to your orders

In your biggest city, do you know whose parcels come back more often, from your own data rather than from what you have heard?

Return Guard scores Shopify COD orders for return-to-origin risk, spots misspelt Pakistani city names, and shows courier performance by city — before you dispatch.