- Most bad COD orders aren't fraud. They're impulse buys, unreachable phones and vague addresses, and all of them can be caught before the parcel leaves.
- Stack five cheap checks: OTP at checkout, WhatsApp confirmation before dispatch, address validation, a deposit or fee on risky carts, and a blocklist for repeat refusers.
- A WhatsApp confirmation costs USD 0.0107 in Saudi Arabia and USD 0.0157 in the UAE in Meta fees. One refused parcel costs about SAR 78.
- Confirming within an hour and not shipping after two failed contacts cuts everyday refusals from about 15% to 6–8%.
- Track confirmation rate and RTO by campaign every week. A campaign full of unconfirmed orders is buying you the wrong customers.
Cash on delivery wins you first-time buyers in the Gulf. It also invites orders that never turn into cash.
A fake number, a shopper who cooled off overnight, or an address the driver can't find. Each one costs you a delivery, a return trip and the ad that won the order.
The fix is simple: check every COD order before it leaves your shelf. Verify the phone, confirm on WhatsApp, get the address right, and ask risky carts for a small deposit.
Here's the full verification playbook, what each layer costs, and the numbers to track. It works on Shopify, Salla, Zid or WooCommerce.
Why do COD orders fail?
Most failed COD orders aren't criminal. They're ordinary buyers who weren't ready, plus a few pranksters.
They fall into four groups:
- Fake orders. Made-up phone numbers, prank orders, or an order placed in someone else's name.
- Impulse orders. A shopper taps "buy" on an Instagram or TikTok ad, then changes their mind before the driver arrives.
- Unreachable shoppers. A wrong digit in the phone number, a phone switched off, or nobody answers the driver.
- Wrong or vague addresses. A district and a landmark, with no building number the driver can find.
Each group needs a different check. An OTP catches fake numbers, but it can't stop a real buyer who cools off. Confirmation catches that buyer, but only a good address gets the parcel to the right door.
That's why verification works as a stack, not a single app. For the cost side of a refused parcel, see COD refusals and returns.
The COD verification stack
Think of it as five filters. Each one catches orders the one before it missed, and the cheapest go first.
| Layer | When it runs | What it stops | Typical cost |
|---|---|---|---|
| 1. OTP phone check | At checkout | Fake and mistyped numbers, prank orders | From USD 5 a month, or about 1 US cent per code |
| 2. WhatsApp or call confirmation | Within 1–4 hours of the order | Changed minds, duplicate orders, wrong details | USD 0.0107 per message in Saudi Arabia |
| 3. Address validation | At checkout | Failed first attempts, lost parcels | Free format checks, low-cost autocomplete |
| 4. Deposit, COD fee or prepaid discount | At checkout | Low-intent orders on big or risky carts | Some lost conversions, or SAR 5–10 off prepaid |
| 5. Blocklist and COD rules | Before COD is shown | Repeat refusers and high-risk carts | Free in most platforms and apps |
You don't need all five on day one. Start with layers 1–3, then add deposits and rules once you see where refusals come from.
Layer 1: verify the phone with an OTP
An OTP (one-time password) is a short code sent to the shopper's phone. They type it in before the COD order is created.
It does one job very well: it proves the number is real and belongs to the person ordering. That alone removes most prank orders and typos, because the driver will now reach a working phone.
Set it up like this:
- Send the code on WhatsApp first, with SMS as the fallback.
- Ask for it only on COD orders, so prepaid buyers skip the step.
- Hold orders that fail the check, send a reminder after about 10 minutes, and auto-cancel after 30.
- Save the verified number, so returning buyers don't need a new code every time.
Meta bills an OTP as an authentication message, which costs the same as a utility message. Shopify apps start at about USD 5 a month, and we compare them in our guide to Shopify COD and OTP apps.
Layer 2: confirm every order before dispatch
Confirmation is the layer that saves the most money. A real buyer can still change their mind, and you want to know before you pay the courier.
Send an automatic WhatsApp message soon after the order, with a one-tap "Confirm" button. The faster you send it, the fresher the buyer's intent.
Here's the timing that works:
- Send within an hour. LianLian Global reports everyday refusals falling from about 15% to 6–8% when stores confirm within an hour.
- Close the window within 2–4 hours. Quiqup, a UAE courier, puts the RTO cut from confirming in that window at 10–15 points.
- Chase twice, then stop. One reminder, one call. If both fail, don't ship.
- Call high-value carts. A 30-second voice call settles size, colour and delivery time on expensive orders.
Keep it a utility message: no offers, no discount codes. A promo turns it into a marketing message, which costs USD 0.0576 in Saudi Arabia instead of about one cent. Our WhatsApp marketing guide covers templates and opt-ins.

Layer 3: get the address right
A verified, confirmed buyer can still lose you a parcel if the driver can't find the door. So the address is part of verification too.
In Saudi Arabia, the National Address is now required. Since 1 January 2026, couriers can reject, hold or return parcels without a valid one.
Make the Short Address a required checkout field. It looks like ABCD1234: four letters, then four digits.
Validate the format at checkout, and tell shoppers they can find it in the SPL, Absher or Tawakkalna apps. Mordor Intelligence found only 68% of Saudi shoppers entered a compliant address before the mandate. Our guide to the Saudi National Address rule explains the full format.
In the UAE there's no national code, so ask for a building name, a landmark and a map pin.
Layer 4: deposits, COD fees and prepaid discounts
Some carts deserve more than a confirmation. A small payment upfront filters out anyone who isn't serious.
You have three tools, from strongest to softest:
- Partial deposit. Take 10–20% online, or just the shipping fee, and the rest in cash. EasySell, a COD checkout app, reports 20–40% lower RTO from deposits.
- COD fee. Charge a small, clearly shown fee for paying cash. Couriers charge you SAR 3–14 per COD parcel in Saudi Arabia, so a fee of a similar size recovers it.
- Prepaid discount. Offer SAR or AED 5–10 off, or free express, for paying online.
Use deposits for new customers and big carts, not for everyone. A deposit on a SAR 99 first order costs more in lost sales than it saves.
Layer 5: blocklists and COD rules
The last layer decides who sees COD at all. Some shoppers refuse again and again, and you don't need to keep paying for it.
Rules worth setting:
- Prepay-only for repeat refusers. Flag any phone number with a past refusal and hide COD for it.
- A COD cap. Above an order value you choose, ask for a deposit or full prepayment.
- Risky areas and products. If one district or product line refuses far more often, require a deposit there.
- Duplicate orders. Merge or cancel several COD orders from one number within minutes.
Zid added a setting in December 2025 that hides COD from customers with a history of cancellations. On Shopify and WooCommerce, COD rule apps do the same job.
What to ask your courier
Your courier sees the last mile, so its tools finish what your checkout started. Before you sign, ask:
- Does it check the Saudi National Address at booking, and what happens if it's missing?
- Does the driver message or call the shopper before arriving?
- Can shoppers pay by card at the door? SPL, for example, offers POS terminals and payment links.
- Does it send you a daily report of refused and undelivered parcels, with a reason for each?
- Can you change the address or reschedule a parcel that's already out?
The answers decide how many confirmed orders actually turn into cash. For delivery attempts, failed-delivery handling and delivery speed, see our guide to cutting COD return-to-origin. To compare couriers, browse COD logistics providers.
The numbers to track every week
You can't fix what you don't measure. Five numbers tell you whether verification is working:
| Metric | How to calculate it | What good looks like |
|---|---|---|
| OTP pass rate | Verified COD orders ÷ COD checkouts started | Watch for sudden drops by campaign |
| Confirmation rate | Confirmed orders ÷ COD orders placed | Nearly all orders confirmed or cancelled before dispatch |
| Refusal rate | Refused parcels ÷ COD parcels shipped | 6–8% with fast confirmation |
| COD RTO | Refused + undelivered ÷ COD parcels shipped | 8–15% for COD-heavy stores, 3–5% for prepaid |
| Prepaid switch rate | COD orders paid online after confirmation ÷ COD orders | Rising month on month |
Split every metric by ad campaign and city. A campaign with a low confirmation rate is buying you people who never meant to pay.
Feed confirmed or delivered orders back to your ad platform where you can, so it learns to find more real buyers.
Worked example: a Dammam fragrance store
Picture a Dammam fragrance store taking 1,000 COD orders a month at SAR 230 each. It ships every order unchecked, and 15% come back refused.
It adds the first three layers: WhatsApp OTP, one-hour WhatsApp confirmation and a required Short Address. Each layer stops a different slice of the bad orders:
| Per month | Before | After |
|---|---|---|
| COD checkouts | 1,000 | 1,000 |
| Stopped at OTP | 0 | 40 |
| Cancelled, not confirmed | 0 | 50 |
| Shipped | 1,000 | 910 |
| Refused at the door | 150 (15%) | 60 (6.6%) |
| Delivered and paid | 850 | 850 |
| Lost on the 90 stopped orders (SAR 40 ad spend each) | SAR 0 | SAR 3,600 |
| Lost on refusals (SAR 78 each) | SAR 11,700 | SAR 4,680 |
| Total COD loss | SAR 11,700 | SAR 8,280 |
The 90 stopped orders still cost their ad spend, but never reach a courier. The store delivers the same 850 paid orders and keeps SAR 3,420 a month. It also books 90 fewer courier trips and frees up stock that used to sit in vans.
What does it cost? About 2,000 WhatsApp messages (codes plus confirmations) run roughly SAR 80 in Meta fees. Add an app at around USD 10 a month, and the bill stays near SAR 120.
That's about 28 riyals back for every riyal spent. Plug in your own order value, courier fee and refusal rate:
COD cost calculator
What cash on delivery really costs you, and what moving buyers to prepaid or BNPL is worth.
Shelf price incl. 15% VAT. VAT is removed before margins.
UAE merchants report 20-35% COD RTO; prepaid target 3-5%.
Confirm COD orders on WhatsApp before dispatch
Reported to cut COD RTO by 10-15 points (Quiqup, 2026).
KSA via OTO: SAR 3 (Shipa) to 14 (Naqel); Aramex 6.
Your cost to win an order. A refused parcel burns it. (Estimate)
Margin assumptions
% of shelf price. Gateway + platform fees; BNPL contracts vary (est. 2-8%).
Monthly cost of COD
SAR 11,000
- COD fees: SAR 3,200
- 100 failed COD parcels: SAR 7,800
COD fees plus everything a refused COD parcel burns: both shipping legs, handling and the ad spend.
Cost per delivered order
Shipping, payment fees and failed-parcel costs, spread over the orders that arrive.
Contribution margin per month
What the COD mix costs you: SAR 10,072 / month
Move buyers to prepaid / BNPL
Extra contribution
+SAR 3,022/ month
+SAR 36,259 per year
COD share falls from 50% to 35.0%. Assumes the same orders, now prepaid at prepaid RTO and fees.
Estimates based on published courier fees and RTO benchmarks as of October 2026 (OTO, Quiqup) and our SAR 230 worked example. Ad and return costs are estimates; confirm rates with your courier and payment provider.
Notes for Ramadan and peak seasons
- Refusals rise around Ramadan. LianLian Global puts them near 25% in that period, so tighten deposits and caps before it starts.
- Message after sunset. Saudi daytime activity drops sharply in Ramadan, so schedule confirmations and calls for the evening.
- Plan ahead. Our guide to running an online store during Ramadan covers staffing and delivery windows.
Notes for Salla, Zid and WooCommerce stores
- Use the built-in rules first. Switch on Zid's cancellation-history filter before you pay for a rules app.
- Add WhatsApp confirmation through an app. Connect your own WhatsApp Business number, so shoppers see your brand name.
- Make the Short Address a required field in Saudi checkout settings, and check your courier reads it.
Notes for cross-border sellers
- Verify harder, because refusals cost more. A refused parcel shipped from abroad rarely makes it back profitably.
- Hold stock locally. COD works best from a Saudi or UAE 3PL, where refused stock goes straight back on the shelf.
- Confirm in Arabic. Shoppers trust a message in their own language from a local-looking number.
Verification turns COD from a gamble into a steady source of new customers. Start with OTP and WhatsApp confirmation this week, then add deposits where the data points. More payment guides live in our GCC payments hub.
Frequently asked questions
Yes, as long as you tell shoppers upfront. Add one line at checkout and in your order confirmation saying COD orders ship after WhatsApp confirmation. Shoppers who meant to buy will tap confirm, and the rest were unlikely to accept the parcel anyway.
Sources & further reading
- How to reduce your RTO rate in UAE ecommerce — Quiqup
- COD risk and localised operations in Middle East ecommerce — LianLian Global
- WhatsApp Business Platform pricing — Meta
- Saudi National Address for ecommerce — Quiqup
- Cash on Delivery Is Dying Faster Than You Think — EasySell
- Saudi Arabia e-commerce logistics market — Mordor Intelligence
- Cash on delivery without losses — Zid
- COD-Verify: WhatsApp OTP for COD orders — Shopify App Store
This guide is for general information only and is not legal, tax or financial advice. Rules and fees change — always confirm with the official source or a licensed advisor.

Maya is MiddleEastEcom's lead guide and editor. She researches GCC marketplaces, payments and regulations and turns them into practical playbooks for sellers.
Meet Maya



