A COD-heavy store running Google or Meta ads has a measurement problem it usually discovers late: the ad platform is optimising on the orders it can see, and it can't see cash. The browser pixel fires (maybe) when the order is placed — but a COD order isn't revenue yet, and when it becomes revenue at the doorstep, no pixel is present. Cancel-at-confirmation and RTO make it worse: the pixel counted orders that never became money.
What the platform learns instead
Bidding algorithms chase whatever signal they're fed. Feed them placed-orders and they'll happily find you audiences that place orders and refuse parcels. Feed them completed, paid revenue and they hunt buyers who actually pay. Same budget, different customers.
The server-side fix, in three parts
- Capture the click id at checkout: gclid (Google) and fbclid (Meta) ride in on the landing URL — store them with the order, because attribution dies without them.
- Upload conversions from the server when money is real: prepaid on payment, COD when the order completes — with true values. Google's offline-conversion path and Meta's Conversions API exist exactly for this.
- Retract what fails: a cancelled COD order gets withdrawn, so the algorithm unlearns it.
Identity raises the match rate
Click ids don't survive every journey. Enhanced conversions bridge the gap: the shopper's email and phone, hashed irreversibly, ride along with the event so the platform can match it to a signed-in user. A phone-verified checkout has this identity for essentially every order — which is a quiet superpower of OTP-first flows.
Keep your pixels; dedupe them
Server events don't replace your pixels — they complete them. Both carry the same order id, and the platforms deduplicate on it. You keep the browser signal's speed and gain the server's truth.
The cheapest ad optimisation available to a COD store is telling the truth to the algorithm.
Want these numbers for your store?
Try the RTO calculator or book a demo.