Key takeaways
- Ads Manager counts a purchase when a COD order is placed, so cancelled, fake and returned orders still sit inside your reported CPA and ROAS.
- Judge Meta ads on cost per delivered order, including the shipping you lose on RTO, not on cost per purchase.
- Verify COD orders before dispatch with OTP, WhatsApp or call confirmation, address checks and pincode rules.
- Once you have enough volume, send a confirmed or prepaid order event through the Conversions API and optimise for it, so Meta learns from real buyers.
- Nudge shoppers to prepaid with a small incentive, a COD fee or partial COD, and test the effect on both conversion rate and delivered orders.
Facebook ads work for cash-on-delivery brands in India when you measure and optimise for delivered orders, not placed ones. Ads Manager counts a purchase the moment a COD order is placed, so cancelled, fake and returned (RTO) orders still flatter your results. Verify COD orders before dispatch, judge campaigns on cost per delivered order, and once volume allows, optimise Meta for confirmed or prepaid orders.
Why do COD brands need a different approach?
Cash on delivery is how many Indian shoppers prefer to buy from a brand they don't know yet. Removing it often costs more first orders than it saves. But COD creates three problems that Meta's reporting can't see.
- Cancellations before dispatch. Shoppers change their minds, order twice by mistake or don't answer confirmation calls.
- Fake or low-intent orders. Pranks, competitors, made-up addresses and impulse orders the buyer never meant to accept.
- RTO (return to origin). The parcel is shipped, then refused or undeliverable, and comes back. You pay shipping both ways and the ad cost is already spent.
Ads Manager counts a Purchase when the order is placed. It doesn't know which of those orders later failed. A COD-heavy store can look profitable in Ads Manager while losing money in the bank.
How do you calculate your true CPA for COD?
Work backwards from the orders that actually reach a customer and pay.
True CPA = (ad spend + shipping lost on RTO) ÷ delivered orders
Worked example
These numbers are hypothetical, to show the method. Replace them with your own from your store and courier reports.
- Meta ad spend for the month: ₹1,00,000
- Purchases in Ads Manager: 400, so reported CPA is ₹250
- Split: 240 COD orders and 160 prepaid orders
- COD orders cancelled or rejected at confirmation: 24 (10%), never shipped
- COD orders shipped: 216, of which 54 (25%) come back as RTO
- Prepaid orders shipped: 160, of which 5 come back
- Delivered orders: 162 COD + 155 prepaid = 317
- Shipping lost on RTO, at ₹120 per returned parcel for both legs: 59 × ₹120 = ₹7,080
True CPA = (₹1,00,000 + ₹7,080) ÷ 317 ≈ ₹338, against the ₹250 Ads Manager shows. That's about 35% higher. If your break-even CPA is ₹300, this campaign looks profitable in Ads Manager and loses money in reality.
Break-even with COD and RTO included
Your break-even CPA is the contribution margin a delivered order leaves before ad spend. For COD brands, include the costs that only COD orders carry: COD handling fees from the courier or payment partner, the share of RTO shipping each delivered order must cover, and any packaging and product you can't resell after an RTO.
Our guide to calculating break-even ROAS walks through the full formula, and the break-even ROAS calculator does the arithmetic. Run it with delivered-order numbers, not placed-order numbers.
How do you cut RTO and fake orders?
The best lever depends on where your losses come from. Most COD brands combine several of these.
| Lever | How it works | Trade-off |
|---|---|---|
| OTP at checkout | The shopper confirms their phone number with a one-time code | Adds a step, blocks typo and fake numbers |
| WhatsApp or call confirmation | Each COD order is confirmed before dispatch, and unconfirmed orders are held | Needs a tool or a person, delays dispatch slightly |
| Address quality checks | Flag incomplete addresses, missing landmarks and mismatched pincodes | Some genuine orders need a follow-up call |
| Pincode rules | Block unserviceable pincodes, restrict COD in pincodes with very high RTO | Loses some genuine buyers in those areas |
| Repeat-refuser list | Block COD for phone numbers or addresses with past refusals | Needs order history and clear rules |
| Prepaid incentive | A small discount, free shipping or a free sample for paying online | Costs margin on orders that would have prepaid anyway |
| COD fee | A modest charge for COD, shown clearly before checkout | Some shoppers drop off |
| Partial COD | A small advance by UPI, the balance on delivery | Adds friction, but filters out the least serious orders |
| COD limit on large orders | Prepaid only above a set order value | Protects the costliest RTOs |
| Fast NDR follow-up | Act on non-delivery reports within a day: call, reschedule, correct the address | Ongoing operations effort |
Fix the ad as well as the checkout
Some RTO starts in the ad. Shoppers refuse parcels when what arrives doesn't match what they expected.
- Show the price in the ad and on the first screen of the landing page, so nobody orders without knowing it.
- Show the real product, its size and what's in the box. Our guide to product photos for ads covers how.
- State delivery times honestly. A parcel that arrives a week after an impulse order is more likely to be refused.
- Avoid offers that attract only bargain hunters, such as very deep discounts on a first order, if they produce high RTO.
- Watch region-level results. If a few states or cities have far higher RTO, exclude them or restrict COD there.
Should you optimise for Purchase or for confirmed orders?
Meta's delivery system learns from the event you optimise for. If that event is every placed order, it learns to find people who place orders, including people who refuse them. If it's confirmed or prepaid orders, it learns to find people who follow through.
| Optimisation event | Volume | Signal quality | When it fits |
|---|---|---|---|
| Purchase at order placement | Highest | Includes fake and refused orders | New accounts, low volume, low RTO |
| Confirmed order (COD confirmed + prepaid) | Medium | Removes most fake and cancelled orders | Steady volume, confirmation in place |
| Prepaid purchase only | Lowest | Strongest intent | High RTO, enough prepaid volume |
| Purchase with adjusted value | Same as Purchase | Better, if values reflect expected delivery | Value optimisation with reliable data |
How to send a confirmed order event
- Set up order confirmation so each COD order gets a confirmed or rejected status within a few hours.
- Send a custom event, such as ConfirmedPurchase, from your server to Meta through the Conversions API when an order is confirmed, and for every prepaid order at payment. Include the same customer details (hashed email and phone) and order value as the original purchase, so Meta can match it to the person who saw the ad.
- Send it quickly. Meta's Conversions API only accepts website events up to seven days after they happened, and attribution windows are short, so confirm and send within hours, not days. This is why a delivered-order event is usually too late to optimise for, as delivery can take a week.
- Create a custom conversion from the event in Events Manager, or select it directly as the conversion event in a new ad set.
- Check volume. Meta generally needs around 50 optimisation events a week per ad set to exit the learning phase. If confirmed orders fall well short, keep optimising for Purchase and report on confirmed orders until volume grows.
Many brands run both for a while: the existing Purchase-optimised campaign, and a new campaign optimising for confirmed orders, compared on true CPA over a few weeks.
Value adjustments
If you use value optimisation, some brands send a lower purchase value for COD orders than for prepaid ones, reflecting the share of COD orders that typically get delivered. Meta then learns that prepaid buyers are worth more. Only do this if your delivery rates are stable and well measured, and keep the method consistent, because changing values changes what Meta chases.
How should you report COD performance?
Ads Manager alone can't tell you whether a COD campaign is profitable. Build a simple weekly table that joins Meta spend with your store and courier data.
| Metric | Source | Why |
|---|---|---|
| Ad spend | Ads Manager | The cost |
| Purchases (reported) | Ads Manager | What Meta thinks happened |
| Orders placed, COD share | Store | Real order count and mix |
| Confirmed orders | Store or confirmation tool | Orders worth shipping |
| RTO rate (by cohort) | Courier | Losses after dispatch |
| Delivered orders | Courier | The real result |
| True CPA | Calculated | The number you decide on |
Because RTOs take days to come back, report delivered orders by the week the order was placed, and update the previous two or three weeks as parcels resolve. Our template for a weekly Meta ads report has the structure, and Meta ads cost in India covers what CPMs and CPAs to plan around.
A 30-day plan for a COD-heavy account
- Week 1: measure. Pull the last 60 days of orders and match them to courier outcomes. Work out RTO rate by product, region and campaign, and calculate true CPA.
- Week 2: verify. Switch on OTP or WhatsApp confirmation for every COD order and hold unconfirmed ones. Add pincode and repeat-refuser rules.
- Week 3: nudge. Test a prepaid incentive or partial COD against your current checkout, and track delivered orders, not just conversion rate.
- Week 4: signal. Start sending a confirmed order event through the Conversions API. Once it has a couple of weeks of history, test a campaign that optimises for it against your Purchase-optimised campaign.
Keep the ads themselves stable while you do this, so changes in true CPA reflect the fixes rather than new creatives.
Creative and offers for COD shoppers
COD buyers are often first-time buyers testing whether a brand is real. Creative that builds trust tends to lower RTO as well as CPA.
- Proof the brand is real: real customers, real packaging, the team or the place you make the product.
- Clear return and exchange terms, stated simply.
- Regional language versions of your best ads, where your buyers prefer them.
- Bundles and combos that lift average order value, so each delivered order carries its ad cost.
- Prepaid benefits stated in the ad, such as faster dispatch or a free sample with online payment.
These patterns are common in categories such as Ayurveda and herbal and fashion, where COD shares tend to be high. The wider D2C playbook for India covers setup, creative and festive planning.
When you set a target CPA in Fly ROAS, use your COD- and RTO-adjusted break-even rather than the number Ads Manager suggests, so its test verdicts and stop line are judged against what a delivered order is really worth.
The summary
COD is a growth lever and a margin leak at the same time. Keep it, but price it, verify it and nudge shoppers towards prepaid. Measure Meta campaigns on cost per delivered order including RTO losses. Once volume allows, send confirmed or prepaid orders to Meta through the Conversions API and optimise for those, so the algorithm learns from buyers who actually accept the parcel.
Frequently asked questions
Does Facebook count COD orders that are returned?
Yes. Ads Manager counts a purchase when the order is placed, and it doesn't remove that purchase if a COD order is later cancelled, refused or returned to origin. Your reported CPA and ROAS therefore include orders that never earned you money. Track delivered orders in your store and courier data.
How do I calculate true CPA for a COD brand?
Add your Meta ad spend to the shipping you lost on RTO parcels, then divide by delivered orders. For example, ₹1,00,000 of spend plus ₹7,080 of RTO shipping across 317 delivered orders gives a true CPA of about ₹338, even if Ads Manager reports ₹250.
Can I optimise Meta ads for confirmed COD orders?
Yes. Send a custom event, such as ConfirmedPurchase, through the Conversions API when a COD order is confirmed and for every prepaid order, then optimise for it. Send it within hours, and make sure each ad set can reach around 50 of these events a week.
How can I reduce fake COD orders?
Use OTP phone verification at checkout, confirm every COD order by WhatsApp or call before dispatch, check addresses and pincodes, and block COD for numbers with past refusals. Partial COD, where the shopper pays a small advance by UPI, also filters out the least serious orders.
Should I turn off cash on delivery to stop RTO?
Usually not straight away, because many first-time buyers in India won't pay upfront to an unfamiliar brand. Test a prepaid incentive, a COD fee or partial COD first, and compare delivered orders and true CPA, not just conversion rate, before and after.






