Roughly 65 percent of Meta advertisers who report double-counted or missing conversions in 2026 are leaking measurement at a single, findable point — usually a broken deduplication key, not a failure across the whole stack — yet most respond by disabling one source, which throws away coverage instead of fixing the cause. Meta is explicit that you should run both the browser Pixel and the Conversions API; the fix is never to switch one off by reflex, it is to find the one point where the two events stop matching.
This guide works forward from the event through five failure points — the event_id, the event_name, Event Match Quality, the server-side setup, and timestamps and currencies — so you spend your time on the cause, not the symptom. To check your account against the most common measurement leaks automatically, run our free 5-axis ad account audit.
Updated 2026-05-10 with current Events Manager deduplication, Event Match Quality and Conversions API gateway behavior observed across US, UK and European accounts.
- One shared event_id per event, passed to both Pixel and CAPI — this is the single key Meta
deduplicates on. 2. Matching event_name —
Purchaseon the browser must equalPurchaseon the server. 3. Run both sources — redundancy plus a shared key improves coverage without inflating counts. 4. Event Match Quality measures how well your parameters identify a person — raise it from the server. 5. A gateway or partner can rewrite the event_id — inspect the server-side path before trusting the numbers.
How should browser Pixel and server CAPI work together?
The relationship between the two sources is the foundation, so understand it before chasing any mismatch. The browser Pixel fires from the visitor's device, while the Conversions API sends the same events from your server — and Meta intends them to run together, not as alternatives.
Why both — The browser Pixel loses events to ad blockers, tracking prevention and consent prompts, while the server Conversions API can miss events when a parameter is absent or a request fails. Run together, each source covers the other's gaps and the combined signal is more complete and resilient than either alone.
Redundant by design — Meta recommends sending the same events from both sources at the same time. This is deliberate redundancy, not a mistake. The catch is that redundancy only works when Meta can recognize the two reports as one event and merge them, which is what deduplication does.
The shared key — The mechanism that makes redundancy safe is a shared event_id. When the Pixel and the Conversions API both send the same event_id, Meta pairs them and counts one conversion. Break that key and redundancy becomes double-counting. To see how this compares with Google's model, read our Meta CAPI versus Google Enhanced Conversions guide.
Why does deduplication via event_id fail?
Deduplication is the most common point of failure because it depends on two values matching exactly across two independent code paths. When it breaks, every conversion can be counted twice. Check three things.
event_id mismatch — Meta pairs a browser event and a server event when they share the same event_id within a short window. If the server generates its own event_id instead of reusing the one the Pixel created, the two look unrelated and both are counted. Generate the id once and pass it to both sides.
event_name mismatch — Deduplication also requires the same event_name on both sources. A Purchase on the browser and a purchase or a custom name on the server will not pair. Keep the standard event names identical, character for character, across Pixel and Conversions API.
Window and order — The two events must arrive close enough in time to fall inside the dedup window, and a long server delay can push the pair apart. Send the server event promptly and keep timestamps honest. For the deeper architecture, see our gateway versus server-side GTM comparison.
Double-counting or missing events — how do you tell?
The two symptoms look opposite but often share a root cause, and telling them apart points you straight at the fix. Compare Meta's counts against the truth in your shop or CRM before you judge any campaign.
Double-counting tell — A Purchase count in Events Manager that runs near double your real order count almost always means deduplication is failing. The browser and server events are both landing but Meta is not pairing them, so one sale is recorded as two.
Missing-events tell — A count that runs below your real orders points the other way: one source is dropping events. The browser may be blocked by ad blockers or consent, or the server may fail to fire when a parameter or trigger is absent. Here the fix is coverage, not dedup.
The reconciliation — Pull your true order count for a clean window and compare it to the deduplicated total. A figure near double signals a dedup break; a figure well below signals dropped events; a figure close to truth means measurement is healthy. This reconciliation is the fastest way to know which problem you actually have.
Is weak Event Match Quality hiding your conversions?
With dedup understood, Event Match Quality is the next suspect because weak matching makes events harder to attribute and can read as missing in reporting. The score tells you how well Meta can tie each event to a person.
Event Match Quality — This is Meta's rating, from poor to great, of the customer-information parameters you send. It does not break deduplication by itself, but a low score weakens attribution and optimization, which is often why conversions appear to vanish from reporting.
Customer-information parameters — Strong matching uses hashed email and phone, name, city, state, zip, country, the IP address, and the Facebook identifiers fbc and fbp. Normalize and hash these values correctly; a malformed or unhashed parameter is ignored and lowers your score.
Server advantage — The Conversions API can add parameters the browser never sees, such as a reliable IP or order data from your backend. Sending richer customer information from the server is the most direct way to raise the score. Our Meta and GA4 attribution discrepancy guide covers how matching feeds reporting.
Are you using test events and the diagnostics tab?
Before you trust any live number, validate the fix with Meta's own tools. Two features in Events Manager confirm in minutes what would otherwise take days of guessing.
Test Events — This tool lets you fire a real conversion and watch both the browser and the server event arrive in real time. It is the definitive check that a shared event_id is working, because Meta will show whether the pair is deduplicated as it happens.
Diagnostics tab — The diagnostics tab surfaces issues Meta detects on your dataset, from missing parameters and unverified domains to setup warnings. Read it before and after any change; a cleared warning is proof a fix landed, and a new one flags a regression.
End-to-end validation — Fire one purchase through the real funnel, confirm the event_id and event_name match, check the currency and value, and watch the deduplication status. Only once Test Events shows a clean, deduplicated pair should you trust the live reporting. This single validation prevents shipping a fix that quietly fails in production.
Which server-side setup breaks deduplication?
How you send server events shapes whether dedup survives, because each setup handles the event_id differently. There are three common paths, and each has a characteristic failure mode.
Direct integration — Your own server calls the Conversions API directly. This gives you full control of the event_id, but a coding bug that regenerates the id per request, or sends events to a different dataset than the Pixel, will silently break dedup.
Conversions API Gateway — A hosted gateway forwards events for you. It is fast to deploy, but a gateway that constructs its own event_id instead of reading the one the Pixel set will produce two unpaired events. Confirm the gateway preserves the original event_id.
Partner integration — A platform or app sends events on your behalf. Convenient, but you have least control: a partner may use a different event_name, a separate dataset, or its own event_id scheme. Verify the partner shares the Pixel's keys. Our gateway versus GTM guide compares these paths in depth.
Turning off the Pixel or the Conversions API to fix double-counting feels obvious, but it throws away the coverage Meta built the dual setup to provide — leaving you blind to whatever that source uniquely captured. The browser sees events the server misses, and the server sees events ad blockers hide. Fix the shared event_id so deduplication works, then keep both sources running so redundancy protects your measurement instead of inflating it.
How do you align timestamps and currencies?
The last failure point is the data inside the event, where small inconsistencies quietly break pairing and distort value. With keys and setup clean, align the details and re-measure one change at a time.
Timestamps — Both sources must report the event close enough in time to fall inside the dedup window. A server that batches events or fires hours late can push the pair apart so Meta counts them separately. Send the server event promptly and stamp it with the true event time.
Currency and value — The Pixel and the Conversions API should report the same currency code and the same value for a given purchase. A server sending a different currency or a pre-tax value while the browser sends post-tax skews your ROAS and can confuse matching.
One change at a time — After each fix, re-check the deduplication column and reconcile against your real order count, not after all changes at once, so you know which lever moved the result. Size your returns before you scale with our ROAS calculator, and to surface every measurement leak automatically, run the SteerAds free 5-axis audit.
Sources
Official sources consulted for this guide:
-
facebook.com — about the Conversions API
-
facebook.com — event deduplication
-
developers.facebook.com — Conversions API docs
-
facebook.com — Meta Ads
FAQ
Why do my Meta Pixel and Conversions API events not match?
A mismatch almost always traces to one of five points, and you find it by walking forward from the event. First, the event_id: if the browser Pixel and server CAPI do not send the exact same event_id, Meta cannot pair them and counts both. Second, event_name: dedup needs matching names like Purchase on both sides. Third, Event Match Quality: weak customer parameters mean Meta cannot match the event to a person. Fourth, the server-side setup: a gateway or partner may strip or rewrite the event_id. Fifth, timestamps and currencies that drift apart. Diagnose them in that order and roughly 70 percent of mismatches resolve fast.
I see double-counted purchases in Events Manager — what do I check first?
Open Events Manager and look at the event deduplication column for your Purchase event first, because a dedup break is both the most common cause and the fastest to confirm. If the browser Pixel and server CAPI events are not being paired, you will see the count roughly double. Confirm both sources send the same event_id and the same event_name, then use Test Events to fire one real purchase and watch whether Meta marks the pair as deduplicated. Most double-counting traces to a missing or mismatched event_id, and this single check resolves the majority of cases in under an hour.
Could a broken event_id be inflating my conversions?
Yes, and it is the most common dedup leak. Meta deduplicates by matching the same event_id plus event_name across the browser Pixel and the Conversions API within a short window. If the server generates a new event_id instead of reusing the one the Pixel sent, or if a gateway rewrites it, the two events look unrelated and both are counted. The tell is a Purchase count that runs near double your real order count in your shop or CRM. Confirm the event_id is created once, shared between client and server, and passed through untouched by any partner integration.
What is Event Match Quality and why does it matter?
Event Match Quality is Meta's score, from poor to great, for how well the customer-information parameters you send let Meta match an event to a person. Strong parameters — hashed email, phone, name, city, IP and the Facebook click id fbc and browser id fbp — raise the score and improve attribution and optimization. A low score does not directly break deduplication, but it weakens matching and can make events look missing in reporting. Send as many normalized, hashed parameters as you legitimately can, especially from the server, where the Conversions API can add data the browser cannot.
How do I stop my Meta Pixel and CAPI events double-counting?
You stop double-counting by making deduplication work, not by turning off one source. Generate a single event_id per event, pass it to both the browser Pixel and the Conversions API, and send the same event_name on both. Confirm in Events Manager that the deduplication column shows the pair as deduplicated. Keep both sources running, because the browser captures what the server misses and the server captures what browsers block. Check any gateway or partner setup that could rewrite the event_id. Use Test Events to validate one real conversion end to end before trusting the live numbers.
Is running both Pixel and Conversions API always better?
Yes, when deduplication is configured correctly. Meta recommends sending events redundantly from both the browser Pixel and the Conversions API, because each covers the other's gaps — browsers lose events to ad blockers, ITP and consent prompts, while the server can be blocked by missing parameters or downtime. Sent redundantly with a shared event_id, the two sources improve coverage and resilience without inflating counts, because Meta deduplicates the pair. Run both is the right default; the only requirement is that the dedup keys match. Without matching keys, redundancy turns into double-counting.
How fast can I fix a Pixel and CAPI mismatch?
The fastest wins land within a day. Aligning the event_id and event_name across both sources takes effect immediately and stops obvious double-counting the same afternoon. A Test Events validation confirms the fix in minutes once code ships. Event Match Quality improvements need a few days of fresh data to register a higher score. A server-side setup change through a gateway or partner can take a day to deploy and a few days to confirm. Sequence the work so the instant dedup fix runs first while the slower matching and infrastructure changes accumulate data.