Contact merge

Current version: 9.0

A contact merge is triggered when a returning anonymous contact that already exists in xConnect identifies as a known contact. The tracker is responsible for sending a request to xConnect for the two contacts to be merged. Merge logic is owned by xConnect. The following steps describe how a merge is triggered from the tracker:

  1. An anonymous contact visits a few pages of your website - at the end of their session, they are saved into xConnect as an anonymous contact.

  2. The anonymous contact visits your website again from the same device. The analytics cookie makes it possible to identify the contact as an existing contact. The anonymous contact is loaded from xConnect. Because the anonymous contact already exists in xConnect, the IsNew property on Sitecore.Analytics.Tracker.Current.Contact is set to false.

  3. During this second interaction, the anonymous contact identifies as a known contact:

    Sitecore.Analytics.Tracker.Current.Session.IdentifyAs("twitter", "myrtlesitecore");
  4. The mergeContacts pipeline (configured in \Website\App_Config\Sitecore\Marketing.Tracking\Sitecore.Analytics.Tracking.config) executes on the Content Delivery server. This pipeline belongs to the tracker and is responsible for two things:

    • Sending a merge operation to xConnect. A series of merge handlers are executed in xConnect which merges any anonymous contact data (such as facets) into the known contact.

    • Merging contact classification; this is the only data that the tracker is responsible for merging.


    If the contact does not exist in xConnect, step 1 is not executed and no merge is triggered in xConnect. However, step 2 is always executed.

  5. The merged contact is reloaded in session - this includes reloading all facets.


Because xConnect owns the contact merge logic, it is unlikely that you will need to extend the mergeContacts pipeline. It is more likely that you will need to create merge handlers for custom facets.

Classification merge

The tracker is responsible for merging classification data. The MergeContactsClassification processor executes if:

  • The known contact (the target of the merge) has been classified as a robot (classification >= 900) OR

  • The anonymous contact (the source of the merge) has been classified as human (classification < 900)

The System.Classification and System.OverrideClassification properties with the greatest values are saved to the target contact.

Do you have some feedback for us?

If you have suggestions for improving this article,