Why Meta shows more than your sales
- Attribution reach. Meta claims a purchase if the buyer clicked or viewed an ad within the attribution window — across devices. Opti ties a sale to an ad only when the buyer arrived through that ad’s tracked link. Someone who saw your ad on Monday and typed the URL on Thursday is a Meta purchase and an “unattributed” sale for Opti.
- Meta never hears about the money going back. Refunds, chargebacks, and payment holds that get released — none of it reaches the pixel. Meta’s purchase count and revenue only ever go up; Opti’s net goes down when money does. See How sales are counted.
- Different clocks. Meta books a purchase to the day of the ad click, in the ad account’s timezone; Opti to the checkout day. Sales near midnight land on different days in the two dashboards. Compare weeks, not days.
- Modeled conversions. For part of the traffic (notably iOS), Meta estimates conversions it couldn’t observe directly. Estimates are, well, estimates.
Why Meta shows fewer than your sales
- Browser loss is small and normal. The pixel fires from the buyer’s browser; dropped connections, privacy settings, and ad blockers eat a slice of it. Up to ~5% under-count on web events is entirely normal — don’t chase it.
- The one real reason: trial conversions. For a trial funnel, Meta receives a StartTrial the day the trial begins — and nothing when that trial converts to a paid subscription a week later. So Meta shows trial starts and close to zero purchase revenue, while Opti shows the conversions and the money. That is by design, not a bug: the pixel reports what happens in the funnel, and the conversion happens on the billing side days later. Bidder knows this and steers trial accounts on cost per trial, not on Meta’s revenue.
If your funnel sells a direct (no-trial) plan and Meta still shows markedly fewer purchases than Opti shows sales — more than that ~5% — something is wrong with pixel delivery. Jump to How to check with Opti.
Why Meta shows nothing
- The funnel was published before the pixel was set or changed. A funnel bakes in the pixel at publish; if Bidder’s
/setupcreated or switched the pixel afterwards, the live funnel keeps firing the old one (or none) until you re-publish. Ask Opti to/publishand check again. - Ads point at a URL that isn’t the funnel — your own site without the pixel installed. See Install your pixel on an external site.
- You’re looking at a preview or a test-mode session. Those never fire — open the published URL.
Why both numbers keep moving
Recent days are provisional on both sides. Meta can take up to ~3 days to finalize conversions for a given day; Opti’s recent days change as trials convert and refunds land (backdating). Yesterday is a draft everywhere.How to check with Opti
Opti has Meta’s per-ad results sitting right next to real sales, plus the funnel’s own record of every pixel call — so reconciliation is a question, not a project.✅ “compare Meta’s reported purchases and revenue with our real sales for the last 7 days, per ad — where do they diverge?” ✅ “did the pixel fire for every sale yesterday? list any sale without a Purchase or StartTrial pixel event” ✅ “how much of last week’s revenue is trial conversions and refunds — the parts Meta can’t see?” ✅ “is our unattributed-sales share growing or stable over the last 4 weeks?”What a healthy answer looks like, and when to act: