> ## Documentation Index
> Fetch the complete documentation index at: https://codking-blogs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Courier Allocation for COD Orders: Route by Lane, Not by Rate Card

> Most Shopify brands pick a courier per order by price or by habit. The couriers that deliver COD best are lane-specific. How to build an allocation table from your own delivery data.

[← All articles](https://codking-blogs.mintlify.site/blog.md)

COD & RTO · November 2026

# Courier Allocation for COD Orders: Route by Lane, Not by Rate Card

11 minutes read

COD & RTO

[Reducing RTO](https://codking-blogs.mintlify.site/blog/reduce-rto-for-cod-orders.md)
[NDR Management](https://codking-blogs.mintlify.site/blog/ndr-management-cod-orders.md)
[Courier Allocation](https://codking-blogs.mintlify.site/blog/courier-allocation-cod-orders.md)
[RTO Benchmarks](https://codking-blogs.mintlify.site/blog/rto-benchmarks-india.md)
[COD Verification](https://codking-blogs.mintlify.site/blog/understanding-cod-verification.md)

Payments & Pricing

[COD to Prepaid](https://codking-blogs.mintlify.site/blog/cod-to-prepaid-conversion.md)
[COD Advance Amount](https://codking-blogs.mintlify.site/blog/partial-cod-payment-advance-amount.md)
[Payment Options](https://codking-blogs.mintlify.site/blog/payment-options-indian-ecommerce.md)

Tooling & Checkout

[Choosing a COD App](https://codking-blogs.mintlify.site/blog/best-cod-verification-apps-shopify.md)
[Checkout vs COD Form](https://codking-blogs.mintlify.site/blog/native-checkout-vs-cod-order-form.md)
[COD Cancellations](https://codking-blogs.mintlify.site/blog/how-to-reduce-cod-cancellations.md)
[Checkout Optimization](https://codking-blogs.mintlify.site/blog/shopify-checkout-optimization.md)

Allocation loop: classify the lane, score couriers on that lane, allocate, log the outcome back into the lane recordSummaryCourier performance on COD is not a property of the courier. It is a property of the courier on a specific lane, at a specific weight, in a specific month. Allocation that ignores that is leaving delivery percentage on the table — and the fix is a table you build from your own shipment outcomes, not from a rate card.

Ask ten Shopify operators how they choose a courier for a COD order and most will describe one of two systems. Either everything goes to one partner because that is who they onboarded, or the aggregator picks the cheapest serviceable option and nobody looks again. Both systems are allocating on the one variable that barely matters for COD, and ignoring the one that decides whether the parcel comes back.

On a prepaid order, shipping cost is close to the whole story. The money is already collected; the parcel either arrives or it is a service problem. On a COD order, allocation is a revenue decision. A courier that delivers eight parcels out of ten on a route where another delivers nine is not a few rupees cheaper — it is costing you a tenth of your orders on that route, plus the return leg, plus the stock sitting in transit for a fortnight. A rate difference of a few rupees per shipment is noise against that.

## What a lane actually is

A lane is the combination of attributes that determines which physical network handles your parcel. At minimum it is three things.

**Origin and destination zone.** Where the parcel is picked up and where it is going. A courier that is excellent on a metro-to-metro route may be running a franchise or a third-party last mile on an intercity route, and the delivery experience is not comparable.

**Destination pincode tier.** Metro, tier-2 city, small town, rural. This matters more than the zone does. Most couriers in India operate their own last mile in large cities and some form of partner arrangement beyond that, and the quality of the partner arrangement varies by region and by courier. Two couriers can both report a pincode as serviceable and mean quite different things by it.

**Weight and dimension band.** The handling path for a 300g polybag is not the handling path for a 4kg box. Couriers that handle light apparel well are not necessarily the ones that handle bulky parcels without damage, and damage on a COD parcel usually becomes a refusal at the door.

You can add more dimensions later — product category, order value band, whether the address is residential or commercial — but those three produce most of the available gain. Resist the urge to start with twelve dimensions. The constraint on this exercise is sample size, and every dimension you add splits your data.

## The four signals worth scoring

For each courier on each lane, four numbers tell you almost everything. Pull them from your own shipment history, not from a courier's reported SLA.

**Delivered share.** Of parcels handed to this courier on this lane, what proportion ended as a successful delivery. This is the number that matters most and the one most often replaced by a proxy.

**RTO share.** Of the same set, what proportion came back. Delivered share and RTO share do not sum to one, because parcels can also be lost, damaged, or sitting unresolved — and the gap between them is itself informative. A courier with a low RTO share and a mediocre delivered share is often one that leaves parcels in limbo rather than returning them, which is worse for your cash position than a clean return.

**NDR recovery rate.** Of the parcels that hit a non-delivery event on this lane, what share were eventually delivered on a reattempt. This separates couriers whose field staff will genuinely retry from couriers whose reattempt is a phone call that goes unanswered. If you have invested in NDR handling, this number tells you which partner your effort actually works with.

**Median transit days to first attempt.** Not average — median, because a few stuck parcels will drag an average and hide the typical experience. Transit time matters on COD beyond customer patience: the longer the gap between order and doorstep, the more time there is for the purchase intent to decay, for the customer to buy the item elsewhere, or for them simply to be away when the parcel arrives.

Note what is absent from that list. Cost is not a scoring signal; it is a tie-breaker applied after the delivery signals have narrowed the field. And courier-reported SLA percentages are not on the list at all, because they are measured against the courier's own definitions and aggregated across a national network that includes none of your specific lanes.

## Building the table

Export your shipment history — every COD order with its destination pincode, weight, assigned courier, and final status. Twelve months is ideal; six is workable. Then do the following.

**Map pincodes to tiers.** You need a tier label on every destination. Most aggregators expose some classification, and if yours does not, a crude three-way split by city population is enough to start. Precision here matters less than consistency.

**Bucket the weights.** Two or three bands, chosen where your catalogue actually clusters rather than at round numbers. If nearly everything you ship is under 500g, splitting at 500g gives you one meaningful bucket and one empty one.

**Group and count.** Pivot by courier, zone, tier, and weight band, then compute the four signals for each cell. The output is a table with one row per courier per lane.

**Discard thin cells.** This is the step people skip and it is the one that decides whether the exercise helps or hurts. A cell with eleven shipments does not tell you a courier's delivery rate on that lane; it tells you what happened to eleven parcels. Set a minimum — a few hundred shipments per cell is comfortable, a hundred is defensible, anything in the dozens is a story you are telling yourself. Where cells are too thin, collapse a dimension: merge weight bands first, then tiers, and keep the zone split, because zone is where the real network differences sit.

What you will find, almost always, is that no courier wins everywhere. One partner is reliably strongest into tier-2 and tier-3 destinations in one region, another dominates metro deliveries, a third is unremarkable on average but has the best NDR recovery in exactly the places where your refusals concentrate. That pattern is the whole reason allocation beats a default.

## Turning the table into a decision

Once you have per-lane signals, allocation is mechanical. For each lane, rank couriers on delivered share, then apply three adjustments.

**Treat differences inside the noise band as ties.** If two couriers are within a point or two of each other on a cell with a few hundred shipments, you do not have a winner. Call it a tie and let cost decide — this is where rate cards belong in the process.

**Penalise slow transit, not just failure.** A courier with the best delivered share and a transit time several days longer than the alternative is not obviously the right pick for a COD parcel, because the delay is itself a refusal risk and a working-capital cost. Weight transit time explicitly rather than letting it in through the back door.

**Keep a second courier live on every lane.** Never allocate a lane entirely to one partner, however good the numbers look. Send a minority share to the runner-up. This costs you a little delivery percentage and buys three things: a live comparison that keeps your table honest, a fallback when the primary has a regional disruption, and negotiating position. A courier that knows it holds all your volume on a route behaves differently from one that can see it slipping.

## The overrides worth hard-coding

A few rules should sit above the scoring table, because they encode things the averages cannot see.

**High-value orders.** On a parcel where a single RTO is genuinely painful, take the most reliable courier on that lane regardless of cost. The rate difference is irrelevant against the downside.

**Repeat customers.** A proven buyer deserves your best delivery experience, not your cheapest. These are the orders where the lifetime value is real and a bad delivery costs you more than the margin on the order.

**Reattempts and reshipments.** If a parcel failed with one courier and you are sending it again, send it with a different one. The reason the first attempt failed may have been the address, but it may equally have been that branch, that rider, or that partner's local arrangement — and reusing the same path reruns the same risk.

**Known-difficult pincodes.** Where your own data shows a destination with chronically poor outcomes across every courier, the answer is usually not a better courier. It is a verification step, an advance payment, or a prepaid-only rule — covered in more depth in our guides on [COD verification](https://codking-blogs.mintlify.site/blog/understanding-cod-verification.md) and [partial advances](https://codking-blogs.mintlify.site/blog/partial-cod-payment-advance-amount.md).

## Why this decays if you leave it alone

The hardest thing to internalise about courier performance is that it is not a fixed property. It moves, and it moves for reasons you will not be told about.

Couriers change last-mile partners in a region. A hub reaches capacity and starts holding parcels. A franchise changes hands. Pricing pressure in one market leads to thinner staffing. Festive season volumes overwhelm networks unevenly, so the ranking that held in August does not hold in October. None of this appears in an announcement; it appears as a quiet drift in your delivery percentage on specific lanes, which is invisible if you only look at a store-wide average.

So rebuild the table on a schedule — monthly if your volume supports it, quarterly at minimum — and look at the trend per lane rather than the level. A courier whose delivered share on one lane has slid for three consecutive periods is telling you something about that lane, and it is worth acting on before the gap gets wide. Keep the previous versions of the table. The history is what lets you distinguish a seasonal dip from a structural decline.

It also helps to watch NDR reason codes by courier on the same cadence. A rising share of one particular code on one courier's lane — customer unreachable, address incomplete, customer refused — is a more specific diagnosis than a falling delivery rate, and it usually points at whether the problem is the network, your address capture, or your order quality.

## Proving it worked

Allocation changes are easy to fool yourself about, because delivery percentage moves for many reasons at once. Two habits make the measurement honest.

First, measure at the lane level, not the store level. Store-wide delivered share is a weighted average of your lane mix, so a marketing campaign that shifts your geography can move it without any change in operational performance. Lane-level numbers are comparable period to period.

Second, keep the minority split running and compare within the lane and the period. If the primary courier is beating the secondary on the same lane in the same month, that is a clean comparison, with seasonality, your address quality, and your own verification process held constant. It is the closest thing to a controlled test that courier allocation allows, and it is free — you are shipping those parcels anyway.

One warning on expectations. Allocation is a compounding, unglamorous gain. It will not halve your RTO rate, because the largest drivers of COD failure sit upstream of the courier: order intent, address quality, verification, and dispatch speed. What it does is stop you giving away delivery percentage for no reason, every day, on routes where a better option was already available at a similar price.

## Four ways this goes wrong

**Deciding on thin data.** The most common failure. A courier has a bad week on a lane with forty shipments, gets demoted, and the brand concludes a partner is unreliable. Sample size discipline is the difference between allocation and superstition.

**Optimising only on cost once the table exists.** Having done the work, it is tempting to use the table to justify moving everything to the cheapest option that is not clearly terrible. That inverts the point of the exercise.

**Too many dimensions, too early.** Category, value band, residential flag, time of day — each one halves your cells and doubles your certainty while removing the basis for it.

**Treating a courier's serviceability list as a delivery promise.** Serviceable means the courier will accept the parcel. It carries no commitment about reattempts, cash handling, or whether the last mile is staffed by people whose incentives align with delivering a COD parcel. Your own outcome data is the only answer to that question.

## Where to start if you have never done this

Do not try to build the full matrix in week one. Take your single highest-volume lane — most brands have one destination zone and tier that accounts for a large share of shipments — and run the comparison there with two couriers. One lane, two partners, four signals, a few months of history.

If the two are genuinely equivalent, you have learned something cheap and you can route on price with confidence. If they are not, you have found a gap that is applying to a meaningful share of your order book right now, and the fix is a routing rule rather than a project.

Then add the second lane.

COD King sits upstream of this: it verifies orders and converts them to prepaid before they are packed, so fewer doubtful parcels enter the network at all. Which courier carries the ones that do ship is a decision your aggregator or shipping app makes — and it is worth making it on your own delivery data rather than a rate card.

On this page[What a lane is](#lane)[Four signals](#signals)[Building the table](#table)[Making the decision](#scoring)[Overrides](#exceptions)[Why it decays](#drift)[Proving it worked](#measuring)[Failure modes](#failures)[Where to start](#start)[Start for free](https://codking.tech)[Contact sales](https://codking.tech)

COD KingPractical guides, strategies, and product insights for Shopify merchants managing Cash on Delivery.

Blog
[All articles](https://codking-blogs.mintlify.site/blog.md)
[Understanding COD Verification](https://codking-blogs.mintlify.site/blog/understanding-cod-verification.md)
[How to Reduce RTO for COD Orders](https://codking-blogs.mintlify.site/blog/reduce-rto-for-cod-orders.md)
[NDR Management](https://codking-blogs.mintlify.site/blog/ndr-management-cod-orders.md)
[Courier Allocation for COD Orders](https://codking-blogs.mintlify.site/blog/courier-allocation-cod-orders.md)
[RTO Benchmarks for Indian D2C](https://codking-blogs.mintlify.site/blog/rto-benchmarks-india.md)
[COD to Prepaid Conversion](https://codking-blogs.mintlify.site/blog/cod-to-prepaid-conversion.md)
[How Much COD Advance to Collect](https://codking-blogs.mintlify.site/blog/partial-cod-payment-advance-amount.md)
[Best COD Verification Apps](https://codking-blogs.mintlify.site/blog/best-cod-verification-apps-shopify.md)
[Native Checkout vs COD Form](https://codking-blogs.mintlify.site/blog/native-checkout-vs-cod-order-form.md)
[How to Reduce COD Cancellations](https://codking-blogs.mintlify.site/blog/how-to-reduce-cod-cancellations.md)
[Checkout Optimization for Shopify Stores](https://codking-blogs.mintlify.site/blog/shopify-checkout-optimization.md)
[Payment Options for Indian E-commerce](https://codking-blogs.mintlify.site/blog/payment-options-indian-ecommerce.md)

COD King
[Shopify App Store](https://apps.shopify.com/cash-on-delivery-cod-order-confirmation)

© 2026 COD King


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.