Reconcile cash-on-delivery remittances against every order
Updated · By Ecomsellertool editorial team
To reconcile cash-on-delivery remittances, match every line of the courier's remittance file to a delivered COD order by tracking number, compute what the courier should have paid for that cycle (delivered COD value minus its COD fee and deducted shipping charges), and flag every gap: short or missing payments, unpaid returns and late cycles. Matched orders are marked paid in Shopify; a person handles each exception.
- Shopify lists cash on delivery as a manual payment method; orders paid that way stay unpaid until you mark them as paid after the money arrives (checked October 20, 2026).
- Shopify's Admin API mutation orderMarkAsPaid records a payment for an order's outstanding balance and needs the write_orders scope.
- Remittance timing is set by your courier agreement; Shiprocket, for example, sells an Early COD plan it says pays as early as 2 days after delivery, for a fee.
- Expected remittance = delivered COD order value − COD fee − shipping charges the courier deducts, per remittance cycle.
- In this recipe rules match, compute and flag; a person decides every courier dispute, write-off and order cancellation.
The step map: who runs each step
Trigger: A courier or shipping aggregator sends a COD remittance file or advice, plus a daily check for delivered COD orders that are past their remittance date.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | Each remittance file or advice is collected from email, the courier portal or its API, stored under its remittance ID, and its lines are checked to add up to the stated total. | Rule |
| 2 | An AI model maps the columns of a new or changed file layout (tracking number, order reference, COD amount, fees, charges) and the mapping waits until a person confirms it. | AI model |
| 3 | Every line is matched to an order by tracking number, then by order number, across Shopify and any channel you ship with your own courier. | Rule |
| 4 | The expected remittance for the cycle is computed from delivered COD orders, the COD fee and the shipping charges in your courier's rate card, and compared with what was paid. | Rule |
| 5 | Each mismatch is classed with the exception table: missing, short, overcharged, unknown, duplicate, return to origin, or late, with days overdue counted from the agreed cycle. | Rule |
| 6 | A person reviews the exception queue, raises disputes with the courier using the evidence attached, and decides write-offs and cancellations. | Person |
| 7 | Matched orders are marked paid in Shopify, one summary entry per remittance is posted to the accounting system's clearing account, and the bank deposit is matched when it arrives. | Rule |
5 rule steps · 1 AI model step · 1 person step. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- Every dispute raised with a courier, and what it claims
- Write-offs of COD cash the courier will not pay
- Cancelling and restocking return-to-origin orders once the parcel is back
- The rate card, the agreed remittance cycle and the account mapping, agreed with your accountant
- Confirming a new remittance file layout before it is used
Which tools can run it
- A spreadsheet with lookups on tracking numbers, for one courier and a few hundred COD orders a month
- A workflow tool such as Zapier, Make or n8n reading remittance emails into a sheet and an exception queue
- Custom code on your accounts, for several couriers, Shopify and marketplace orders, bank matching and posting to accounting
Systems it connects
- Shopify
- Marketplace orders you ship with your own courier
- Courier or aggregator remittance files, portal or API
- Courier rate card and agreed remittance cycle
- Bank feed
- QuickBooks Online, Xero or your accounting system
Build size: Medium
Matching is simple; the work is each courier's file layout, its rate card and a clean rule for orders that came back.
Cash on delivery is still how many shoppers pay in the UAE, Saudi Arabia, India and other markets. For the brand, it means the courier holds your money for a while. Each cycle it sends a remittance file and a bank transfer, net of its fees and charges, and somebody has to check that every delivered order was paid for. Most teams do that in a spreadsheet, late, and find the gaps months later. This recipe matches each remittance to your orders, computes what should have arrived and queues every gap for a person. It is one page of our automation library.
What can go wrong between a COD delivery and the cash reaching your bank?
Build the exception table before anything else. Each row names a mismatch, the rule that detects it, what the workflow records and who acts. The automation owns the first three columns; people own the last one. Every row is keyed on the tracking number (the AWB), because that is the one reference that appears in both your orders and the courier's file.
| # | Mismatch | What the rule detects | What it records | Who acts |
|---|---|---|---|---|
| 1 | Delivered, not remitted | A COD order marked delivered has no remittance line, and today is past its delivery date plus the agreed cycle | Tracking number, order, COD value, delivery date, days overdue | Finance, who raises it with the courier |
| 2 | Short remittance | A remittance line pays less than the order's COD value after the expected fee | Expected and paid amounts, the difference, the remittance ID | Finance |
| 3 | Overcharged deduction | The COD fee, freight or return charge on a line is above your rate card | The charged amount, the rate card amount, the difference | Finance or the logistics owner |
| 4 | Return to origin (RTO) | The courier marks the parcel returned; no cash is expected | Return status, the return charge deducted, whether the parcel reached your warehouse | Warehouse, then customer service to cancel and restock |
| 5 | RTO charged but parcel not received | A return charge is deducted, but your warehouse has not logged the parcel after a set number of days | Tracking number, charge, last courier scan | Logistics owner, who opens a lost-parcel case |
| 6 | Unknown line | A remittance line matches no order, or an order shipped with another courier | The raw line and the file it came from | Finance |
| 7 | Duplicate line | The same tracking number is paid in two remittances | Both remittance IDs and amounts | Finance, before the next cycle is approved |
| 8 | COD amount changed | The amount on the courier's line differs from the order total, for example after an order edit or a partial delivery | Order total, courier amount, edit history | Customer service, who confirms what the shopper paid |
| 9 | Late remittance batch | No remittance arrives on the date your cycle sets, or the bank deposit differs from the file total | The expected date and amount, what arrived | Finance |
Three choices keep the table honest. Orders are marked paid only from a matched remittance line, never from a delivery scan, so an unpaid balance stays visible until the cash arrives. Returns are their own row, because an RTO order owes you nothing in cash but may owe you a parcel. And nothing goes to the courier on its own: the workflow builds the evidence, and a person sends the dispute.
How do you calculate what the courier should have paid?
Two formulas do the work. The first runs per remittance cycle. The second runs every day for every delivered COD order that has not been paid.
Expected remittance = sum of COD values of orders delivered in the cycle − courier COD fee − shipping charges the courier deducts
Days overdue = today − (delivery date + agreed remittance cycle in days)
Count return charges inside "shipping charges deducted" if your courier nets them from the same remittance, and as a separate bill if it invoices them. Use the cycle from your own courier agreement, per courier and per service, because cycles differ. A positive days-overdue number means the payment is late, not just pending. A courier that pays weekly can show a few days of "not yet due" on every order, which is normal.
How does the workflow match remittance files to Shopify and marketplace orders?
Couriers and aggregators send remittances in their own formats: a CSV in an email, an export from their portal, a PDF advice or an API. The first step stores each file under its remittance ID and checks that its lines add up to its stated total. An AI model helps with one job only: when a file layout is new or changes, it suggests which column holds the tracking number, the COD amount and each charge. A person confirms the mapping before any file in that layout is used.
Matching then runs on the tracking number, and on the order number when the courier includes it. On Shopify, cash on delivery is a manual payment method. Shopify's manual payments guide says orders that accept manual payments are marked as unpaid, and that after you receive payment you can mark the order as paid on the order details page (checked October 20, 2026).
An integration does the same with the Admin API. Shopify's orderMarkAsPaid reference says it records a payment for an order's outstanding balance, works only while the order has a positive outstanding balance and is not already paid, and requires the write_orders access scope (checked October 20, 2026). The workflow calls it only for orders whose remittance line matched in full.
Which COD cash belongs in this recipe, and which in your marketplace payouts?
It depends on who collects the cash. When a marketplace's own logistics delivers the order, the cash is part of the marketplace's payout. Amazon.ae, for example, says its Easy Ship service enables cash on delivery for customers, with an Amazon agent delivering the product (checked October 20, 2026). That cash reaches you in your Amazon settlement, which our marketplace payouts recipe reconciles. noon pays on its own statement schedule, covered on our noon page.
This recipe covers cash your own courier or shipping aggregator collects: Shopify COD orders, and marketplace orders you ship with your own carrier where the marketplace's rules let the courier collect. Our UAE guide and Saudi Arabia guide explain the fulfillment options in those markets, including shipping orders yourself.
How long should a courier take to remit COD cash?
As long as your courier agreement says, and no longer. There is no standard cycle. Some aggregators sell faster payment as a paid product. Shiprocket, an Indian shipping aggregator, describes an Early COD plan that pays COD remittance as early as 2 days after delivery, for a fee (checked October 20, 2026). Whether a faster cycle is worth its fee is a cash-flow decision for your finance team.
Whatever the cycle, write it down per courier and service, and put it in the workflow's settings, not in someone's head. That single number turns "not paid yet" into "7 days late", and it is what a person needs when raising row 1 with the courier.
What should stay with a person?
Disputes, first of all. The workflow attaches the evidence (the order, the delivery scan, the remittance line, the rate card row), but a person decides what to claim and sends it. Write-offs stay with a person too: when a courier will not pay, finance decides when to stop chasing. Return-to-origin orders are cancelled and restocked by a person once the warehouse confirms the parcel is back, so stock is never added twice. And the account mapping for the summary entry (COD clearing, courier fees, freight, return charges) is agreed with your accountant before anything posts. Freight that a 3PL bills you is checked separately, as on our 3PL reconciliation page.
Who builds COD reconciliation for brands?
Ecomsellertool builds workflow automation on your own store, courier and accounting accounts. We have built software on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. For COD we start with your exception table, your rate cards and each courier's file, then build the matching, the formulas and one exception queue. Send a project brief below, or read how our workflow automation service works.
The building blocks are work we have shipped:
- Carriers, rate cards and many marketplaces in one system. For Ecom Global we built a platform for 100M+ products, 20+ marketplaces and 13+ carriers, with a shipping master that holds carrier types, country coverage, rate cards and routing rules, and connectors for marketplaces including Noon, Flipkart and Meesho.
- Charges computed when the source does not report them. For Seller-Drive we built a profit and loss statement from Amazon's finance data, with a fee calculation engine that computes fees Amazon does not provide, the same idea as checking a courier's deductions against its rate card.
Late or failed deliveries before the cash stage are handled by our shipping exception alerts recipe. Custom builds can run on Ecomsellertool Growth OS, beside your orders and stock. You keep your accounts, your data and the custom code we build; the Growth OS base is licensed to you.
Get your COD reconciliation built
Send us a remittance file layout and how you check it today
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
How do I know if my courier paid me for every COD order?
Match every line of each remittance file to an order by tracking number, then list every delivered COD order that has no remittance line and is past the cycle in your courier agreement. Anything on that list, and any line paid for less than the order's COD value, is an exception for a person to raise with the courier.
What is a COD remittance cycle?
It is the time between delivery and the day the courier pays you the cash it collected, set in your courier agreement. Some aggregators sell a faster cycle for a fee. Track it per courier, because the cycle is what tells you when a payment is late rather than just not due yet.
How do I mark COD orders as paid in Shopify?
Shopify treats cash on delivery as a manual payment method, so the order stays unpaid until you mark it as paid on the order details page after the money arrives. An integration can do the same through the Admin API's orderMarkAsPaid mutation, once the remittance line has matched the order.
What happens to an RTO order in COD reconciliation?
A return-to-origin order was never paid for, so no cash is expected. It should not stay as an unpaid order forever. The workflow checks that the courier did not charge more than your rate card allows for the return, and a person cancels and restocks the order once the parcel is back.
Should I mark Shopify COD orders paid when the courier marks them delivered?
It is safer to wait for the remittance. Delivered means the courier collected the cash, not that you have it. Marking orders paid only when a remittance line matches keeps unpaid balances visible, which is how a short or missing payment gets noticed.
Is this the same as reconciling Amazon or noon payouts?
No. When a marketplace's own logistics collects the cash, it reaches you inside the marketplace payout and is reconciled with the payout report. This recipe covers cash that your own courier or aggregator collects and pays to you in its own remittances.
