> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mad-kitty.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Facebook numbers vs real sales

> Why Meta shows more, fewer, or nothing compared to your real sales — and how to check with Opti whether it's a problem

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](/team/opti/tracking) 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](/team/opti/tracking/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.

<Note>
  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](#how-to-check-with-opti).
</Note>

## 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](/team/bidder/facebook-setup/install-your-pixel).
* **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](/team/opti/tracking/how-sales-are-counted)). 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:

| What you see                                                                 | What it usually means                                                           | Do                                                                                     |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| Small, **stable** gap week over week                                         | Attribution reach, refunds, browser loss                                        | Nothing — this is the normal kind                                                      |
| Meta ≪ Opti on a **trial** funnel, StartTrials roughly matching trial starts | Trial conversions Meta can't see                                                | Nothing — Bidder steers on trials here                                                 |
| Meta ≪ Opti on a **direct** plan, beyond \~5%                                | Pixel not delivering                                                            | Ask Opti to audit pixel fires per sale; check the pixel baked into the current publish |
| Gap **growing** week over week                                               | Tracking drift — a publish without tracking, a changed pixel, a new destination | Ask Opti which week it started and what changed; re-publish if needed                  |
| Real sales, **zero** pixel events                                            | Wiring — stale publish or non-funnel destination                                | Re-publish / install the pixel where the ads land                                      |
| Meta ≫ Opti for weeks, not explained by refunds                              | Attribution windows claiming sales you didn't get from ads                      | Tell **Bidder** — it is scaling on numbers that flatter the ads                        |

<Tip>
  **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.
</Tip>
