Unified Identity links user data from multiple sources into one profile. Learn how MoEngage identity resolution eliminates duplicate users.
Every MoEngage workspace already merges anonymous and registered profiles automatically on login. Refer to Anonymous to Registered User Merge for that always-on behavior. Use this article instead if you want to merge profiles on identifiers beyond the default ID such as email, mobile number, or up to five custom attributes, across Data APIs, SDKs, file imports, and integrations like Shopify.
The two mechanisms have different rules: this feature is opt-in and irreversible once activated; the anonymous-to-registered merge is always-on. Both transfer all events with no cap.
Users interact with your brand across channels such as website, app, offline store, social login. Each channel can generate a separate profile for the same person. The Identity Resolution feature of MoEngage merges these profiles into one, using identifier attributes such as ID, Email, or Mobile Number from data ingested via Data APIs, MoEngage SDKs, or CSV files. This gives you one accurate view of each user for segmentation, personalization, and reporting.
PrerequisitesTo use identity resolution, choose an existing user attribute as an identifier (like a phone number or email ID) that uniquely identifies the user and activate it as an identifier. Only Admins can access this setting.
Identity resolution plays a critical role in the following scenarios:
Online-to-offline matching: A user browses your site with their email, then completes a purchase in-store using their phone number. Identity Resolution links both records to the same person.
Multiple sign-in methods: A user registers via email, mobile OTP, and Facebook login, each creating a separate profile. Identity Resolution consolidates them into one as more identifiers are collected.
You can configure up to five identifiers per workspace. ID is the default and always active; at least one identifier must remain active at all times.
You can opt to configure other user attributes, such as email and mobile number, as additional identifiers. For example, if you choose email ID and mobile number as identifiers, MoEngage checks the email ID and mobile number for all users. In cases where multiple users share the same mobile number but have distinct email IDs, the system consolidates those users into a single profile as one of the identifier values matches successfully.
When two profiles share the value of any active identifier, MoEngage merges them. If profiles have conflicting data, the retained profile wins and the merged profile is deleted after its events and attributes transfer over.
Perform the following steps to configure multiple identifiers in the MoEngage dashboard (Only Admins can view and access Identity resolution):
On the left navigation menu in the MoEngage dashboard, go to Settings > Data > Identity resolution.
On the Identity resolution page, click +Add identifier(s). You can add up to five identifiers for identity resolution.
Choosing good identifiersA good identifier uniquely identifies one person (not a shared household phone or generic support email), stays consistently available across every data source you plan to use it with (SDK, API, file imports), and won’t be reused across different people over time. Picking the wrong identifier is the most common source of unexpected merges or profiles that fail to merge.
By default, ID is listed as an identifier for merging user profiles using identity resolution. The Active tag represents the identifier currently used for identity resolution for merging users in your current workspace.
All the identifiers added are listed on this page. Click the ellipsis icon ( ) to perform the following:
Pause identity resolution: This option allows you to pause merging the user based on that identifier.
View/Edit exceptions: This option allows you to view or edit exceptions of that identifier. In the View/Edit exception dialog box, select the exception from the list and click Save.
Select the checkbox next to the User attributes you want to select as identifiers for identity resolution.
You can view the Description for each attribute.
Exceptions: Null and blank values are always excluded from identity-matching process and cannot be edited or removed. You can add further exceptions in string format.
You can view the various Data sources from which these identifiers are obtained. Identifiers backed by more data sources make for more reliable matching, check the Data sources before selecting.
The Tracked data types denote the various data types for which the data for that attribute has been tracked in MoEngage so far.
Only string type attributes can be identifiers; other types are converted to string automatically.
Identity-matching process uses exact string values.
Click Next.
Case SensitivityIdentifier matching is case-sensitive and does no normalization. If the same value can arrive in different cases across sources (e.g. an email captured as [email protected] on web and [email protected] via CSV import), those profiles won’t merge unless you standardize casing before ingestion.
Profile retention rules: This rule decides which user profile survives a merge, and are evaluated in order. Perform the following steps to add profile retention rules:
In the Rule 1 list, select a user attribute. If only one of the two profiles has data for that attribute, that profile is retained. If both profiles have data for it, Rule 1 can’t break the tie and Rule 2 runs instead. Rule 1 is optional and is empty by default.
In the Rule 2 list, select a user behavior. This is the tiebreaker rule and defaults to Latest Last Seen. Whichever profile matches the behavior is retained.
For example, consider you have two customer profiles for the same user in which Profile 1 is received online, and Profile 2 is received offline.
Scenario
General Rule
Profile 1 (Online)
Profile 2 (Offline)
Outcome
Rule 1 decides
The profile with data in the selected attribute is considered the retained profile.
Rule 1 = Email ID, name, email, mobile — all populated
ID, name, mobile, no email
Profile 1 is retained: it’s the one with data in the Rule 1 attribute (Email).
Rule 1 ties, Rule 2 decides
When both profiles have data in the selected attribute, Rule 1 fails (ties), and Rule 2 is validated to break the tie.
Rule 1 = Email
Rule 2 = Latest Last Seen
ID, name, email, mobile, first seen — all populated
ID, name, email, mobile, first seen — all populated
Both profiles have Email, so Rule 1 ties. Rule 2 retains whichever profile has the more recent “last seen” timestamp.
Attribute rules: This rule controls how specific custom attributes combine on merge. You can add a maximum of five such rules.
Perform the following steps to add your own custom user attribute rules:
Click Add rule.
Select User attributes and Merge rules.
For example, consider you have two customer profiles for the same user in which Profile 1 is received online, and Profile 2 is received offline. Each profile has a Loyality_points attribute and has data in it, and if you want the SUM of both Loyality_points when both these profiles are merged, perform the following:
Select Loyality_points in User attribute list.
Select Sum of values in Merge rules list.
So, whenever user profiles are merged, the resulting profile comprises the combined sum of both profiles’ loyality points. LTV ships with Sum of values pre-configured, no setup needed.
The Verify merge section shows how users are merged based on the profile retention and attribute rules you configured. Select I have verified all merge scenarios checkbox after verifying the merge scenarios.
Click Next.
Whenever new data is ingested for an existing user, MoEngage automatically updates the existing user profile and their properties. Profile retention rules applied only during a merge.
This step provides the instructions to be considered before and after activating the identity resolution.
Irreversible changes to be considered before activating.
A user merged cannot be unmerged.
For 48 hours post activation, the following actions are not possible on the Identity resolution page:
Adding new identifiers
Pausing/re-activating identifiers, and editing exceptions
Changing Merge settings
The Merge User API is disabled when Identity Resolution is enabled.
After activating identity resolution:
Existing users in the workspace merge over 48 hours
New incoming users merge with existing users based on profile retention rules
Merge Caps:
Only the first 50 users in your workspace with the same identifier value are merged, rest remains un-merged.
If a new user is ingested sharing an identifier value already held by 50 merged users, that user is still created, but the identifier value itself is dropped from their profile and won’t participate in future merges.
Any update sent to a user who remains unmerged past the cap is dropped in the same way.
To raise the 50-user cap for your workspace, contact your MoEngage Customer Success Manager (CSM) or the Support team.
Select By activating identity resolution, I understand the impact of merging the user check box and click Activate to activate identity resolution.
The following is a sample cURL request for a Bulk Import API consisting the User and Event payloads:
User payload must contain at least one configured identifier in attributes.
Event payload must include identifiers inside user_identifiers as shown in the below example where moe_mobile is one of the identifiers in the workspace
identifyUser() function is introduced in the new SDK versions that are compatible with Identity resolution. This function is a direct replacement of the SetUniqueID function and allows you to track users with multiple identifier attributes. Make sure to configure these identifiers in MoEngage before IdentifyUser function is implemented.The following are examples of SDK sample codes where email and id are set as identifiers in a given workspace.
final MoEngageFlutter _moengagePlugin = MoEngageFlutter(WORKSPACE_ID);_moengagePlugin.identifyUser("flutter-uid");_moengagePlugin.identifyUser({ "email": "[email protected]", "id": "flutter"})
Updates are made to SDK functions to improve user identification and session management.
Forced Logout: The MoEngage SDK no longer automatically logs out the previous user when a new user is detected on the device. Logout should now be explicitly called for workspaces enabled with Identity resolution to avoid data corruption.
SetUniqueID: IdentifyUser function supports multiple identifiers, which replaces the need of using SetUniqueID function for user identification. Note that SetUniqueID is marked for removal in the future releases of SDK versions - it is important to use identifyUser instead especially if you are using Identity resolution in your workspace.
SetAlias: For workspaces with the Identity resolution feature enabled, MoEngage SDK stores the previous identifier values. When IdentifyUser function is used to track the new identifier values, MoEngage SDK detects the change in identifier value and reports accordingly.
Retrieving Linked Profiles Programmatically
Use the asynchronous getter getUserIdentities() to check, client-side, which identifiers are bound to the current local session. It queries local SDK storage and returns a JSON dictionary of all currently bound identifier keys and values.
Run getUserIdentities() before an explicit user logout to confirm which identifiers are linked, and avoid breaking active device identity links.
You can view the multiple identifiers configured for your workspace in the following sections:
If you have configured multiple identifiers for a given workspace, you can see them in the Map identifiers section in Step 2 while creating new user imports, otherwise you can only see ID.
For Anonymous user import, if an identifier user attribute is selected as an anonymous ID, the users from the import may merge with the existing users having the same identifier value. For example, if you have configured an email ID as an identifier and, while mapping identifiers, you choose an email ID as the anonymous ID, there is a chance that users from the import may merge with other users having the same email ID.
The uploaded CSV must have at least one column matching a configured identifier.
After activating new identifiers, update existing periodic imports to map them correctly.
If you have configured multiple identifiers for a given workspace:
While creating a new user data import, you can view them in the Map identifiers section, otherwise you can only see ID.
While creating a new event data import, you can view them in Step 2: Import configuration and action under the Map identifiers section, otherwise you can only see ID and Event time.
While creating new auxiliary data imports, you can view them in Step 2: Import configuration and action by turning on the Update user profile attributes (optional) toggle of the Map identifiers section, otherwise you can only see ID..
CSV uploads fully respect your active Identity Resolution configuration with the following behavior:
Multi-key ingestion: if a row contains values for more than one active identifier (e.g. both email and mobile), MoEngage checks both against existing records. If a single row bridges two distinct profiles, a background merge triggers immediately.
MoEngage executes a one-time script to merge the existing users in the workspace based on the identifers you have activated as well as the merge settings selected in your workspace.When Identifiers are activated, a support ticket is raised where the feature enablement is tracked. The feature is enabled from the backend to activate the identifiers and start merging existing users based on the set identifiers. A report is generated once the feature is enabled, which will indicate every user merge action that is executed. This can be provided by the support team upon request.This section describes how you can use MoEngage Identity Resolution in Shopify.
PrerequisiteEnsure that Shopify is integrated with MoEngage and that the Email-id or mobile number is configured as the identifier for profile merge.
Anonymous user U1 adds items to the cart, provides an email ID as [email protected], and converts to a registered user. A cart token (C1) is generated.
Anonymous user U2 adds items to the cart, provides an email ID as [email protected], and converts to a registered user. A cart token (C2) is generated.
Anonymous user U3 adds items to the cart, provides an email ID as [email protected] and merges their profile with U1. A cart token (C3) is updated.Because you have configured email ID as the identifier, MoEngage identifies that User 1 and User 3 share the same Email-id and merge their profiles.You can find all user events in the MoEngage dashboard at Segment > User Profile > Activity Info.
A user registered with your website with their email ID and provided their mobile number during the order transaction. The next time the user visits your offline store and provides the same mobile number during product purchase.
User1 registers online using a mobile number (M1) on Shopify and does some activity on the website.
User2 visits an offline store and provides a mobile number (M1) during product purchase. Offline data is then uploaded to MoEngage using CSV imports. In such cases, MoEngage identifies that User 1 and User 2 share the same mobile number and merge their profiles.
Merging affects data, segments, campaigns, and triggers internal system events. Review each before activating.
On Data
On Segments
On Campaigns
On System Events
User attribute info: the retained profile’s attributes win; any attribute missing from the retained profile is filled in from the merged profile.
Devices: all devices from both profiles carry over to the retained profile, no device data is lost.
Events: Events from the merged profile transfer to the retained profile, including for transitive multi-ID merges (a user merging into a profile that has itself already been merged).
Active segments: When users are merged, the total number of users in active segments may decrease as duplicate profiles collapse into one.
Custom segments: Whenever the custom segment is updated, the user count may change.
User merging may impact the overall reachability number. When merged, the contact details of the merged user will be lost, and hence, a campaign’s overall reachability may be reduced. This also impacts the overall campaign stats.
Only Data APIs (Track User, Create Event, Bulk Import API) support multiple identifiers. Other APIs in MoEngage may still require ID.
If multiple users getting merged have the same email ID but conflicting hard bounce values, the outcome will be hard Bounce = true. If users getting merged have different email IDs, the retained user’s email preferences will remain post-merge.
Spam
If multiple users getting merged have the same email ID but with conflicting Spam statuses, the outcome will be Spam = true. If multiple users getting merged have different email IDs, the retained user’s Spam status will be retained.
Unsubscribe
If multiple users getting merged have the same email ID but with conflicting Spam statuses, the outcome will be Unsubscribe = true. If multiple users are getting merged and have different email values, the retained user’s Unsubscribe status will be retained.
Subscription Categories
Subscription categories of retained users will be retained.
Push
Reachability push status code (iOS, Android, Web)
When users are merged, all devices will be added to the retained user. Final Reachability will be derived based on all devices present with the retained user.
SMS
Subscription status
Retained user’s mobile number preferences will be retained.
WhatsApp
Subscription status
Retained user’s mobile number preferences will be retained.
When automated Identity Resolution consolidates duplicate profiles, MoEngage fires internal system events depending on the scenario.
MOE_USER_MERGE_EVENT: fires globally whenever a standard profile merge starts.
MOE_USER_MERGED: fires on the primary (retained) profile once data fields combine successfully.
MULTI_ID_USER_MERGED: fires only when a multi-identifier configuration resolves and collapses multiple records
In short, a regular single-identifier merge fires MOE_USER_MERGE_EVENT and MOE_USER_MERGED. A multi-ID merge fires all three, including MULTI_ID_USER_MERGED.
Hidden by DefaultMULTI_ID_USER_MERGED visibility is OFF by default, so it won’t appear in Segment or Flow event dropdowns. To expose it, go to Settings > Data Management > User Events and toggle its visibility ON.
Some user attributes and events seem to be lost during merge. Is it possible?
Yes.
Example 1: If two users merge on a shared identifier but have a different attribute value, the merged profile only retains the value based on the retention rules. Hence, one of the attribute values is lost.
Example 2: If two users merge on a shared mobile number but have different emails, the merged profile’s email is lost — only the retained profile’s email survives.
You should set the profile retention rules deliberately to control this. Merges cannot be reversed.
The user count and MTU numbers have suddenly reduced after activating identity resolution. Why?
One of the profiles is deleted when two profiles merge into one. This reduces your key metrics, such as Total users, MTU, MAU, and more.Note that every unmerged duplicate profile counts separately toward your Monthly Tracked Users (MTU) — a key input to your MoEngage bill. Merging duplicates into one profile reduces your MTU count, so cleaning up existing duplicates can also lower cost in addition to improving data accuracy.