- Knowledge Base
- Cross-connector tasks
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.
Before you start
Section titled “Before you start”- 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.
What the value looks like
Section titled “What the value looks like”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.
Where the value goes
Section titled “Where the value goes”| Where | What to do |
|---|---|
| Firebase, iOS | Add event_id to the parameters dictionary on the Analytics.logEvent call, alongside event_time and, on purchases, value and currency. |
| Firebase, Android | Add event_id to the bundle with putString before calling logEvent. |
| Your MMP | Add 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 call | Send 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
Section titled “Adjust”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.
AppsFlyer and Branch
Section titled “AppsFlyer and Branch”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.
Rules that apply either way
Section titled “Rules that apply either way”| Rule | Why |
|---|---|
| The same value for the same action | One 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 everywhere | The 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 seconds | Not milliseconds, and not a date string. |
| At least one device identifier | GAID on Android, IDFA or IDFV on iOS. |
| Hash personal data, never device identifiers | Email address and phone number are hashed. Device identifiers are sent as they are, and hashing them makes them useless. |
Who does what
Section titled “Who does what”- 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.
If conversions are counted twice
Section titled “If conversions are counted twice”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.

