Settl.

Guides · 7 min read

Pixel and server events counted twice? How deduplication works

Server-side tracking should fill the gaps the pixel leaves, not double your numbers. If an ad platform suddenly reports more purchases than your store had orders, the browser and server versions of the same sale are usually not being matched. This guide explains how each platform recognises a duplicate and how to find what's breaking it.

Why the same purchase is sent twice on purpose

A good setup sends each purchase twice: once from the browser pixel and once from a server. The pixel catches details only the browser has, the server catches the sales the pixel misses because of ad blockers, in-app browsers or a thank-you page that never loads.

That only works if the platform can tell that both messages describe the same sale. It does that with an event id: a unique code per event that both the pixel and the server send. Same event name, same event id, and the platform keeps one.

How each platform deduplicates

From each platform's own documentation (checked October 2026):

  • Meta: the pixel's eventID must match the Conversions API's event_id, and the event name must match too. Meta deduplicates within 48 hours of receiving the first event with that id. There's also a fallback based on fbp or external_id, but Meta says it generally only works when the browser event arrives first, and not for events from a single source.
  • TikTok: pixel and Events API events need the identical event name and event_id. Duplicates within 48 hours are removed and TikTok keeps the first event it received. TikTok also removes duplicates sent from the same source (pixel-only or server-only) with the same event and event_id.
  • Snapchat: send an event_id with every event. Snap uses the event_id together with the timestamp within a 48-hour window, so accurate timestamps matter. On the Snap Pixel, event_id maps to transaction_id for purchases and client_dedup_id for other events.
  • Pinterest: event_id is the key Pinterest uses; duplicated conversions are only removed when the event ids match.

Signs your events are being double counted

  • Purchases in Ads Manager are close to double your orders in Shopify for the same days, often right after installing a new tracking app.
  • Reported revenue and ROAS jump overnight while your actual sales didn't change.
  • The platform's diagnostics show a warning about duplicate events or missing event ids.
  • In the event overview, browser and server events both arrive but without a shared event id, or with different event names (for example Purchase from one source and CompletePayment from the other on TikTok).

The usual causes

  • Two apps send the same pixel's purchases: for example a platform's own Shopify sales channel app and a tracking app, each with its own event ids.
  • The pixel is installed twice: once in the theme code and once through an app, a custom pixel or a tag manager.
  • The browser and server use different event names for the same action.
  • The event id is generated randomly in two places instead of being derived from the same order or checkout.
  • The server event is sent much later than 48 hours after the browser event, for example when old orders are re-sent.

How to find the duplicate

Start with the browser. A pixel helper extension (Meta Pixel Helper, TikTok Pixel Helper) on your store shows how many times each pixel fires on a page. Settl's free pixel checker also lists which ad pixels a store runs and flags duplicates. Then open the platform's event overview and test events tool, place a test order, and look at the purchase: you want one browser event and one server event with the same event id.

Then check your apps. In Shopify, look under Settings → Customer events and at your installed apps for anything that also sends purchases to the same platform. Pick one tool per pixel for server events and switch the others off for that pixel.

Under-counting is the opposite problem

Deduplication can also go wrong the other way. If the server event reuses an event id that belonged to a different event, a real purchase can be thrown away. And if only the pixel is running, there is nothing to deduplicate, you are simply missing the sales it can't see. Compare platform purchases with orders that actually came from that platform's clicks, not with all your orders.

Common questions

Do I have to choose between the pixel and server-side tracking?

No. Meta, TikTok, Snapchat and Pinterest all recommend running both, with the same event id on each purchase so the platform keeps one.

Can I use the order number as the event id?

It works as long as the browser and the server use exactly the same value for the same event and event name. What matters is that both sides derive it from the same order or checkout, not how it looks.

Will fixing duplicates lower my reported ROAS?

Yes, if purchases were counted twice your reported ROAS was too high. The corrected number is the one to make budget decisions on.

How does Settl handle deduplication?

Settl sends each event from the browser and from the server with one shared event id, so each platform counts it once. Its hourly health check e-mails you when sending to a platform breaks.

Settl sends every paid order server-side to Meta, TikTok, Google, Snapchat, Pinterest, X, Microsoft Ads and Reddit, with the same event id as the browser.

See Settl's server-side tracking
Purchases counted twice? Pixel and server dedup · Settl