Skip to main content
The most common question after the first week of traffic: “Ads Manager says 41 purchases, Opti says 33 sales — which one is lying?” Neither. They measure different things on different clocks, and they will never match exactly. The useful question is whether the gap is the normal kind. Quick orientation — Meta counts what its pixel saw and could attribute to an ad; Opti counts what the payment provider accepted and what money was actually kept. Bidder steers on Meta’s numbers (that’s what Meta optimizes on); Opti reports on money. See Funnel tracking & analytics for the two-stream model.

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 /setup created or switched the pixel afterwards, the live funnel keeps firing the old one (or none) until you re-publish. Ask Opti to /publish and 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:
Loop Bidder in when it matters. Bidder makes budget decisions on Meta’s numbers. If those numbers are systematically off for a reason you now understand — a trial funnel Meta can’t value, a pixel that was silent for three days — say so in Bidder’s chat too, so it doesn’t read a tracking gap as a performance change.