Why COD is different
In markets where almost every order is prepaid, "order placed" and "sale made" are the same thing. In Bangladesh they are not. Most orders are Cash on Delivery, and some of them are cancelled on the phone, refused at the door, returned by the courier, or were never real in the first place. Every merchant who runs COD knows their own return rate — it is rarely zero.
What that does to your Meta campaigns
A normal pixel or CAPI setup sends a Purchase the moment the order is placed. Meta has no way of knowing that order was later refused. So it treats the person who placed it as a buyer, optimises your campaign to find more people like them, and reports a ROAS that includes sales that never happened.
The fix is not to send less data. It is to send the Purchase at the moment it becomes true — when the money is collected.
How PixelMili handles it
In Settings → Courier & COD you choose when a COD order counts as a Purchase:
- When delivered (default): the Purchase is held and sent only once the order is delivered. Cancelled or returned orders are never sent.
- Both: a Purchase is sent immediately, plus a separate DeliveredPurchase event on delivery, so you can optimise on delivered buyers with a custom conversion.
- When placed: every COD order is sent immediately — the fastest signal, but fake orders count.
Online-paid orders (bKash, Nagad, card) are always sent immediately — they are already real.
How PixelMili knows an order was delivered
- WooCommerce: marking the order Completed counts as delivered; Cancelled, Refunded or Failed drops it.
- Steadfast or Pathao: connect your courier account and delivered parcels are sent, cancelled or returned ones dropped — automatically, nothing for your team to click.
- Custom sites: send OrderConfirmed or OrderCancelled with the same order_id from your own order-management page.
Meta only accepts events from the last 7 days, so an order delivered late is sent with its delivery time rather than rejected. Orders still undelivered after 30 days are dropped.
Stopping fake orders before they ship
Holding the Purchase fixes what Meta learns from a fake order — it doesn't give you back the courier charge. That part has to happen at checkout, before the parcel leaves. If you are still choosing where to build your store, Sellsull — the Bangladeshi online store builder made by the team behind PixelMili — has a fake-order check built in, alongside Cash on Delivery, bKash and Steadfast or Pathao courier booking.
What to expect
Your reported purchase count in Ads Manager will go down — that is the point. The number that remains is the number of orders you actually got paid for, and that is the signal you want Meta optimising towards. Give a campaign time to re-learn on the cleaner signal before judging it, and compare it against your delivered-order count in the PixelMili Orders report rather than against the old, inflated numbers.