This is the most common silent failure in paid advertising and the least discussed, because it produces no error anywhere. The campaign runs. The clicks arrive. The dashboard shows numbers. And the platform is optimising toward an event that never happens, which means it is optimising toward nothing at all — while you interpret the results as if they meant something.
What it looks like when it happens
A real campaign we run, so this is not hypothetical. Meta, retail, carousel creative:
2,272 impressions
Delivered normally, no issues flagged.
105 link clicks at 4.62% CTR
Genuinely good numbers. On any dashboard this reads as a healthy campaign.
Zero product-page views
Not few. Zero. The number the campaign was optimising toward.
The store records hundreds of product views a week, so the pixel plainly worked somewhere. The cause: the ads pointed at category pages, and the store fired the product-view event only on individual product pages.
💡 So Meta was asked to find people likely to view a product, then shown no examples of anyone doing it. There was nothing to learn from. The ads were fine, the audience was fine, the creative was fine. The measurement was broken, and on a conversion objective that is indistinguishable from the ads being broken.
The five checks, in order
1. Does the event fire on the page the ad points at?
Not your homepage. Not a product page you picked at random. The exact destination URL in the ad.
Open it with Meta Pixel Helper or the Events Manager test tool running, or with Google Tag Assistant for Google. Watch for the specific event your campaign optimises toward. If it does not appear, you have found your problem and nothing else on this list matters yet.
The fix is either to move the ad destination to a page where the event fires, or to add the event to the destination page. Most store platforms allow the second in a few lines.
2. Is the event name exactly right?
Platforms are strict about standard event names. A near-miss — ViewContent versus view_content, Purchase versus purchase_complete — is treated as a custom event that nobody is optimising toward. It appears in your events list, so it looks like it is working.
Check the name in Events Manager against the name your campaign is set to optimise for. They must match exactly, including capitalisation.
3. Does the purchase event carry a value?
A purchase event without a value cannot be optimised for return on ad spend, which is usually the entire point of running it. Push a test order through and confirm the value and currency arrive with it.
Also confirm the currency is the one you think. A value sent in the wrong currency produces return figures that are wrong by the exchange rate, and nothing flags it.
4. Are browser and server events deduplicated?
If you send events both from the browser pixel and from a server-side integration, each needs a shared event ID so the platform counts them once. Without it, every purchase is counted twice.
This is worse than under-counting, because the campaign looks twice as profitable as it is and you scale spend into a number that does not exist.
5. Are you counting the conversions that actually matter?
For service businesses, most enquiries are phone calls. If your tracking counts only form submissions, you are measuring the minority and telling the platform to optimise toward it. Set up call conversion tracking with a minimum duration so wrong numbers do not train the algorithm.
And where cash on delivery is common, a purchase event at checkout fires before you know the order will be paid for. The platform then optimises toward people who place orders rather than people who complete them. Sending a delivered or payment-confirmed event back as a separate conversion is the partial fix, once you have the volume to optimise against it.
The consequences of getting it wrong
The bidding is blind
Conversion optimisation with no conversion data falls back to something close to random. You are paying a premium for optimisation you are not receiving.
The reporting lies
Every decision you make afterwards is based on a number describing something other than your business.
The learning never completes
The ad set cannot exit the learning phase without events, so delivery stays erratic and expensive indefinitely.
Any tool on top is useless
Automated optimisation, budget shifting and creative rotation all act on this data. Broken tracking does not just waste the tool — it lets the tool make things worse confidently.
A five-minute pre-launch routine
- 1Open the exact ad destination with the pixel debugger running. Confirm the optimisation event fires.
- 2Check the event name matches the campaign setting, character for character.
- 3Submit a test conversion — an order, a form, a call — and find it in Events Manager within a few minutes.
- 4Confirm value and currency where relevant.
- 5Only then set the budget and launch.
Five minutes, before every campaign. It is the highest-return five minutes in the whole discipline, and almost nobody does it.
Campaigns pointed where the event actually fires
Adyft builds campaigns with the destination and the conversion event considered together, and shows you everything before launch. 14-day free trial, no card.
Start free — no card needed