COD Reconciliation: Finding the Money That Did Not Arrive

12 September 2026 · 5 min read · by Courier Uncle team

COD Reconciliation: Finding the Money That Did Not Arrive

Every month, sellers who reconcile COD find money. Not a lot on any one parcel, but across a few hundred deliveries the gaps add up, and after the courier’s claim window closes the money is gone for good. This is a monthly process that takes an hour, the four gaps it usually finds, and how to close each one.

Delivered, collected, remitted: the three numbers that should match

The three numbers

For a month:

  1. Delivered COD value: the sum of COD amounts on parcels marked delivered in the month.
  2. Remitted gross: the sum of gross COD across the payouts received for those deliveries.
  3. Net received: what actually landed in the bank, after COD fees and adjustments.

Number 1 should equal number 2, parcel for parcel. Number 3 should equal number 2 minus fees and adjustments you can each trace to a source. Reconciliation is checking both equalities and chasing what breaks them.

Step one: pull the delivered list

From the shipment export (or the list API, filtered by status delivered and the delivery date range): tracking id, order id, COD amount, delivered date, courier. This is your side of the ledger.

Step two: pull the payouts

Each payout on Courier Uncle carries a reference, period, gross COD, fee, adjustments, net, UTR, and the list of shipments inside it with their COD amounts. Download the advice for each payout in the period, or pull them through the COD remittances API.

Step three: match parcel to payout

Join on tracking id. Every delivered COD parcel should appear in exactly one payout with the same COD amount. What falls out of the join is the gap list.

The four gaps

Gap one: delivered, not remitted. The parcel is marked delivered, and it is in no payout. Usually the courier has not yet confirmed the cash collection (a lag of a few days), sometimes the collection was recorded against the wrong AWB, occasionally the cash went missing at the courier’s end. Give it seven days past the plan’s remittance date, then raise it from the shipment page. The platform takes it to the courier; the courier’s own window for these claims is typically 30 to 45 days from delivery, which is why monthly reconciliation is the minimum cadence.

Gap two: short remittance. The parcel is in a payout for less than its COD amount. Either the rider collected less (a partial collection, which should not happen without your agreement), or the COD amount on the shipment was edited after dispatch, or a data error. Raise it with the tracking id and both figures.

Gap three: unexplained adjustments. The payout’s adjustment line does not match what you can trace: a weight discrepancy you accepted, an RTO charge, a wallet top-up you requested from the payout. Each adjustment should reference a shipment or an invoice. One that does not is a question for support, and the answer is usually a discrepancy charge you missed the notice for.

Gap four: remitted, not delivered. Rare and the reverse problem: a parcel in a payout that your records show as RTO or in transit. Usually a status sync lag; check the timeline. If the courier says delivered and you say returned, one of you has the wrong parcel.

Step four: close and record

Each gap gets a ticket or a note with the tracking id, the two figures and the date raised. Keep the reconciliation sheet; next month’s process starts with last month’s open items.

What it finds, typically

For a seller doing 1,500 COD deliveries a month at Rs 900 average: two to five “delivered not remitted” parcels a month in the first months (mostly lag, one or two real), one short remittance a quarter, and one or two adjustments a month that turn out to be discrepancy charges the seller did not know about. Call it Rs 3,000 to 8,000 a month recovered or explained, plus the discrepancy notices it surfaces, which lead to fixing the SKU data that caused them.

The larger value is knowing the number is right. A seller who reconciles can state cash position to the day. One who does not is guessing by an amount they cannot size.

Automating it

The list API (shipments filtered by status and date) and the COD remittances API (payouts with their shipment lists) give a spreadsheet or a finance tool everything above without manual downloads. A small script that joins the two and emails the gap list on the 3rd of the month is an afternoon’s work and replaces the hour.

Join delivered parcels to payouts; what falls out is the gap list

Frequently asked questions

How long do I have to raise a missing remittance?

Couriers typically accept collection disputes for 30 to 45 days from delivery. Raise within the month and there is time; raise at quarter-end and half the window is gone.

Why does the net not match gross minus the COD fee?

Adjustments: discrepancy charges, RTO freight or wallet top-ups netted against the payout. Each should be traceable; an untraceable one is the thing to ask about.

Do I need to reconcile if I am on D+1?

Yes. The cycle changes how fast the money arrives, not whether every parcel is in it.

Can support do this for me?

Support resolves the gaps you raise. Finding them is the reconciliation, and it needs your delivered list, which only you can confirm against your orders.

What if my order management system shows a different delivered list?

Reconcile that too: your OMS against the platform’s shipment list. Status sync gaps between systems are their own class of error and show up as parcels delivered in one and in transit in the other.

Is there a report that does this on the dashboard?

The COD page shows payouts and their contents, and the shipment list filters by delivered and by date. The join is yours, and the API makes it a script.

Ship smarter with Courier Uncle

Payout statements that list every parcel, and an API that gives your finance tool the same data. Start free.

Ship smarter with Courier Uncle

Compare live rates across multiple couriers on your actual routes — sign-up is free, no volume commitment.

Compare rates free →