Profile identity resolution and merging
Preview feature
Identity resolution and the customer data platform feature as a whole are currently in preview mode. Expect the features to be modified and expanded significantly in upcoming releases, including breaking changes.
Feel free to try the feature out. You can share your feedback directly with the Kentico Product team.
Identity resolution determines when multiple profiles represent the same person based on shared information, such as an email address or member ID. When matching profiles are detected, the system automatically merges them into a single unified profile, consolidating all related data and activities.
Default identity resolution behavior
By default, the system merges profiles when they have a matching email address in the linked member entity, representing a registered user on a website. Profiles without an associated registered member are never merged by default.
You can configure identity resolution rules to match individual project requirements in the Customer data management application.
Configure identity resolution rules
Each identity resolution rule defines a piece of identifying information, called an identity, that the system uses to match profiles. Each identity is based on a specific field of a profile-related entity (contact, member, customer). When the value of an identity field is the same across two profiles, the system considers them to represent the same person and triggers a merge.
You can view and adjust the project’s identity resolution rules in the Customer data management application.
To add a new identity:
- Select New identity resolution.
- Fill in the rule properties:
Identity name
Source class – the Xperience class representing one of the entities connected to profiles. A database column from the given class can be selected as the identity.
Database column – the specific column from the selected Source class that holds the identity value. The system merged profiles when they have matching values in the identity column (if there are not conflicts in other immutable identity columns).
Contact field limitations
Column from the Contact class that are used in form field mapping cannot be set as an identity. Profile identities cannot accept values from unverified sources such as public forms.Identity value mutability – determines if the value of the identity column can change when profiles are merged. See How profile merging works for more information.
- Create the rule.
The new identity is added to the end of the list of current identities, with the lowest priority. You can add any required number of identities and reorder them as required.
Cross-column identities
Currently, the system does not support identity matching across different columns. For example, you cannot merge profiles when the value of the contact email address and member email address is the same.
Identity resolution rule ordering
When the system evaluates identity resolution rules to find matching profiles, the identities are processed in order of their Priority, from the lowest number (Priority 1 placed at the top of the list) to the highest.
To change the order of rules:
- Open the Customer data management application.
- Move identities up or down using the drag handle () to reorder them.
- Select Save priorities to persist the new order.
How profile merging works
Profile merging is triggered when:
- A contact field is updated (for example, a visitor submits a form with their email address).
- A member is linked to a profile during registration.
- A member signs in – if you call
IProfileSignInService.TryConnectMemberWithProfileduring the member sign-in flow (see Connect members with profiles on sign-in).
When attempting to merge profiles, the system evaluates the configured identity resolution rules in order of their priority. The system goes through the following steps for each identity rule:
- Retrieves the identity value for the profile that triggered the merge.
- Searches for other profiles that share the same identity value.
- When a match is found, the profiles are merged unless there is a conflict in another identity that is immutable.
For example, if two profiles are merged based on a match in identity A with Priority 1, but identity B with Priority 2 is immutable and the values are different, the merge does not occur (empty values are not considered as a conflict). If identity B is mutable, the profiles are merged and the value in the identity B column is taken from the profile that was updated to trigger the merge.
Profiles created based on legitimate interest
The system never merges profiles created for untracked visitors as a result of activities logged based on legitimate interest. For example, such profiles are created when a visitor submits a form or registers as a member without giving consent to be tracked.
Connect members with profiles on sign-in
Experimental API
Identity resolution and the customer data platform feature as a whole are currently in preview mode.
All related API is marked as experimental and usage will result in warnings when compiling your project. The warnings are treated as errors for reporting purposes. To use the code, you need to suppress the warnings.
People can access your website using different devices and the profile may not always be tracked in the browser session. On sites with registration and authentication functionality, developers can connect the current profile with the member account and trigger the profile merging process.
This allows you to merge profiles created during new connections with the member’s existing profile that already contains data and logged activities from previous interactions.
To connect the current member with the current profile:
- Edit your project’s sign-in logic, for example a sign-in controller).
- Get an instance of the
IProfileSignInServiceinterface (available in theKentico.CustomerDataPlatform.Web.Mvcnamespace). - Call the
IProfileSignInService.TryConnectMemberWithProfilemethod.
using Kentico.CustomerDataPlatform.Web.Mvc;
public class SignInController(IProfileSignInService profileSignInService) : Controller
{
[HttpPost]
public async Task<IActionResult> SignIn(SignInViewModel model, CancellationToken cancellationToken)
{
// ... Sign-in logic
// Connects the signed-in member with the current visitor profile
// Also triggers profile merging based on identity resolution rules
await profileSignInService.TryConnectMemberWithProfile(cancellationToken);
return RedirectToAction("Index", "Home");
}
}
The method:
- Gets the currently signed-in member from the HTTP context.
- Gets the current visitor profile.
- Links the member to the profile.
- Triggers the profile merging process based on the configured identity resolution rules.
The method returns true if the member was successfully connected. Returns false if the connection was not made.