Your store shows orders. Your payment gateway shows money. But Ads Manager reports a fraction of those purchases — or none at all. When that happens, campaigns optimise on incomplete data, budgets drift toward the wrong ad sets and reporting stops being trustworthy.

Missing Purchase events are rarely caused by one thing. They usually come from a chain of small gaps: a Pixel that fires on the wrong page, a Conversions API (CAPI) setup that sends incomplete payloads, or browser and server events that are not deduplicated. This guide walks through the checks I use to find where the signal breaks.

1. Why Meta Purchase events go missing

Before changing anything, understand the common failure points. Most tracking problems sit in one of these areas:

  • The Purchase event fires on a page customers never reach, such as a thank-you page skipped by an external payment gateway redirect.
  • Browser tracking is blocked by ad blockers, privacy settings or consent banners.
  • The server-side event is sent without the identifiers Meta needs to match it to a person.
  • Browser and server events are duplicated or overwrite each other because event_id values do not match.
  • The event is sent to the wrong Pixel or dataset ID, or the access token has expired.
  • Values or currency codes are missing or malformed, so the event is received but not usable for value optimisation.

2. Browser Pixel vs server-side Conversions API

The Meta Pixel runs in the visitor's browser. The Conversions API sends events from your server directly to Meta. They are designed to work together, not to replace each other.

How the Meta Pixel and Conversions API compare
Meta Pixel (browser)Conversions API (server)
Where it runsVisitor's browserYour server, platform or tag gateway
Affected by ad blockersYesNo
Depends on page loadYes — the confirmation page must loadNo — can fire from the order system
Identifiers availableCookies such as _fbp and _fbc, browser dataHashed customer data you send, plus forwarded cookies
Typical setup riskFires on the wrong page or twiceIncomplete payloads, missing event_id, expired tokens

Running both, with proper deduplication, gives Meta the most complete and reliable view of each purchase.

3. How to verify Purchase events

  1. Open Events Manager, select your dataset and check the Overview for Purchase events from both Browser and Server sources.
  2. Use Test Events: enter your store URL, place a real or test order and watch the Purchase event arrive in real time.
  3. Install the Meta Pixel Helper browser extension and confirm the Pixel fires once on the order confirmation page.
  4. Compare a single day of orders in your store or CRM against the events received for the same day and time zone.

If test events arrive but live events do not, the problem is usually page flow, consent or a condition in your tag manager rather than the Pixel code itself.

4. Diagnosing API requests and payloads

When server events are missing or flagged, inspect what your server actually sends. A healthy Purchase payload includes:

  • event_name set to Purchase with consistent capitalisation.
  • event_time as a Unix timestamp in seconds, close to the real purchase time.
  • action_source set to website for website purchases.
  • event_source_url pointing to the page where the purchase happened.
  • user_data with hashed identifiers such as email and phone, plus client_ip_address, client_user_agent, fbp and fbc where available.
  • custom_data.value and custom_data.currency with a numeric value and an ISO currency code such as INR.
  • An event_id that matches the browser event for the same order.

Check your server logs or platform integration for API errors. Common responses point to an invalid access token, a wrong dataset ID, malformed parameters or timestamps that are too old.

5. Configuring event deduplication

When both the Pixel and CAPI send the same purchase, Meta needs a way to recognise them as one event. It does this with the event name and event_id.

Event deduplication outcomes
Browser eventServer eventResult
Purchase, event_id = order_1042Purchase, event_id = order_1042Deduplicated — counted once
Purchase, no event_idPurchase, event_id = order_1042Likely double-counted
Purchase, event_id = abc123Purchase, event_id = order_1042Not matched — counted twice
purchase (lowercase)PurchaseTreated as different events

Generate the event_id once — the order ID is a reliable choice — and pass the same value to both the browser and the server event.

6. Event Match Quality and matching parameters

Event Match Quality (EMQ) in Events Manager estimates how well your server events can be matched to Meta accounts. Low match quality means fewer events can be attributed to ads.

  • Send hashed email and phone number for every purchase where the customer provided them.
  • Normalise data before hashing: lowercase emails, trimmed spaces, phone numbers with country code.
  • Forward the fbp and fbc cookie values from the browser to your server event.
  • Include client_ip_address and client_user_agent from the original request.
  • Add external_id when you have a stable customer ID.

Only send customer data you are permitted to share under your privacy policy and applicable consent requirements.

7. Internal sales vs attributed conversions

Even with perfect tracking, Ads Manager will not match your store's order count. That is expected. Meta reports purchases it can attribute to ads within your attribution setting, not every order you receive.

  • Orders from organic, direct, email or other paid channels are not credited to Meta.
  • Attribution windows such as 7-day click and 1-day view limit which purchases are counted.
  • Ads Manager reports by impression or click time, while your store reports by order time.
  • Time zone and currency settings may differ between your ad account and your store.

The goal is not identical numbers. It is a stable, explainable gap — and reliable event delivery so campaigns optimise on real signals.

8. A practical tracking diagnostic checklist

Pixel and CAPI diagnostic checklist

  • The correct Pixel or dataset ID is used everywhere.
  • Purchase fires exactly once per order in the browser.
  • Purchase arrives from the server for the same orders.
  • Browser and server events share the same event_id.
  • custom_data.value and currency are present and correct.
  • event_time reflects the actual purchase time.
  • Hashed email or phone is sent with server events.
  • fbp and fbc are forwarded where available.
  • Consent mode or banners are not silently blocking events.
  • No API errors in server logs or the platform integration.
  • Events Manager diagnostics show no unresolved warnings.
  • Daily store orders and received events follow a consistent ratio.

9. When a technical tracking audit is useful

Some issues can be fixed in an afternoon. Others need a structured audit across your site, server, tag manager and ad account. An audit is worth considering when:

  • Reported purchases dropped suddenly after a website, checkout or platform change.
  • Events arrive but value-based bidding or ROAS reporting looks unreliable.
  • You run a custom checkout, external payment gateway or app-to-web journey.
  • Several agencies or plugins have added tracking over time and nobody owns the full setup.
  • You are scaling budgets and need confidence that optimisation signals are accurate.

Conclusion

Missing Meta purchases are a data delivery problem before they are a campaign problem. Verify the event fires, inspect what your server sends, deduplicate with a shared event_id, improve match quality and set realistic expectations for attribution. Fix the signal first — optimisation improves after it.

Frequently asked questions

Why does Meta show fewer purchases than my store?

Meta only reports purchases it can attribute to ads within your attribution window. Organic and other-channel orders, blocked browser events and unmatched server events all widen the gap.

Do I need both the Meta Pixel and Conversions API?

Meta recommends using both. The Pixel captures browser behaviour, while CAPI sends events that ad blockers and page-load issues cannot stop. Deduplication keeps them from being counted twice.

What is event_id used for?

It lets Meta recognise a browser event and a server event as the same action. Use the same value, such as the order ID, for both.

How do I improve Event Match Quality?

Send normalised, hashed customer identifiers such as email and phone, forward fbp and fbc cookies, and include IP address and user agent from the original request — within your consent and privacy obligations.

How long does it take to fix Meta purchase tracking?

Simple issues such as a wrong dataset ID can be fixed quickly. Custom checkouts, external gateways or multiple overlapping integrations usually need a structured audit before changes are made.

Related: See performance marketing case studies · Explore consulting services