A cash-on-delivery parcel leaves your shelf before anyone has paid for it. Some of those parcels come back: the customer refused at the door, could not be reached, or changed their mind. Each return is a small inventory event that happens days after the sale, in someone else’s van, and it is the one most stores record worst. The result is a stock count that drifts: the store shows units that are no longer there, or hides units sitting in a pile of returned parcels by the door. This guide explains how to keep the count right: which states a unit can be in, when to move it, how to receive a returned parcel, and how to check the numbers against the carrier and the shelf.
Why returns throw the stock count off
In Morocco cash on delivery is still the default: according to the ANRT survey quoted by Le Matin, more than 66% of orders are still paid in cash when the parcel arrives. The same article quotes a merchant-side refusal rate at the door of between 20 and 40% and lists what it costs: stock tied up, logistics costs doubled, cash blocked. SwiftLog, a Moroccan logistics directory, puts the e-commerce return rate between 15% and 30% depending on the sector, and fashion, the hardest-hit sector, up to 35%.
Those percentages are not only a margin problem (see how to measure and reduce the return rate). They are an inventory problem, for three reasons.
- The unit is gone but not sold. When the parcel leaves, the item is no longer on your shelf, but it is not sold either. If your sheet counts it as sold, the sales report is wrong; if it counts it as available, you will sell it twice.
- The return arrives late. Days pass between the refusal and the moment the parcel is back in your hands. During that time the unit sits in no column of most stock sheets.
- Not every return can be sold again. A box opened at the door, a missing accessory, a crushed package, a product close to its expiry date: some returns go back on the shelf, others do not. A system that adds every return back to “available” sells products you cannot ship.
The two symptoms are familiar. Overselling: an order confirmed for a product that is actually out of stock, a customer called back to cancel, ad spend wasted. And hidden stock: units the store believes sold out while they sit in returned parcels nobody has opened, so you reorder from the supplier when you did not need to.
Seven states for one unit of stock
The fix starts with vocabulary. A single “quantity” column cannot describe a COD business, because a unit can be in places that are neither “in stock” nor “sold”. Shopify’s documentation is a useful model: it separates available, committed and unavailable units, and among the unavailable ones lists damaged units, on hand but not sellable or usable due to damage, and units in quality control, not sellable while they are being inspected. For a COD store, extend that idea along the parcel’s journey:
| State | Where the unit is | Sellable? |
|---|---|---|
| Available | On your shelf, free | Yes |
| Reserved | On your shelf, set aside for a confirmed order not yet shipped | No |
| With the carrier | In a parcel on its way to the customer | No |
| Return in transit | Refused or undelivered, on its way back | No |
| To inspect | Back with you, parcel not yet checked | No |
| Damaged or second grade | Back, but cannot be sold as new | No |
| Sold | Delivered and paid | Out of stock for good |
Only the first row is what you can promise a customer. The others are not losses: most units “with the carrier” will be sold, and most “returns in transit” will go back on the shelf. But none of them belongs in the number your order form or your confirmation agents rely on. Shopify applies the same logic to goods coming in: incoming inventory isn’t available to sell until it has been received and switched to available. A returned parcel is incoming stock.
When stock should move, and when it should not
Every change of state should be tied to an event you can verify, not to someone’s memory. Four rules cover most cases.
- Reserve at confirmation. An unconfirmed order is only an intention, and many never become parcels. Reserve the unit when the order is confirmed, so two agents cannot promise the last piece to two customers.
- Take it off the shelf at hand-over. The unit moves from “reserved” to “with the carrier” when the courier picks up the parcel, not when the label is printed.
- Do not count a return before you hold it. When the carrier records a refusal, move the unit to “return in transit”. It becomes “available” again only once it is physically back and inspected.
- Record the sale at delivery. A unit is sold when the carrier reports the parcel delivered and the cash collected, the moment your margin becomes real (the article on profit per delivered order explains why that is the unit that counts).
Watch what your store platform does on its own. Many were designed for prepaid orders, where a return comes with a refund. In WooCommerce, for example, putting items back in stock is an option at refund time: you tick the “Restock refunded items” box. A refused COD parcel was never paid for, so there is no refund, and nothing puts the unit back by itself. Check what your own setup does when an order is cancelled after shipping, and decide who moves the stock, the store or your team, but never both.
Receiving a returned parcel: a five-step routine
Returns arrive in batches, often with the day’s pickup. If nobody owns them, they pile up. Give the job to one person in a fixed time slot, and apply the same five steps to every parcel.
- Match the parcel to the order. Check the tracking number against the list of returns the carrier sent. A parcel missing from the list, or an order on the list with no parcel, goes straight to the follow-up described below.
- Open and compare. Check the product, the variant (size, colour), the quantity and the accessories against the order. A refused parcel is usually intact, but not always: customers sometimes open it at the door before refusing.
- Grade the item. A: as new and sealed, back to “available”. B: packaging damaged but product perfect, repack it and put it back on sale, as second grade if needed. C: damaged, incomplete, expired or used, moved to “damaged” with a photo.
- Write down the reason. Refused, unreachable, wrong address, damaged in transit. The reason feeds the returns analysis; the grade feeds the stock.
- Update the stock the same day. A return processed a week late is a week of wrong numbers.
Keep the returns area physically apart from sellable stock. The cycle-counting literature says the same about any warehouse: segregate scrap, expired and non-conforming materials from good inventory. A “to inspect” shelf and a “damaged” crate are enough to stop a grade C item from going back out to a customer.
Parcels in limbo: chasing returns that never came back
The riskiest state is “return in transit”: the carrier has recorded the refusal, but the parcel is not back yet. Ask about it before choosing a carrier. SwiftLog advises sellers to ask how many days pass between the customer’s refusal and the parcel’s return, and is blunt about the answer: more than 7 days means blocked stock and lost money; its checklist asks for returns handled within 5 days. Some carriers publish a commitment: Ameex announces express returns in 5 to 7 days, states that undelivered parcels come back to you free of charge and lists a reminder call to the customer before return, a second chance at the sale before the unit starts its trip back. SwiftLog also suggests checking whether the carrier makes a second delivery attempt before returning the parcel.
Whatever the carrier promises, keep your own list. Every week, sort the parcels “in return” by age. Those older than the announced delay go to the carrier with the tracking number and a clear request: send the parcel back or tell us where it is. A parcel that never returns is a stock loss to claim, not to forget. If a supplier holds your goods, agree in writing who receives returns and how quickly they are reported to you; our guide to COD dropshipping suppliers covers that clause.
Returns after delivery: the withdrawal period
Not every return is a refusal. A customer who accepted the parcel and paid can also send the product back. Under Moroccan law, as Aujourd’hui le Maroc explains, article 36 of law 31-08 on consumer protection gives a distance buyer a withdrawal right of seven days from the transaction, whether delivered or not, extended to thirty days if the seller did not confirm in writing the information the law requires.
For your stock, this second flow follows the same rule, no restocking before inspection, with one difference: money has changed hands. Record the return, inspect and grade the item, then refund. Keep the two flows apart in your reports: a refusal tells you about confirmation and delivery, a withdrawal tells you about the product.
Counting: cycle counts and the annual inventory
Even with clean rules, stock drifts: a picking mistake, a parcel opened twice, a replacement piece handed out and never recorded. Counting is how you find the gap before a customer does. A full count stops the business; the alternative is the cycle count, which counts a small, specific subset of inventory in a continuous, regularly repeated sequence. The usual method puts effort where it matters: higher-value items are counted more often, slow movers seldom.
For a COD store, a simple plan works:
- every day, count the products that are sold out or nearly so, before confirming new orders for them;
- every week, count your best sellers, your most returned products and the returns area;
- every month, count the rest, one shelf at a time.
Each time, compare three numbers: what the store shows, what the shelf holds, and what is with the carrier or on its way back. A gap that keeps coming back on the same product points to a process problem, not a counting problem. The same source warns that multiple locations, work in process and lag in paperwork all cause errors; in a COD store, parcels on their way back are exactly that lag.
The annual count is also a legal duty. Law 9-88 on the accounting obligations of merchants requires bookkeeping and an annual inventory, and accounting documents must be kept for 10 years, according to the accounting firm Upsilon Consulting. Grade C items belong in that inventory at their real value; ask your accountant how to record them.
Where Cashod fits
Cashod tracks returned parcels, and each carrier’s delivery and return fees are set per city, so the list of parcels coming back and what each one costs sit next to the orders (see the returns page). A carrier that is not on the list can be added manually, without automatic shipment creation or tracking. One Cashod account can manage several stores, so the same returns routine can apply to all of them. The physical part, opening the parcel, grading the item and counting the shelf, remains your team’s job.
Checklist
- Stock is split into separate states: available, reserved, with the carrier, return in transit, to inspect, damaged.
- Units are reserved at confirmation and leave the shelf at hand-over to the courier.
- A return becomes available again only after it is received and inspected.
- One person processes returns every day and matches them against the carrier’s list.
- Every return gets a grade (A, B, C) and a reason.
- Returns in transit are reviewed weekly by age and chased with the carrier.
- Withdrawals after delivery are tracked separately from refusals.
- Cycle counts: daily on low stock, weekly on best sellers and returns, monthly on the rest.
- The annual inventory is done and the documents are kept.
To put a figure on what returns cost per product, try the COD calculator.




