Sign inBook a Call
Insights

Meta Ads Strategy for D2C Brands With High COD Return Rates

Meta counts a COD order as a sale when it is placed, not when it is paid. Here is how to set up your events, ads and reporting so your spend goes to orders that get delivered.

By the Monastic Media teamUpdated 23 Oct 20267 min read

Why COD returns break your Meta numbers

When a shopper places a cash on delivery order, your store fires a Purchase event straight away. Meta records the sale, adds the order value to your ROAS and learns from that buyer. Nobody tells Meta that the parcel was refused at the door five days later, or that the phone number was switched off.

So Meta keeps doing what you asked. It finds more people like the ones who placed orders. If many of those people never pay, the algorithm is learning from the wrong buyers. Your reported ROAS goes up while your bank balance does not, and the gap gets wider as you scale.

This is not a tracking bug. It is how the event is defined. The fix is partly in Meta, partly in your checkout and partly in your ads.

Work out your real numbers before you change anything

Start with a plain export from your store admin or your shipping panel for the last 60 to 90 days. Tag every order as prepaid or COD, and as delivered, returned (RTO) or cancelled. Then match orders back to campaigns using UTM parameters. Do not rely on Meta's purchase count for this. It will not match your store anyway (see why Meta purchases don't match store orders).

Now compare what Meta reports with what actually landed.

  • Compare RTO share across ads, not just across the account. One impulse hook can drag the whole account down.
  • Check prepaid share by campaign. A campaign with fewer purchases but more prepaid orders often wins on delivered revenue.
  • Update this sheet weekly. Delivered data arrives late, so it is a weekly decision tool, not a daily one.
What Meta showsWhat you should track next to itWhy it matters
PurchasesDelivered ordersOnly delivered orders pay for the ad
ROASDelivered revenue divided by spendThis is the ROAS your business runs on
Cost per purchaseCost per delivered orderRTO orders still cost you shipping both ways
Purchases by adRTO share by ad and by campaignSome ads attract far more refusals than others
Purchases by regionRTO share by state and pin codeReturns cluster in specific areas and couriers

Choose which purchase event Meta should optimise for

You can send Meta more than one purchase signal through the Conversions API and set up custom conversions from them. The question is which one your campaigns should chase. Each choice trades signal quality against signal volume.

  • Prepaid plus confirmed COD is the practical middle ground for most Indian D2C brands. Fire a custom event when a COD order is confirmed on WhatsApp or by call, and a prepaid purchase event at checkout. Optimise for both together.
  • Keep sending the normal Purchase event too, so reporting and audiences stay intact.
  • Meta's own guidance is around 50 optimisation events per ad set per week to exit learning. If a stricter event cannot reach that, use fewer ad sets or a broader event. Read how the learning phase reset works before switching live campaigns.
  • If you use value optimisation, send a lower value for COD orders than for prepaid ones. Meta then leans toward buyers who are worth more to you.
  • Get the basics right first: deduplicated browser and server events with good match quality. Our Meta CAPI setup guide covers this.
Optimisation eventGood forWatch out for
All purchases (default)Low RTO accounts, new accounts that need volumeTeaches Meta to find people who order but refuse
Prepaid purchase onlyBrands with a healthy prepaid shareFewer events, so ad sets may stay in learning longer
Prepaid plus confirmed CODMost COD-heavy brandsNeeds a fast confirmation step so the event fires within hours
Delivered orderHigh AOV brands with enough volumeFires days after the click, so much of it falls outside the attribution window

Fix the checkout, because the ad cannot fix a refusal

Meta can only learn from the signal you give it. The cheapest way to get a better signal is to cut bad COD orders before they ship, and to move genuine buyers to prepaid.

  • Confirm every COD order on WhatsApp within an hour or two. Unconfirmed orders get a reminder, then a call. Do not ship what nobody confirmed.
  • Give people a reason to prepay at checkout and again in the confirmation message: faster dispatch, a small gift, or a partial advance that holds the order. Say it clearly, without making COD feel like a penalty.
  • Use a one-click checkout that pre-fills the address and shows UPI first. Many COD orders come from people who simply found paying online slow.
  • Restrict COD by pin code and order value where your RTO data shows repeated refusals. Keep prepaid open everywhere.
  • Flag repeat refusers by phone number and block COD for them.
  • Route by courier performance per region. Some RTO is a courier problem, not a buyer problem.

The ads that attract COD returns, and what to run instead

Creative decides who Meta shows your ad to, so it also decides who refuses the parcel. In COD-heavy accounts we see the same patterns behind high RTO ads.

Ads built on curiosity and impulse pull orders from people who never meant to pay. Ads that hide the price get orders from people who are shocked at the door. Ads that oversell a product get refused when the box looks smaller than the video.

  • Judge new creatives on confirmed and delivered orders, not on first-day purchases. An ad with lower reported ROAS can be your best ad on delivered revenue.
  • For apparel and footwear, a size guide in the video cuts refusals from wrong sizes. See our video ad hooks guide for hooks that sell without baiting.
Raises RTOLowers RTO
Hooks built only on shock or curiosityHooks built on a real problem the buyer has
Price hidden until checkoutPrice shown on screen in the ad
Heavy free-gift or limited-time pressureA true reason to buy now
Studio shots that flatter size and colourReal-hand demos showing actual size, fit and finish
No mention of delivery or paymentPrepaid benefit mentioned in the ad or the caption

Targeting, placements and exclusions

  • Stay broad, but feed it a cleaner event. Narrow interest targeting does not fix RTO. The optimisation event does.
  • Exclude refusers. Upload phone numbers of customers who refused COD orders as a custom audience and exclude them from prospecting and retargeting.
  • Seed from good buyers. Build lookalikes and value lists from delivered prepaid customers, not from all purchasers.
  • Check placements. If a placement brings a high share of COD orders that never confirm, remove it and compare delivered results.
  • Watch regions. Meta does not know your pin code data. If a state keeps refusing, you can exclude it at ad set level while you fix courier or checkout issues there.
  • Retarget for prepaid. Cart abandoners already know the product. Push the prepaid benefit hard in retargeting ads.

How to report and scale when delivery data arrives late

Delivered numbers come in days after the spend, so you need two views. Use a daily view from Meta for pacing and early creative signals. Use a weekly view of confirmed and delivered results for real decisions.

Set a working ratio from your own history: for each campaign, how much of Meta's reported revenue turns into delivered revenue. Use that ratio to read daily ROAS until delivered data catches up. When you scale, watch whether the ratio drops. Scaling often pulls in colder, more COD-heavy buyers, and that is one reason ROAS falls when you raise spend.

Scale the campaigns that hold their delivered ROAS, not the ones with the best numbers in Ads Manager.

How Monastic Media helps

One in-house team in Surat scripts, shoots and edits the ads videos and runs the Meta and Google campaigns they go into, so the people who see the numbers make the next ad. See our performance marketing

Read next

Questions

Should I turn off COD to stop RTO?

Usually no. Many Indian buyers still prefer COD, and switching it off often cuts genuine orders. Restrict it by pin code, order value and repeat refusers, and push prepaid with a clear benefit instead.

Can I tell Meta that a COD order was returned?

Meta has no standard event for a returned order that removes a sale. What works is sending separate custom events, such as prepaid purchase and confirmed COD, through the Conversions API and optimising for those instead of the raw Purchase event.

Why is my Meta ROAS good but I am losing money?

Meta counts every COD order as revenue when it is placed. If many of those orders are refused, you pay for the ad and for shipping both ways while earning nothing. Track delivered ROAS by campaign to see the real picture.

Is optimising for delivered orders better than optimising for purchases?

The signal is better, but delivery happens days after the click, so many events fall outside Meta's attribution window and volume is low. For most brands, optimising for prepaid plus confirmed COD orders gives a cleaner signal that still fires fast.

Which creatives cause more COD returns?

Impulse and curiosity hooks, ads that hide the price and ads that overstate size or finish. Showing the price, the real product in hand and the prepaid benefit usually brings in buyers who accept the parcel.

Naaptol
“MM helped us scale from 0 to ₹2.6 CR/month in just 6 months with clear communication and industry expertise!”
Rakesh Naidu GM @ Naaptol

Ready to work with one team?

Book a call. If we can help you hit your goals, we will tell you how; if we cannot, we will tell you that too.