BLOG · 19 OCTOBER 2026

Meta event deduplication on Shopify: how event_id works and how to read the Event Deduplication tab

Events Manager warns that your deduplication rate is low, or a developer tells you the Purchase event is "missing deduplication parameters". Both point to the same mechanism. Meta can receive one order twice, once from the shopper's browser and once from a server, and it needs a shared key to know they are one purchase.

This article covers that mechanism and Meta's own report on it. To find a second sender behind too many purchases, see our page on Meta counting purchases twice.

Why Meta needs to deduplicate at all

Meta's developer documentation recommends sending events from the Meta Pixel and the Conversions API together, and calls this a redundant setup. The server fills the gaps the browser leaves, and Meta keeps one copy of each event.

Shopify's help says that at the Enhanced and Maximum data sharing levels of the Facebook & Instagram channel, the store uses the Conversions API as well as the Meta Pixel. At the Standard level only the pixel sends. A pixel in the theme, a Purchase tag in Google Tag Manager or another app each adds one more sender.

The two ways Meta matches events

Meta's page on deduplicating pixel and server events describes two methods.

Event ID and event name. This is the method Meta recommends. The pixel passes an eventID as the fourth argument of its fbq('track', ...) call, and the server sends event_id with the event. When the IDs match and the event names match, for example both are Purchase, Meta treats them as one event. Meta's parameter reference says the ID can be any unique string, and names order numbers or transaction IDs as good choices.

Browser ID or external ID. As a fallback, Meta can match on the event name together with fbp (the browser ID from the _fbp cookie) or external_id. Meta says this method generally works only when the browser event arrives first and the server event follows.

Two rules apply to both methods:

  • The 48-hour window. Meta deduplicates matching events only when they arrive within 48 hours of the first one with that ID. A server copy sent days later is counted again.
  • The first event usually wins. When the two copies do not differ in a meaningful way, Meta says it generally keeps the one it received first.

So a Purchase is "missing deduplication parameters" when one of the copies carries no event ID, or carries one that the other copy does not share. Meta then has only the weaker fallback to go on, or nothing at all.

How to read the Event Deduplication tab

Meta's guide to verifying a Conversions API setup points to one place. In Events Manager, open your pixel, click Event Details for the Purchase event and open the Event Deduplication tab. Meta describes three figures there:

  • Rate of Events Deduplicated: the share of events from each source that Meta deduplicated.
  • Rate of Deduplication Key Usage: the share of events from each source that carried each dedupe key, such as the event ID.
  • Overlap: of the events that carried a given key, the share Meta received from both sources, measured against the source that sent fewer events.

Meta says a warning appears when your deduplication rate is too low. Its guide does not name the warning, and the wording in your account may differ.

The same guide says the Overview page shows events before deduplication. A high Purchase count on Overview is therefore no proof of a duplicate on its own.

Check your store in three steps

  1. 1Open the Event Deduplication tab for Purchase and read the key usage for browser and for server. If one source shows the event ID on almost every event and the other on few, the sender with the low share is the one to fix.
  2. 2Read the overlap. If both sources carry the key but the overlap is low, the two sides send different values, for example the order number with its # sign on one side and the long order ID on the other.
  3. 3In Events Manager, use Test events and place one real order with a low price product. Open each Purchase that arrives and compare the event ID of the browser copy with the server copy.

To list every sender in your store and compare Meta's count with your orders, follow the steps on Meta counting purchases twice.

How to fix what you find

One sender sends no event ID. Usually a theme snippet or an old Tag Manager tag. If another sender already covers both browser and server, remove only this one's Purchase. If you keep it, it needs the same ID as the server copy.

Both send an ID, but different ones. Pick one value per order, such as the Shopify order ID, and make both sides use exactly that string.

The server copy arrives late. A server that retries for days can fall outside the 48-hour window.

Two senders that were never meant to work together. For example the Facebook & Instagram channel at Enhanced and a second app with its own server connection. They rarely share IDs. Keep one of them for purchases. Turning off the channel's data sharing stops all the events it sends, page views and add to cart included, so decide what you still need first.

The Shopify options that send the server copy are in Meta's Conversions API options for Shopify.

FAQ

Is the order number a good event ID?

Yes, if every sender uses the same value for the same order. Meta names order numbers and transaction IDs as examples. What breaks deduplication is two formats of the same order.

Does deduplication fix past purchases?

Meta's pages describe deduplication of events as they arrive, within 48 hours. They do not say past counts are corrected after a fix, so expect old days to stay as they are.

Will removing the browser pixel stop the warning?

It removes the need to deduplicate, but you also lose what the pixel sends besides purchases. Meta's recommended setup keeps both with a shared ID.

Where Tikra fits

Tikra sends one Purchase for each paid online order of your store from our server to Meta. Meta starts in a check before sending. With a key that can read your pixel's statistics, Tikra reads Meta's own count every day for at least 48 hours and shows whether another connection still sends your purchases; with another key, sending starts after you turn the store's own Meta purchase tracking off and confirm it on the Meta card. Either way, Meta goes live only when its own count shows no other sender, or when you confirm that the store's own Meta purchase tracking is off. Tikra applies your customers' consent choices to every order, and in Strict mode an order is sent only with the buyer's consent. A written guarantee in our Terms covers eligible orders: at least 97 % reach each platform, fixed within 12 hours or a month's fee credited (Terms of Service, section 8).

The free diagnosis sends none of your orders anywhere. It shows your paid orders of the last 7 full days, how many came from a Meta, Google or TikTok ad, and, after a full day and 10 paid online orders, how many your shoppers' browsers reported. With a key that can read your pixel's statistics, it also shows Meta's count and flags when Meta counts some purchases twice.

Run the free diagnosis

Related

Guide

Meta Pixel purchase event not firing on Shopify, and "fbq is not defined"

How to test whether your Meta Pixel sends Purchase on a Shopify store, what the result tells you, and what the "fbq is not defined" error means for your tracking.

Guide

The Meta event ID with a Shopify custom pixel: how to make browser and server purchases match

How to pass an eventID from a Shopify custom pixel so Meta can match it with the Conversions API copy of the same order, which value to use, how to check that both sides send the same string, and what to do about the Facebook & Instagram app.

Problem

Low Event Match Quality for Purchase in Meta

Meta rates your Purchase event's Event Match Quality low. See why a Shopify store gets that score and how to check which customer data your purchases carry.

Guide

GA4 purchase event not firing on Shopify: how to test it with one order

How to test whether the GA4 purchase event fires on a Shopify store, using Realtime, DebugView and Tag Assistant, what each result means, and the usual reasons the event never arrives.

All tracking problems · All guides