Fix guides

Meta pixel firing twice: how to find and remove the duplicate

When Meta counts every event twice, the pixel is almost always installed in two places: the theme plus a shop integration, a hard-coded snippet plus Google Tag Manager, or two GTM tags. Find the second source with the Network tab's Initiator column, keep the install you control, and use event IDs so browser and server events count once.

Check your own site: the free scan tells you in about a minute whether this problem is on your page.

Confirm it is really double

  1. Open a product page with DevTools on the Network tab, filter on facebook.com/tr and reload.
  2. Two requests with the same id (pixel ID) and the same ev (for example PageView) per page load means the event is sent twice. Two different id values is a different problem: a second pixel, often an old agency's, which the scan reports as "More than one Meta ID is tagged".
  3. Meta Pixel Helper also warns when a pixel is activated more than once on the page.
  4. For purchases, compare the Purchase count in Events Manager with your actual orders for the same days.

Where the second install hides

  • Theme code plus the shop integration. The pixel snippet was pasted into the theme years ago; later the Facebook & Instagram channel on Shopify, or a WooCommerce plugin, added it again.
  • Hard-coded snippet plus a GTM tag. A developer added the base code, and someone later built the same pixel in Tag Manager.
  • Two GTM tags. A Custom HTML pixel tag next to a template tag, or one tag on "All Pages" and another on "History Change" that both send PageView.
  • Two plugins. A marketing plugin and a consent plugin that each load the pixel.
  • Single-page apps. The router re-runs the base code on every route, calling fbq('init', …) and PageView again for the same view.
  • Old checkout scripts. Purchase code left in Shopify's additional scripts next to the app's own purchase event.

Find which one is which

In the Network tab, turn on the Initiator column (right-click the column headers). Each /tr request names the script that sent it: fbevents.js called from your theme file, from gtm.js, or from an app's script. Then:

  • Search the page source (View Source, not the Elements panel) for fbq('init' to find hard-coded installs.
  • Open GTM Preview and look for every tag that fires the pixel on the same event.
  • On Shopify, check the theme's theme.liquid, apps with pixel settings, and Settings, then Customer events.

Fix it

Keep one install and remove the others. On shop platforms, the official integration is usually the one to keep: it sends standard events with product data and handles the Conversions API. Remove the theme code and any purchase code in old checkout scripts.

Do it in one change and check the Network tab right after: removing the wrong copy leaves you with no pixel. If ads are running, note the date, because reported conversions will drop to their real level and bidding may need a few days to adjust.

Pixel plus Conversions API is not a duplicate

The same Purchase from the browser and from your server is expected and is counted once when both carry the same event name and event ID: eventID in the pixel call (shown as eid in the request) and event_id on the server. Without matching IDs it is counted twice. Events Manager shows, per event, whether browser and server events are being deduplicated.

Sources

Based on the platforms' public documentation; menus and names change, so check the linked pages if a step looks different.