Skip to content

Set up a deduplication ID across Firebase, your MMP and Signals

When the same purchase is reported both by your app and by your server, the destination needs a way to see that they are one conversion rather than two. That way is the event ID. Send the same value from both places and the conversion is counted once.

This matters most where an app conversions integration runs alongside a mobile measurement partner or an SDK that is already tracking the same actions. Both are meant to run in parallel, and the event ID is what makes that safe.

  • A developer who can change the event calls in the app. Neither side of this is configurable from Studio.
  • Agreement on which events are in scope. The four usually reported are Complete Registration, Subscribe, Initiate Checkout and Purchase.
  • Firebase already set up in the app, if you are taking the Firebase path.

A ten-digit Unix timestamp, an underscore, then a random number. For example 1699458344_6873246512. What matters is that it is unique per action and identical everywhere that action is reported.

WhereWhat to do
Firebase, iOSAdd event_id to the parameters dictionary on the Analytics.logEvent call, alongside event_time and, on purchases, value and currency.
Firebase, AndroidAdd event_id to the bundle with putString before calling logEvent.
Your MMPAdd event_id to the same event. On Adjust this is setEventId, and the value also has to go into both a partner parameter and a callback parameter named event_id.
The server callSend the same value. On the Meta Conversions API this is the messageId parameter, which has to equal the event_id you sent from the app.

Adjust has a dedicated method for this. Call setEventId on the event with your value, and add the same value as both a partner parameter and a callback parameter named event_id. The Adjust SDK keeps the last ten identifiers it has seen and skips revenue events carrying one it already has, so a duplicate is discarded before it leaves the device.

Both are supported and both need the event ID added to the same events. Alongside it, send the device identifiers the destination matches on: IDFA and IDFV on iOS, GAID or AAID on Android.

RuleWhy
The same value for the same actionOne action produces one event ID. A purchase reported by the app and by your server carries the same ID on both. A different action gets a different one.
The same event name everywhereThe destination matches on the name as well as the ID. A name that differs by a capital letter or an underscore is a different event.
Timestamps in Unix secondsNot milliseconds, and not a date string.
At least one device identifierGAID on Android, IDFA or IDFV on iOS.
Hash personal data, never device identifiersEmail address and phone number are hashed. Device identifiers are sent as they are, and hashing them makes them useless.
  • Your developer adds the parameters to the Firebase and MMP event calls in the app.
  • Datahash builds the tags that forward those events to the destinations you have connected.

The event ID differs between the two sources reporting the same action, or the event name does. Compare both character for character, including case and underscores.