Guides

Meta Pixel and Conversions API: How to Stop Counting Each Sale Twice

6 min read  ·  October 14, 2026

If your store sends the same purchase through the Meta Pixel and the Conversions API, Meta can count it twice. The fix is an event ID, a shared identifier that both sides send with the same event name, so Meta counts each conversion once. This guide explains how to add it and how to check that it works.

Setup timeAbout 30 min, if both event sources already run
You needAccess to store code or integration settings
Works withMeta Pixel and Conversions API, any platform
Last reviewedOctober 2026, from Meta docs

Based on official Meta documentation. Not tested on a live store.

Before you start

0 of 4 ready

Why the Meta Pixel and Conversions API count the same sale twice

The browser sends events through the Pixel. Your server sends the same events through the Conversions API. Without a shared key, Meta sees two separate events. Meta’s recommended method matches them on two fields: the event ID and the event name. Both sides must send both fields for the match to work.

In practice, the problem shows up as inflated purchase counts in Events Manager and in your ad reports. Campaigns then optimize toward a number that is higher than your real orders. Fixing the match does not change your sales, but it makes the reported numbers match your store’s order data.

Step 1: Create one event ID per event occurrence

Generate a unique ID for each order, add-to-cart action or checkout start. Store it so that the browser and the server can both read it. The ID should identify the event, not the customer, because two orders from the same customer need two different IDs.

Expected result: Every event you track has one ID that both your browser code and your server can use.

Step 2: Send the event ID with the Pixel call

Add the ID as the fourth argument of the Pixel call, under the key eventID. Replace ORDER_12345 with the ID from step 1.

fbq('track', 'Purchase', {value: 12, currency: 'USD'}, {eventID: 'ORDER_12345'});

Expected result: Each Pixel call for the event carries its eventID.

Step 3: Send the same ID with the server event

Send the event through the Conversions API with the same value in event_id and the same event name in event_name. The browser key is eventID with event, and the server key is event_id with event_name. Both must reach the same Pixel ID.

If your platform’s integration sends server events for you, check its settings for an event ID option before you write any code.

Expected result: Server events carry the same event_id and event_name as the matching browser events, sent to the same Pixel ID.

Step 4: Keep the two events within 48 hours

Meta deduplicates events only when they arrive within 48 hours of the first event with the same ID. Send the server event close to the browser event. An event that arrives more than two days later is counted as a separate conversion.

Expected result: Both copies of each event reach Meta within 48 hours of each other.

Check whether deduplication works

Meta’s Dataset Quality API reports how many Pixel events also arrive through the Conversions API with shared deduplication keys. The metric is called event coverage and is a 7-day average. The endpoint also reports dedupe key feedback, which shows how often browser and server events carry each key. Meta recommends sharing deduplication keys for all of your events, and a higher share of events carrying the key is better.

To use the endpoint you need your Pixel’s ID, a valid access token for that Pixel, and the permissions listed in the documentation. It reads your live data, so you do not need a test store to use it.

Common mistakes and how to fix them

Purchases appear twice
Likely cause

Server events have no event ID, or the value differs from the browser.

What to check

Compare the ID in the Pixel call with the event_id sent for the same order.

Coverage is low
Likely cause

Only some event types carry the key.

What to check

Check each event type separately, starting with Purchase.

Conversions drop after a change
Likely cause

The ID changed between browser and server, or the event names differ.

What to check

Compare event names exactly, including capitalization.

Events counted late or not at all
Likely cause

The server event arrived more than 48 hours after the browser event.

What to check

Check when your server sends the event.

Variants by platform

Some platforms and partner integrations send the event ID for you. Check your platform’s documentation for that option before you add code yourself. If you use a partner integration, confirm that it sends the ID for every event type you track, not only for purchases.

Key takeaways

Browser and server events match when the Pixel’s eventID equals the Conversions API’s event_id and the event names match.

Use a unique ID per event, not per customer.

Meta deduplicates events only within 48 hours of the first event.

The Dataset Quality API shows event coverage and deduplication key feedback for your live data.

FAQ

Do I need the Conversions API if my Pixel already works?
Meta's documentation describes the Pixel and the Conversions API as complementary. The server path can capture events that the browser misses, for example when the Pixel fails to load in the visitor's browser. Event ID deduplication only works when both sources send the event, so the two need to be set up together.
Does the event ID have to be random?
No. It has to be unique for each event occurrence and identical in the browser and on the server. An identifier that refers to the order or to the specific event works well.
What happens if I send only server events?
Meta's documentation says the FBP or external ID method does not deduplicate events when only one source is used. Event ID deduplication requires the matching browser and server events, so a server-only setup has nothing to match against.

Get practical store fixes in your inbox

Join the KonvertiQ newsletter for short, data-backed tips on checkout, trust and conversion. No spam, unsubscribe anytime.

We use your email only to send the newsletter. See our Privacy Policy.

We use cookies for essential site functionality and, only with your consent, for analytics. More in our Cookie Policy.

Cookie settings

Choose which categories of cookies you want to allow. Essential cookies are always active.

Essential
Required for the site to function.
Analytics
Helps us understand how the site is used.
Marketing
Used to personalize advertising.