📦 Cash on delivery: the complete guide to selling without losing money (Morocco, Maghreb, Gulf, Africa)
🌐 Français · English · العربية
Cash on delivery sells, but every refused parcel costs real money. True unit economics, order confirmation, choosing a courier, refusals, cash and KPIs: the complete method for selling COD without losing money.
In short
- An order is not a sale. Between the order landing in your dashboard and the money reaching your account, there are four steps where you can lose money: confirmation, shipping, delivery and cash remittance.
- Refusals cost you mostly in reverse logistics: ad spend already paid, the parcel's round trip, packaging, and sometimes a damaged product.
- Your most profitable lever is the delivery rate, not the price. In the worked example below, moving from an "average" funnel to an "optimised" one doubles profit, with the same product at the same price.
- Industry figures come mostly from software vendors and couriers. Measure your own: they are the only reliable data for your store.
1. COD in numbers: what we actually know
Cash on delivery (COD) is still the default payment method for online shopping in North Africa. But be careful about what is being measured:
| Country / region | Figure | What is measured | Source |
|---|---|---|---|
| Morocco | 84.1% | Online shoppers who used COD (cards: 43.3%) | ANRT ICT survey, via Le360 (2025) |
| Morocco | over 80% | Jumia Morocco customers who prefer cash | Jumia Morocco's head of operations, via Madar21 (2026) |
| Algeria | 95% | Online transactions | El Moudjahid, via TSA Algérie (2025) |
| Tunisia | over 85% | Transactions (unsourced by the outlet) | Tunisie Numérique (2025) |
| Gulf (Saudi Arabia, UAE, Kuwait) | about 10% | Stated preference for COD in 2023 | Checkout.com (2024) |
| Senegal | about 55% | Orders paid by COD (mobile money: about 35%) | Kolonell (2026), a payment-solutions vendor |
The takeaway: in the Maghreb, COD dominates; in the Gulf, cards have taken over. If you sell in Saudi Arabia or the UAE, COD is one option among others, not a must.
Refusal rates: a range, not an official statistic
No Moroccan institution publishes refusal or return rates. The figures in circulation come from companies selling solutions:
- 15 to 25% of shipped parcels refused in Morocco, depending on the category and the type of advertising: the most quoted range (Swiftlog, 2026, a courier directory).
- Over 40% returns without a confirmation call (Cashod, 2026, anecdotal).
- The only audited figure we found: at Jumia (across Africa), cancellations, failed deliveries and returns made up 22% of orders in 2019 and 16% in 2020 (FY2020 annual report, via Technext24).
- In Tunisia, about 30% of orders are reportedly rejected at delivery (Tayara.tn estimates, via Tunisie Numérique, 2025).
What I see in the field
With the sellers I work with, refusal and return rates are high, and there is almost never a single cause. The seller, the courier, the buyer and the delivery company's system are not in sync: the customer isn't told, the driver can't find the address, the parcel status shows up days late. Research backs this up in substance, even without an official figure: Jumia Morocco names "the inability to reach customers" as its main risk (Madar21, 2026).
2. The COD funnel: from order to cash in the bank
Think of your business as a five-stage funnel. Each stage has a rate, and each rate can be measured.
- Orders received (gross): everything that lands in the dashboard, including fake orders and duplicates.
- Confirmed orders: the customer was reached and confirmed the product, price, address and date.
- Parcels shipped: confirmed and handed to the courier.
- Parcels delivered: the customer paid.
- Cash remitted: the money is actually in your account.
"An order appearing on the dashboard is not a sale," says Fouad Ouaggad, formerly of YouCan (2026). Call-centre vendors claim that around 30 to 35% of COD orders are fake or abandoned (MyLeadDone, 2026, anecdotal): hence the importance of stage 2.
3. The real economics: a worked example
Illustrative example, calculated with the assumptions of oufrid.com's research brief (October 2026). These are not market averages.
Assumptions
| Parameter | Value | Where it comes from |
|---|---|---|
| Selling price | MAD 249 | Order of magnitude of the Cashod (2026) example |
| Landed product cost | MAD 80 | Cashod and Clarodigi (2026) examples |
| Delivery (per delivered parcel) | MAD 35 | "Major cities" rate of Cathedis and Sendit (2026) |
| Return fee (per refused parcel) | MAD 15 / 10 / 0 depending on the scenario | Sendit 0; Swiftlog (2026) 10–20 |
| Packaging | MAD 5 per shipped parcel | Swiftlog: MAD 3–8 |
| Confirmation (call centre) | MAD 10 per confirmed order | Cashod |
| Ad cost per gross order | MAD 25 | Assumption: no reliable Moroccan figure was found |
| Damaged goods among returns | 10% of their value | Assumption |
Results for 100 orders received
| Scenario | Confirmation / delivery | Delivered | Refused | Revenue | Profit | Profit per delivered parcel |
|---|---|---|---|---|---|---|
| Pessimistic | 55% / 65% | 35.8 | 19.2 | MAD 8,902 | MAD 1,023 | MAD 28.6 |
| Typical | 65% / 75% | 48.8 | 16.2 | MAD 12,139 | MAD 2,765 | MAD 56.7 |
| Optimised | 80% / 88% | 70.4 | 9.6 | MAD 17,530 | MAD 5,657 | MAD 80.4 |
These profits are before fixed costs (tools, salaries, platform subscription), products tested that don't sell, and taxes. Your real result will be lower.
What the example shows
- Same product, same price: moving from the typical to the optimised scenario doubles profit. Confirmation and delivery matter more than the purchase price.
- The pessimistic scenario turns into a loss once ads cost about MAD 35 per order received. At MAD 40, you lose MAD 477 per 100 orders.
- The maximum ad cost you can afford (before losing money) is about MAD 35 (pessimistic), MAD 53 (typical) and MAD 82 (optimised).
- Every refused parcel wastes the ad spend already paid. According to Swiftlog (2026), a refused parcel costs MAD 43 to 103 in total (outbound, return, packaging, ads). According to CEOS Technology's CEO, re-delivery and returns account for 60 to 70% of total delivery costs (Madar21, 2026).
👉 Run the numbers with your own data in the free COD profit calculator: real profit, maximum ad cost, and "what if I improved my confirmation rate?" simulations.
4. Why customers refuse
There is no statistical ranking of refusal reasons in Morocco. Here are the recurring causes, from the best documented to the least:
| Cause | What the sources say | What you can do |
|---|---|---|
| Product differs from the ad | Top e-commerce complaint according to the Ministry of Trade (Le360, 2024) | Real photos, real video, honest product page |
| Distrust: COD as insurance | COD helps buyers "protect themselves from fraud" (Febrayer, 2025) | Clear identity, verifiable reviews, a return policy |
| Impulse purchase, then forgotten | Top cause cited by Swiftlog (2026) | Confirm fast, deliver fast, remind the day before |
| No cash on delivery day | Swiftlog; Tunisie Numérique (2025) | State the exact amount, let the customer pick the day |
| Delivery too slow | Every extra day raises the chance of a return (eGrow, 2026, a vendor) | Local stock, a realistic delivery promise |
| Customer unreachable, vague address | Main risk according to Jumia Morocco (2026); 3–5% of addresses not found according to Swiftlog | Landmark, WhatsApp location pin, second phone number |
| Fake orders | 20–40% from Facebook/Instagram according to vendors (anecdotal) | Systematic confirmation, duplicate filters |
5. Confirmation: the step that changes everything
Practitioners agree: confirm every order before shipping, ideally within 10 minutes and no later than 2 hours, calling back at different times of day and over several days (Swiftlog, MyLeadDone, eGrow, Storeino, 2026). Vendors claim 60–70% confirmation with manual follow-up and up to 92–94% with WhatsApp automation: that is a sales pitch, not an independent measurement.
What the law requires during the call (Morocco)
- At the start of the call, state who you are and the commercial purpose of the call (Article 31 of Law 31-08).
- Read back the customer's choices and let them confirm or change the order (Article 29).
- Send a written confirmation or one on a durable medium, no later than delivery, with the address for complaints and how to withdraw (Article 32).
- The burden of proof is on you (Article 34): keep a record of confirmations.
Call script (adapt to your tone and the customer's language)
"Hello, this is Salma from [Store name]. I'm calling about the order you placed yesterday on our website. Do you have two minutes?
You ordered [product, size, colour, quantity] for a total of [amount] dirhams, delivery included. Is that right?
Delivery is planned for [day] between [time] and [time] at [address]. Could you give me a nearby landmark, or send me your location on WhatsApp? Do you have a second number in case the driver can't reach you?
Please have [amount] dirhams ready for the driver. I'm sending you a written summary on WhatsApp. You have 7 days after receiving the item to change your mind: the terms are in the message."
If the customer hesitates, don't push. An order cancelled on the phone costs MAD 10 in confirmation; a refused parcel costs far more.
WhatsApp confirmation message (template)
Hello [First name],
[Store name] confirms your order no. [number]:
- Product: [product, size, colour] x [quantity]
- Total to pay on delivery: MAD [amount] (delivery included)
- Expected delivery: [day], between [time] and [time]
- Address: [address + landmark]
Reply YES to confirm, or tell us what to change.
Seller: [company name], [city], tel. [number], ICE [number]
Returns: 7 days after receipt, terms: [link]
The 5 touchpoints
eGrow (a vendor, 2026) recommends five messages: confirmed, shipped, out for delivery, failed attempt if any, and post-delivery follow-up. Add a reminder the day before or the morning of delivery with the amount to prepare (Swiftlog, 2026).
Hello [First name], your [Store name] parcel arrives today
between [time] and [time]. Amount to prepare: MAD [amount].
Tracking: [link]. Can't make it? Reply to this message to change the day.
6. Choosing and managing your courier
What couriers offer (public examples, 2026)
| Courier | Delivery | Returns | Cash remittance | Source |
|---|---|---|---|---|
| Cathedis Silver | MAD 20–45 by zone | Free up to 10% of shipments; parcel held 7 days | Once a week | Cathedis rates, checked October 2026 |
| Cathedis Gold | MAD 25–45 (50 for the South in a second rate card) | Free up to 20%; exchange included; held 5 days | Twice a week | Same |
| Sendit | MAD 19–39 | Cancellation MAD 0; "unlimited" returns | "Within 24 hours, 7 days a week" (sales promise) | Swiftlog comparison, April 2026 data |
Rate cards change: check them before signing. No independent data measures actual remittance times.
Questions to ask before signing
- Coverage: which cities and rural areas do you serve yourselves, and which go through a subcontractor?
- Lead time: how many days from pickup to delivery, by zone?
- Attempts: how many delivery attempts, and does the driver call the customer before coming?
- Returns: what is the free-returns quota? What does it cost beyond that? How many days is a parcel held before it comes back?
- Remittance: how often? By bank transfer? With a detailed, parcel-by-parcel statement?
- Tracking: do you have an API or an integration with my store? Are statuses updated in real time? Does the customer get an SMS or a tracking link?
- Disputes: what happens if a parcel is lost or damaged, or if collected cash isn't remitted?
- Legal status: what is your legal form, and are you ready for the licence planned by Bill 36-25?
- Opening the parcel and exchanges: do you offer them, under what conditions, and where is that written?
The contract: what must be in writing
Rates by zone, return quota and fees, holding period, remittance frequency and method, liability for losses, statement format, claim deadline, termination terms. Remember: towards the customer, you remain "fully liable" for delivery, even when a courier handles it (Article 26 of Law 31-08). A bad driver is your reputation.
Why you need at least two couriers
Practitioners advise having at least two, chosen on remittance time, coverage, tracking, free-returns quota and holding period (kslab, 2026). Compare their delivery rates zone by zone and give more volume to the one that delivers best.
The legal context is changing
According to Le Matin (2026), several delivery companies have disappeared in recent years with large sums of money. Bill 36-25 would make a licence mandatory for parcel companies, with fines of MAD 500,000 to 5 million (Consonews, 2026). As of this guide (October 2026), its adoption is not confirmed: keep an eye on it.
7. Cutting refusals: the levers
| Lever | How | Level of evidence |
|---|---|---|
| Honest ads | Show the real product and the total price, delivery included, in the ad | Common sense + Swiftlog recommendation (2026) |
| Real photos, real video | Real photos from 5 angles, a 30–60 second video | kslab and Swiftlog recommendation (2026) |
| Sizes and specs | Size chart in cm, material, dimensions, weight, origin | Common sense; fashion and large sizes are returned more (Eurastech, 2026) |
| A delivery promise you keep | Next day in the city, 1–3 days elsewhere where possible | Swiftlog and eGrow recommendation |
| SMS or WhatsApp tracking | Tracking link + reminder the day before | Vendor claim: informed customers refuse "5 times less" (MyLeadDone, anecdotal) |
| Partial deposit | MAD 20–50 above MAD 300 (Swiftlog) or 10–20% (eGrow) | Effects claimed by vendors only |
| Card payment discount | 3–5% (Eurastech, kslab) | Recommendation |
| Filter your traffic | Lookalike audiences built on customers who accepted their parcel; exclude high-refusal areas | Swiftlog recommendation |
| Segment COD | COD below MAD 300; prepayment for appliances, made-to-measure and B2B | kslab recommendation |
Opening the parcel: be precise
Law 31-08 does not give customers a right to open the parcel before paying. It is a commercial practice, widespread but a source of friction with drivers. The customer's actual right is a 7-day withdrawal period after receipt (Article 36), with a refund within 15 days (Article 37).
If you want to offer inspection before payment:
- Make sure your courier accepts it and that it is written into the contract.
- Announce it on the product page and in the confirmation message.
- Tell the customer it is for checking the item matches, not for a long try-on.
Done well, it is a strong trust signal: it shows you have nothing to hide.
8. Handling returns and repeat refusers
The return workflow
- Same day: the "refused" or "failed" status comes in. Call the customer to find out why. According to MyLeadDone (a vendor), it takes 3 to 5 days on average to notice a failed delivery: shorten that.
- Offer a second attempt if the cause was absence or cash (another day, another address).
- When the parcel comes back: check the product's condition, put it back in stock or write it off.
- Log the reason in a sheet: product, city, traffic source, agent, courier. It is your best data.
Customers who refuse again and again
Some practitioners advise switching customers who have refused several parcels to mandatory prepayment: after 2 refusals according to Swiftlog, 3 returns in 6 months according to eGrow (2026).
Careful: a list of "risky" customers is processing of personal data under Law 09-08. In Morocco:
- any processing of customer data must be declared to the CNDP (or authorised), with specific purposes;
- sharing a blacklist between sellers is even more sensitive: don't do it without legal advice;
- keep the minimum (number, count of refusals, dates), with no insulting comments, and no longer than necessary;
- prefer a neutral, announced rule ("after 2 refusals, we ask for payment upfront") over silent exclusion.
In 2014, the CNDP found that "barely 7%" of the websites it checked had notified their data processing (CNDP press release). Rules specific to WhatsApp are not covered by our sources: check with the CNDP.
Fraud against sellers
It happens too. In Tikkiouine (Agadir), a gang posed as ordinary customers and made off with goods at delivery (Le360, 2026). For expensive items: a deposit, identity checks at confirmation, prepayment above a threshold.
9. Managing cash
- Reconcile every week delivered parcels against cash remitted, parcel by parcel (Eurastech, 2026).
- Track the outstanding balance: how much collected cash is sitting with each courier today? If it keeps growing, ask questions.
- Don't leave everything with one courier. According to Le Matin (2026), some operators collect in cash on delivery "up to 10 to 20 times their revenue".
- Declare your business. The tax authority is auditing about 80 online sellers by matching courier transfers (around MAD 120 million) against declared revenue (Hespress, date to be confirmed). Informal sellers can be traced through their couriers.
- Get online payments ready. A CMI application to accept cards takes 3 to 6 weeks, sometimes 10 (Eurastech, 2026). Since the Competition Council's October 2024 decision, CMI is selling its acquiring business and new players are arriving, such as Damane Cash (Médias24, 2025).
10. KPIs to track every week
| KPI | Formula | Benchmark |
|---|---|---|
| Confirmation rate | Confirmed ÷ orders received | 60–70% manual according to vendors |
| Delivery rate | Delivered ÷ shipped | Compare against yourself week after week |
| Refusal rate | Refused ÷ shipped | Swiftlog: under 10% excellent, 10–20% acceptable, 20–35% worrying, over 35% critical (anecdotal) |
| Ad cost per delivered parcel | Ad spend ÷ delivered parcels | MAD 51.3 in the example's typical scenario |
| Profit per delivered parcel | Profit ÷ delivered parcels | Must cover your fixed costs |
| Time to confirm | Order to successful call | Target: under 2 hours |
| Delivery time | Pickup to delivery | By zone and courier |
| Remittance time | Delivery to cash received | By courier |
| Cash held by couriers | Collected but not remitted | Should stay stable |
| Refusal rate by segment | By product, city, traffic source, agent, courier | This is where decisions are made |
11. A 30-day action plan
Week 1: measure
- Export your last 3 months of orders and calculate the 5 funnel rates.
- Enter your numbers in the COD calculator: what is your maximum ad cost?
- List the outstanding cash held by each courier.
Week 2: confirm better
- Roll out the call script and the WhatsApp message above.
- Set a rule: call within 2 hours, 3 attempts over 2 days.
- Add the day-before reminder.
Week 3: make the offer honest
- Reshoot photos and a video with the real product.
- Add a size chart, specs, lead time and total price.
- Update your legal notice: company name, physical address, phone number, return terms (Article 29 of Law 31-08).
Week 4: steer
- Compare delivery rates by courier and by zone; renegotiate or rebalance.
- Cut the ads and products with the highest refusal rates.
- Test a deposit on baskets over MAD 300.
- Set up the weekly dashboard and redo the calculation.
Further reading
- The customer side: the buyer's guide to cash on delivery, worth sharing with your customers.
- The long game: breaking the "low-end product + inflated price" cycle.
Need help?
I work with online stores in Morocco and beyond, in French, English and Arabic: store builds and redesigns, confirmation workflows, courier selection, dashboards and conversion optimisation. If you'd like an outside look at your numbers, see my e-commerce services or get in touch.