Finance
COD Reconciliation in Pakistan: Match Remittance Files to Courier Invoices
Sellers search “COD reconciliation Pakistan” when a remittance hit the bank and the courier invoice still does not explain the number. CPR is the industry shorthand; the work is matching each consignment (CN) to cash collected, freight, COD fees, return charges, and tax lines. If you only compare the bank total to “what Shopify says we sold,” you will always lose the argument. This guide is the month-end matching method—not the full CPR vocabulary lesson (that lives in the courier CPR management article).
Three files, one CN
- Ops shipment list: every CN you booked, with COD amount and delivered / returned status.
- Remittance / payout file: what the courier (or aggregator wallet) says they deposited.
- Freight invoice / bill: outbound charges, returns, weight disputes, fuel or remote surcharges.
Reconciliation is joining those three on CN number (or a mapping table if one partner uses a different ID). Anything that does not join is a ticket: missing CN, extra CN, or a status lie (marked delivered in payout, refused in ops).
A close you can repeat every cycle
- Freeze the period (for example 1–15th or calendar month) before you start matching.
- Export ops CNs for that pickup or booking window—not “all open orders.”
- Import remittance lines; match on CN; flag delivered-with-no-payout and payout-with-no-delivered.
- Import the invoice; allocate freight and return fees to the same CNs.
- Net: remittance minus freight minus fees should land near the bank credit. Investigate the gap, do not bury it in “misc.”
Gaps that are normal versus gaps that are theft stories
Timing gaps are normal: delivered on the 30th, remitted on the 8th of next month. Status gaps are not: refused in the courier app, collected in the payout file. Weight reweighs change freight after you thought the label was final. Return fees appear weeks after the forward CN. Train finance to age items (“expected next cycle”) versus dispute items (“status mismatch”). Mixing them in one angry WhatsApp to the courier account manager wastes both.
How to read a COD versus invoice mismatch.
| Symptom | Likely cause | First check |
|---|---|---|
| Bank credit < remittance file | Withholding, fee not in the file, or wrong IBAN split | Fee lines and tax on the statement |
| Remittance CN not in ops | Booked outside the dashboard or duplicate CN | Courier portal for that CN |
| Ops delivered, no remittance | Cycle lag or courier status not actually delivered | Tracking scan + next payout window |
| Invoice freight >> labels | Reweigh, remote slab, or return legs | Weight disputes and RTO CNs |
| COD collected on a refused order | Status error or rider exception | Ops refusal tag vs courier scan |
Why Shopify totals cannot be the source of truth
Checkout revenue includes cancelled checkouts, unfulfilled COD, and orders you never handed to a rider. Courier remittance is physical deliveries. Invoice is physical network cost. Reconcile shipments, then explain Shopify as a separate revenue report. Stores that “reconcile to Shopify” every month are reconciling two different businesses.
Multi-courier close
Each partner has a different remittance weekday and invoice format. Do not mash TCS, Leopards, and PostEx into one CSV until each file has a CN column you trust. An aggregator dashboard that already holds the booking CN is the join key; portal-only sellers rebuild that key by hand. If you outgrow spreadsheets, that is a payouts and courier bills problem, not a new accountant hire.
Returns fees belong in the same match
A refused COD order should show: no collect, possible return freight, no “delivered” remittance. If you process returns in a separate WhatsApp group, finance will treat return fees as unexplained invoice bloat. Keep the returns and refusals queue on the same order ID you reconcile. That is the internal link between warehouse bags and the month-end file.
COD reconciliation on WeShip
WeShip at weship.pk is aimed at a ledger finance can sit with: shipments, courier bills, and COD-oriented payouts in one place instead of five portal downloads. It does not invent the courier’s remittance calendar. It gives you the CN list those calendars must explain. Review payouts and courier bills on weship.pk, and keep the CPR article handy for the vocabulary your account manager already uses.
Run one cycle as a pilot: pick a single courier, match 50 CNs, write down every mismatch reason. That list is your SOP. Then add the next partner. Do not start with “all couriers, all year.”
FAQ
What is COD reconciliation?
Matching each shipment’s CN to cash remitted, freight invoiced, and fees—so the bank credit is explainable. It is not matching Shopify sales to the bank.
How is this different from courier CPR?
CPR is the broader cash-and-billing discipline. This guide is the practical remittance-file versus invoice versus ops-list match most finance teams search for.
How often should we close?
At least every remittance cycle (often weekly or fortnightly), plus a month-end net. Waiting 90 days makes disputes unwinnable.
What if the courier will not share a CN-level remittance file?
Escalate. A lump-sum deposit without CNs cannot be reconciled. Treat that as a partner risk, not a spreadsheet skill issue.
Where does WeShip help?
Payouts and courier-bill views that sit next to the shipment list. You still need the courier’s remittance file; the dashboard supplies the ops side of the join.
Give finance a CN list that matches the bank
See how WeShip keeps COD payouts and courier bills next to shipments so remittance files have something to join to.