Why the platform’s ROAS misleads you with COD
The ROAS (return on ad spend) shown in Meta Ads or TikTok Ads is computed from the “purchases” their pixel recorded. On a cash-on-delivery store, a “purchase” is simply an order placed: nobody has paid.
Between that order and cash collected, some fall away: cancelled at confirmation, unreachable, refused at the door. The platform still counts them as sales, and its ROAS looks flattered. You can show a ROAS of 4 and have a real ROAS of 2.5 — and decide to raise the budget on a campaign that loses money.
The fix is simple in principle: count only what has been delivered.
The three figures to follow
- Real ROAS = revenue from delivered orders ÷ ad spend.
- Real CPA = ad spend ÷ number of delivered orders (not placed orders).
- Net profit = delivered revenue − product purchase cost − fees (packaging, commissions) − delivery and return costs − ad spend.
A worked example with made-up values: a campaign spends 50,000 DZD and generates 100 orders placed at 3,500 DZD, so 350,000 DZD displayed — a platform ROAS of 7. If 65 orders are delivered, delivered revenue is 227,500 DZD and real ROAS is 4.55. With a product cost and fees of 1,800 DZD per delivered parcel (117,000 DZD) and 35 returns at 500 DZD of fees (17,500 DZD), what is left is 227,500 − 117,000 − 17,500 − 50,000 = 43,000 DZD of net profit. That last figure decides whether the campaign deserves more budget.
What Ecomly connects for you
- Meta Ads Manager and TikTok Ads Manager: from “Stores & Apps” you grant read access to your ad account. Ecomly pulls spend, impressions, clicks and results campaign by campaign (depending on your plan).
- Product ↔ campaign link: on a product’s page you indicate the Meta and/or TikTok campaign that promotes it. That product’s orders are then matched with the campaign’s spend.
- Product costs: purchase price and fees entered on the product page, for the profit calculation.
- Real deliveries: the “Delivered” status comes from your carriers, so you do not rely on the platform’s own claim.
The result: on the Meta Ads and TikTok Ads pages you see, per campaign, spend, ROAS and cost per result computed with your orders, and net profit per product appears in the statistics, dated at delivery.
Pixels and server events: sending delivery back to the platforms
Platforms optimise from the events you send them. If they only see “purchases” at order time, they learn to find people who order — not necessarily people who receive.
Ecomly installs your Meta pixel and TikTok pixel on your sales pages, and can also send events from its servers (the Conversions API on Meta’s side, the Events API on TikTok’s) to get around ad blockers. The purchase event goes out when the order is placed; when the order moves to “Delivered”, a custom delivery event is sent in turn. You can then build audiences and reports from confirmed deliveries, not just intentions.
The server API token is optional and entered in the pixel dialog; without it the browser pixel keeps working.
Watch the gap between spend and delivery
Advertising is paid today; delivery arrives several days later, and returns later still. Reading yesterday’s real ROAS is therefore misleading: today’s orders are not resolved yet, so the ratio looks bad, then improves.
Two habits help:
- decide on periods old enough for most parcels to have reached an outcome (delivered or returned), and treat the most recent ones as trends;
- follow the delivery rate per campaign or source: a campaign that brings cheap orders but very few deliveries is a bad campaign, even with a flattering displayed CPA.
A ten-minute-a-day advertising routine
- Open the platform page (Meta Ads or TikTok Ads) for your chosen period.
- Spot campaigns whose real ROAS and net profit are positive: those are the ones to feed.
- Spot those whose spend climbs without deliveries: pause them or change the creative.
- Open the delivery rate by source in the statistics before raising a budget.
- Note the product and its cost: a thin-margin product cannot carry a high CPA.
To cut the number of orders that fail after the click, see our four-layer protocol. And if you would rather ask an AI, it can read these figures: run Ecomly with Claude or ChatGPT.



