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
Purchaseevent 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_idvalues 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.
| Meta Pixel (browser) | Conversions API (server) | |
|---|---|---|
| Where it runs | Visitor's browser | Your server, platform or tag gateway |
| Affected by ad blockers | Yes | No |
| Depends on page load | Yes — the confirmation page must load | No — can fire from the order system |
| Identifiers available | Cookies such as _fbp and _fbc, browser data | Hashed customer data you send, plus forwarded cookies |
| Typical setup risk | Fires on the wrong page or twice | Incomplete 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
- Open Events Manager, select your dataset and check the Overview for
Purchaseevents from both Browser and Server sources. - Use Test Events: enter your store URL, place a real or test order and watch the
Purchaseevent arrive in real time. - Install the Meta Pixel Helper browser extension and confirm the Pixel fires once on the order confirmation page.
- 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_nameset toPurchasewith consistent capitalisation.event_timeas a Unix timestamp in seconds, close to the real purchase time.action_sourceset towebsitefor website purchases.event_source_urlpointing to the page where the purchase happened.user_datawith hashed identifiers such as email and phone, plusclient_ip_address,client_user_agent,fbpandfbcwhere available.custom_data.valueandcustom_data.currencywith a numeric value and an ISO currency code such asINR.- An
event_idthat 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.
| Browser event | Server event | Result |
|---|---|---|
Purchase, event_id = order_1042 | Purchase, event_id = order_1042 | Deduplicated — counted once |
Purchase, no event_id | Purchase, event_id = order_1042 | Likely double-counted |
Purchase, event_id = abc123 | Purchase, event_id = order_1042 | Not matched — counted twice |
purchase (lowercase) | Purchase | Treated 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
fbpandfbccookie values from the browser to your server event. - Include
client_ip_addressandclient_user_agentfrom the original request. - Add
external_idwhen 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.
Purchasefires exactly once per order in the browser.Purchasearrives from the server for the same orders.- Browser and server events share the same
event_id. custom_data.valueandcurrencyare present and correct.event_timereflects the actual purchase time.- Hashed email or phone is sent with server events.
fbpandfbcare 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.
