Open Tracked/Guides/Server side tracking event deduplication

Server side tracking event deduplication

When the browser and the server send the same purchase, each platform needs one shared ID to count it once.

5 min read · Updated October 26, 2026

In this guide
Key takeaways
  • Every platform dedupes with an ID that both copies share: event_id for Meta and TikTok, transaction_id for GA4 and Google Ads.
  • Create the ID once, where the event happens, and give it to both the browser tag and the server tag.
  • Test in each platform's tool. "Deduplicated" in Meta Events Manager is the proof.
BBrowser eventSShared event IDPPlatform dedupesSServer event

Sending the same event from the browser and the server is the best way to recover lost data, and the fastest way to double your numbers if you skip deduplication. Each platform has its own way to recognise the second copy. This page gives you the rule for each and a method to keep the IDs the same. See also Facebook event deduplication in GTM.

The rules by platform

PlatformDeduplicates withWindowNotes
Metaevent_name + event_id (and fbp / external_id)About 48 hoursBrowser event should arrive first for best results
GA4transaction_id on purchasesPer propertyPrevents the same order being counted twice
Google Adstransaction_id (order ID) on the conversionPer conversion actionRequired to avoid double counting when imported and tagged
TikTokevent_id + event name from Pixel and Events APIAbout 48 hoursPixel and API both need the same ID
Snapchatclient_dedup_idCheck current docsShared by Pixel and CAPI

Windows are approximate and platforms change them, so check their current documentation.

Check your setup

Check your tracking in one pass

This is an example. Run the check on your own site to see where yours stands.

How to create a shared ID

1

Choose the source of the ID

For purchases the order number is perfect. For other events create a random ID when the event happens.

2

Put it in the data layer

Push it with the event, for example event_id: "ord_10293".

3

Read it in the web tag

The Meta pixel tag takes it as eventID. The GA4 tag sends it as a parameter so the server can read it.

4

Read it in the server tag

The server container reads event_id from the event data and sends it in its own call.

5

Check both copies match

In Preview, compare the browser event and the server event for the same action.

What goes wrong

SymptomMeta counts two purchases
Likely causeThe browser and server event_id differ or one is missing.
FixUse the same value and the same event name. Check "Deduplicated" in Events Manager.
SymptomGA4 shows two purchases per order
Likely causeThe thank-you page reloads, or transaction_id is missing.
FixSend transaction_id and avoid firing purchase on reload.
SymptomGoogle Ads counts imports and tags twice
Likely causeThe same order is sent by the tag and by an upload without a matching order ID.
FixUse the same transaction_id in both.
SymptomServer event arrives first, browser later
Likely causeMeta may keep the later copy.
FixSend the browser event first when you can, or send the server event with a small delay. Open Tracked's Request Delay (Business plan) can delay a path by minutes if you need to.
Data in, clean out

Raw events in. Clean events out.

Open Tracked collects each event on your own domain, removes the noise and sends what is left to Meta, Google Ads, TikTok.

Testing

  1. Place a test order.
  2. In Meta Test Events, find the browser and server purchase with the same ID.
  3. Confirm Events Manager marks it as deduplicated.
  4. In GA4 DebugView, check the purchase appears once with its transaction_id.
  5. In Google Ads, check the conversion count over a day against orders.
0 of 5 done
If you cannot share an ID for some events, send them from only one side.

When deduplication is not needed

If an event is only ever sent from one place, for example a refund that only your backend knows about, there is nothing to deduplicate. Send it once from the server with its own ID so it can be corrected or removed later if needed. Deduplication also does not merge two different events, such as a lead and a sale. Give each its own event name and its own ID, and check them separately in each platform's test tool.

Terms you will see

Event ID
A value shared by the browser and server copy of one event.
Transaction ID
The order number used by GA4 and Google Ads to avoid double counting.
Deduplication window
The time within which a platform will match two copies.
Browser event
An event sent by the pixel or tag in the visitor's browser.
Server event
An event sent by your server.

A checklist per platform

0 of 5 done
Try it

Works with your stack

Grab a logo and throw it. These are the tools Open Tracked already talks to.

Grab one. Throw it.

Frequently asked questions

What is event deduplication?

Recognising that two events from different sources are the same action and counting it once.

Which ID does Meta use?

The event_id together with the event name. The same pair must be sent from the pixel and from the server.

How do I test it?

In Meta Events Manager, Test Events, look for the "Deduplicated" label on the event.

What about GA4?

Use transaction_id on purchases so GA4 counts each order once.

Do I need it if I only send from the server?

No. Deduplication matters when the same event can arrive from two sources.

Do I need spreadsheets to read my results?

No. Once tracking is live, the Open Tracked analytics shows spend, revenue, ROAS and profit, and you can ask Ari, the built-in AI assistant, questions about your own numbers in plain words. Ari's allowance depends on your analytics plan.

Is Open Tracked different from Open Track or Open Space Track?

No. Open Tracked is the official name of our server-side tracking platform, and the website is opentracked.io. Many people search for it as Open Track, OpenTrack or Open Space Track. All of them lead to the same product: server-side Google Tag Manager hosting, first-party analytics and a CRM pipeline.

Fix your tracking at the source

Open Tracked hosts your server-side Tag Manager, keeps first-party cookies alive and shows what each ad is really worth.

Open Tracked
Written by

The Open Tracked team

We build Open Tracked: server-side tracking hosting, analytics and the tools around them, for stores that spend on ads. Questions about this guide, or an idea for the next one?

Write to us Read the docs

Was this article helpful?

Comments

Loading comments...

Turn better tracking into better marketing performance

Start free