> This page is part of the [Customer.io documentation](https://docs-customerio.netlify.app). For the complete index, see [llms.txt](https://docs-customerio.netlify.app/llms.txt).
> Last updated: July 15, 2026

# Resolve duplicate profiles

If you inadvertently create duplicate instances of a profile, you can merge them and consolidate information to accurately represent a single “profile” in your workspace.

## How merging profiles works

You can merge profiles [manually](#merge-people) or [automatically](#auto-merge). When you merge two profiles, you pick a **primary** profile and a **secondary** profile. The primary profile remains after the merge and the secondary is deleted. This process is permanent: you cannot recover the secondary profile. Depending on the data type, the primary profile may retain its data or inherit the data from the secondary profile.

 The primary profile might enter new segments and automations

When you merge profiles, the primary profile inherits new attributes, events, automation journey history, etc, which can cause the profile to join segments. The primary profile can enter new segment-triggered automations, but will not enter new event-triggered automations; events inherited from a merge cannot trigger automations.

### When the primary profile inherits the data from the secondary profile

The primary profile inherits the following information from the secondary profile:

*   Attributes that are not set, or are empty, on the primary will be overwritten if the secondary profile has values for the attributes.
    
*   Event history: the most recent 29 days of events are merged immediately. It can take up to an hour to merge older events. Events merged from the secondary profile cannot trigger automations.
    
*   Campaign journeys that the primary person has not entered
    
    A journey is a profile’s path through an automation workflow. If the secondary profile has started a journey that the primary profile has not, the primary profile continues on that automation journey after the merge.
    
    If the secondary profile has completed journeys that the primary profile has not, the primary profile gains these historical journeys after the merge. This may be important for determining entry (or re-entry) criteria for subsequent automations, segments, etc.
    
*   Manual segments that the primary profile did not already belong to
    
*   Message deliveryThe instance of a message sent to a person. When you set up a message, you determine an audience for your message. Each individual “send”—the version of a message sent to a single member of your audience—is a delivery. history
    
*   Conversions
    
    A conversion happens when a profile performs an action (enters/leaves a segment or sends an event) after interacting with a message (receives, opens, clicks) within a time window. Considering this, it’s possible one of the profiles has performed the action and the other hasn’t. In this situation:
    
    *   If the primary profile performs the action while the secondary only interacts with the message (no action performed), the primary profile will not inherit a conversion. The primary profile will only inherit the *interaction* from the secondary profile.
    *   If the secondary profile performs the action, the primary profile will inherit a conversion AS LONG AS the action is an event OR the primary profile inherits the attribute change that made the secondary profile enter/leave the goal segment.
    
*   Relationships and relationship attributes that the primary did not have
    

### When the primary profile retains its data

When both the primary and secondary profiles have conflicting data—both profiles have the same attribute, subscription preference topic, or have experienced the same automation—we pick a “winner” to resolve the conflict; the “winner” value remains after the merge, and the “loser” is lost with the secondary profile. See the sections below to learn more about how we resolve conflicts in the merge process.

#### Resolving conflicts between attributes

If the primary and secondary profiles both have the same attribute, and the primary profile’s attribute value is not empty, the primary profile’s attribute “wins”: it remains on the merged profile and the secondary profile’s attribute value is lost in the merge.

For example, if both the primary and secondary profiles have a `first_name` attribute, the `first_name` on the primary profile remains and the attribute on the secondary profile is lost in the merge.

#### Resolving conflicts between subscription topic preferences

If you’ve enabled a [subscription center](/messaging/channels/subscriptions/center/) in your workspace, then profiles have subscription topic preferences. The subscription topic preferences of the primary profile “win” over the secondary profile. These preferences remain on the merged profile and the secondary profile’s preferences are lost.

For example, if you have a subscription topic “Product Education” and it’s set to TRUE for the primary profile but FALSE for the secondary profile, the merged profile will have a value of TRUE.

#### Resolving conflicts between relationships

If the primary and secondary profiles both have the same relationship, the primary profile’s relationship attributes “win.” We add relationship attributes from the secondary to the primary if the primary did not have these attributes. We also overwrite empty values in the primary if the value is populated in a relationship attribute in the secondary profile.

### Resolving conflicts between automation journeys

A journey is a profile’s path through an automation. If the primary and secondary profiles have both started or completed the same automation, we pick a “winner” journey to remain on the merged profile. The “winner” depends on whether the profiles have completed a journey in the past or are active in an automation at the time of the merge.

**If both profiles are active in an automation**, the primary profile continues its automation journey. The secondary profile exits its journey early.

**If both profiles have completed an automation**, the merged profile keeps the most recently started automation journey. The history of completed automations doesn’t necessarily affect profiles, but you may use it as re-entry criteria for follow-up automation or segment membership.

## How to identify profiles

How you identify profiles to merge depends on your workspace settings. Which identifiers are enabled—`email`, `phone`, or both? Go to [General Workspace Settings](https://fly.customer.io/workspaces/last/settings/edit) to find out.

If `email` or `phone` is enabled, you can identify profiles by that identifier, plus `cio_id` and `id`. You can also [automatically merge profiles](#auto-merge) in this case.

[![Within general workspace settings, the name of the workspace is at the top: workspace 6. Under that is a table titled: the identifiers your workspace supports. There are three identifiers listed: cio_id, id, and email. Beside email is a link to disable it.](https://docs.customer.io/images/workspace-email-enabled.png)](#b263b611a18f5c0c5bc9d311f037ac0a-lightbox)

If both `email` and `phone` are disabled, you can identify profiles only by `cio_id` or `id`. You must also ensure `id` is set to “Reference profiles by cio\_id” to make the merge possible.

[![Within general workspace settings, the name of the workspace is at the top: workspace 7. Under that is a table titled: the identifiers your workspace supports. There are three identifiers listed: cio_id, id, and email. Beside email is a link to enable it.](https://docs.customer.io/images/workspace-email-disabled.png)](#043a4263dd6de9a7d89b4666691f65e9-lightbox)

## Merge two profiles together

 This operation is permanent

You cannot undo a merge, nor can you stop it after it starts. Make sure that you’re ready to merge profiles before you begin this process.

When you merge two profiles, you pick a **primary** profile and merge a **secondary** profile into it. The primary profile remains after the merge and the secondary is deleted.

Merging profiles may cause the primary profile to enter or exit segments and automations based on information you merge from the secondary profile. Make sure that you understand how a [merge will impact the primary profile](#how-it-works) before you initiate a merge.

1.  Go to the **Profiles** page.
2.  Click **Merge**. You can pick profiles before you click merge.
    
    [![Select profiles and click merge to start the process](https://docs.customer.io/images/merge-people.png)](#ec6591b3264d6e553d389a57f2136573-lightbox)
    
3.  Select your **Primary** and **Secondary** people and click **Next**.
    
    If you already selected profiles, you can click **Swap** to reverse your primary and secondary profiles. Remember, when you merge profiles, the primary gains [some information from the secondary profile](#how-it-works), and any data that is not merged to the primary profile is lost.
    
    [![Review the attribute changes that occur in the merge](https://docs.customer.io/images/merge-people-attributes.png)](#f1032cdfba5fa900abcfe3f4c3c28fc9-lightbox)
    
4.  Review your changes one last time. When you’re sure you want to merge people, click **Confirm and merge**.
    
    You can search for attributes on the primary profile, ensuring that the values on the primary profile are correct before you finish your merge.
    
    You’ll also see a count of the attributes, events, and deliveriesThe instance of a message sent to a person. When you set up a message, you determine an audience for your message. Each individual “send”—the version of a message sent to a single member of your audience—is a delivery. on each profile. Items remaining on the *Secondary* profile are lost.
    

When you confirm a merge, you’ll go to the newly merged profile’s page. Attribute changes take effect immediately, but event history may take a moment.

## Merge profiles via the API

You can also merge profiles using the [Track API](/integrations/api/#operation/merge). The payload contains `primary` and `secondary` profile objects. As when you merge profiles from the **Profiles** page, the primary profile remains after the merge. The secondary profile’s information is merged into the primary, and then it is deleted.

 Primary profile must exist

The primary profile must already exist in Customer.io for the merge API call to work. If the primary profile doesn’t exist, the merge request won’t do anything.

```bash
  curl --request POST \
  --url https://track.customer.io/api/v1/merge_customers \
  --header "Authorization: Basic $(echo -n site_id:api_key | base64)" \
  --header 'content-type: application/json' \
  --data '{"primary":{"email":"cool.person@company.com"}, "secondary":{"email":"cperson@gmail.com"}}'
```

## Automatically merge profiles

By default, new workspaces use `email`, `phone`, and `id` as identifiersThe attributes you use to add, modify, and target people. Each unique identifier value represents an individual person in your workspace.. While this makes it easy to identify profiles, there are some situations where you can inadvertently create duplicate profiles—two profiles with different identifiers for the same profile. Customer.io can automatically merge these duplicates for you if you turn on the following settings:

*   **Multi-identifier profile merge** merges profiles whose identifiers are *complementary*—each profile has identifier values the other doesn’t.
*   **Auto-merge on update** merges profiles when an `identify` call tries to set an identifier to a value that already belongs to a different profile, as long as the two profiles are complementary on every other identifier.

You can enable *Multi-identifier profile merge* on its own, but *Auto-merge on update* requires you to enable *Multi-identifier profile merge* as well. If your incoming identifier data is reliable, you should enable both settings to reduce duplicate profiles and *Failed Attribute Change* errors. See [Enable auto-merge for your workspace](#enable-auto-merge) below for instructions.

These settings apply to incoming data on an ongoing basis. Separately, when you [enable `email` or `phone` as an identifier](/accounts/workspaces/overview/#migrate-workspace) for an existing workspace, you choose how to merge profiles that already share the same value—a one-time cleanup that’s part of the enable process.

[![The merge options panel showing the Multi-identifier profile merge and Auto-merge on update toggles](https://docs.customer.io/images/merge-settings.png)](#3a7dd01e6f3686479c025f42cf3ded11-lightbox)

### Multi-identifier profile merge

If your workspace supports `email`, `phone`, or `id` as identifiers, and you created your workspace after September 24, 2021, you can enable *Multi-identifier profile merge*. With this setting on, Customer.io merges two [profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person’s profile attributes in liquid using `customer`—e.g. `{{customer.email}}`.](/journeys/people/manage/merge-people) when you send an `identify` call with identifiers that belong to different profiles—provided all of the following are true:

*   Two identifiers in the request (for example, an `id` and an `email`, or an `id` and a `phone`) match different profiles.
*   Each of those identifiers matches exactly one profile.
*   The profiles are *complementary*: each profile is missing the identifier value that matched the other profile, and they don’t conflict on any other identifier.

When Customer.io merges these profiles, the older profile is the *Primary* and the younger profile is the secondary.

[![Example of auto merging profiles with complementary identifiers](https://docs.customer.io/images/auto-merge-example.png)](#12b882403d09ba40cfe518354808a839-lightbox)

### Auto-merge on update

*Auto-merge on update* extends the *Multi-identifier profile merge* feature to cover cases in which an `identify` call tries to **change** an identifier to a value that already belongs to a different profile.

Without this setting, Customer.io silently drops the identifier change and records a *Failed Attribute Change*. With this setting on, Customer.io merges the two profiles automatically—as long as the profiles are clearly the same profile.

#### When we merge profiles

In general, we only merge when the identifier being updated is the only overlap between the profiles. All other identifiers must be complementary: one profile has a value and the other doesn’t.

Specifically, we merge profiles when **all** of the following are true:

*   Both *Multi-identifier profile merge* and *Auto-merge on update* are enabled for the workspace.
*   The `identify` call is eligible to update the identifier in question, according to the [rules for updating identifiers](/accounts/workspaces/overview/#update-email-with-id).
*   An identifier attribute in the request body (for example, `email`) belongs to a different profile than the one in the identify request.
*   The two profiles are complementary on every identifier except the one being updated. That means:
    *   Neither profile has a conflicting identifier value other than the one being updated. For example, if the request references a profile by `id` and the conflicting profile has a different `id`, we can’t automatically merge the profiles.
    *   Neither profile has an identifier value that isn’t in the request.

[![Example of auto merging profiles when an identifier is updated](https://docs.customer.io/images/auto-merge-on-update-example.png)](#e0e9eb4fef81493e759b2ecbb7f38f45-lightbox)

#### What happens when profiles merge

When we merge profiles, we merge the secondary profile’s attributes into the primary profile and delete the secondary profile. If the primary profile and secondary profile both have an attribute with different values, the primary profile’s value wins.

The merged profile also keeps:

*   The primary profile’s [cio\_idAn identifier for a person that is automatically generated by Customer.io and cannot be changed. This identifier provides a complete, unbroken record of a person across changes to their other identifiers (id, email, phone, etc).](/journeys/people/manage/identifying-people/#cio_id). A `cio_id` is a canonical, immutable identifier, so Customer.io always preserves the primary profile’s `cio_id`. *Auto-merge on update* selects the primary profile [the same way Multi-identifier profile merge does](#auto-merge-complementary): the older profile wins.
*   The **incoming request’s** value for the identifier being updated. This is the one exception to “primary wins”—Customer.io trusts that the request reflects the current state of the world.

#### When we can’t merge profiles automatically

If we can’t merge profiles under the [rules above](#when-auto-merge-on-update-merges-profiles), Customer.io records a *Failed Attribute Change* for the identifier in the request. You need to resolve the conflict yourself, either by [merging the profiles manually](#merge-people) or by correcting your data pipeline.

**Example: both profiles have an `id`:**

*   Profile A: `id=12345, email=ami-home@example.com`
*   Profile B: `id=67890, email=ami-work@example.com`
*   Request: identifier `id=12345`, attribute `email=ami-work@example.com`

Both profiles have an `id`, and the values differ. Customer.io can’t tell which `id` is correct, so we can’t automatically merge the profiles. You need to merge these profiles yourself.

### Enable auto-merge for your workspace

You can enable *Multi-identifier profile merge* on its own, or enable both settings. *Auto-merge on update* requires *Multi-identifier profile merge*, so you can’t turn it on by itself.

1.  Go to **Settings** > **Workspace Settings**.
2.  Click **Settings** next to *Merge options*.
3.  Enable *Multi-identifier profile merge*.
4.  (Optional) Enable *Auto-merge on update*.

 Auto-merges are permanent

Enabling auto-merge means trusting the accuracy of your incoming identifier data. Merges can’t be undone. If your data pipeline sends incorrect identifier associations, profiles can be merged that shouldn’t be. You can monitor merges in the [profile activity](#activity-log) and via the `profile_merge` event.

 Enabling these settings doesn’t backfill

Both auto-merge settings only affect new `identify` calls. Existing profiles with conflicting or complementary identifiers aren’t retroactively merged—you’ll need to resolve those by [merging them manually](#merge-people) or via the [merge API](#merge-people-api).

## Merged profiles in the profile activity

When you merge profiles, the profile activity reports a *Profiles merged* activity on the primary profile. The activity *Source* shows how the merge was performed, through the *Profiles* page, the API, or automatically (if your workspace has [the setting enabled](#auto-merge)).

[![a merge results in an attribute change in the profile activity.](https://docs.customer.io/images/merge-people-activity-log.png)](#920a67eecefe28ff1b38c739e37608e2-lightbox)

## Merged profiles in data warehouse sync

Like the *Profile activity*, profile merges are represented in your data warehouse as attribute changes and a deleted profile.

*   In the **Profiles** table, the secondary profile is deleted.
*   In the **Attributes** table, the primary profile shows new entries for each attribute inherited from the secondary profile in the merge.

## Segment membership and automation triggers after a merge

When you merge profiles, you may cause the primary profile to enter or exit segments and automations. In many cases, these changes are easy to understand—the primary profile directly inherits a manual segment membership or an attribute that adds the profile to a data-driven segment.

However, it’s important to remember that the primary profile also inherits automation and delivery history from the secondary profile, both of which can affect segment membership and automation filters. For example, if both the primary and secondary profiles received the same message, the merged profile will become a member of a [data-driven segmentA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions.](/journeys/segmentation/data-driven-segments/) of profiles that received that message more than once.

*   *   [How merging profiles works](#how-it-works)
        *   [When the primary profile inherits the data from the secondary profile](#when-the-primary-profile-inherits-the-data-from-the-secondary-profile)
        *   [When the primary profile retains its data](#when-the-primary-profile-retains-its-data)
            *   [Resolving conflicts between attributes](#attribute-conflicts)
            *   [Resolving conflicts between subscription topic preferences](#subscription-conflicts)
            *   [Resolving conflicts between relationships](#relationship-conflicts)
        *   [Resolving conflicts between automation journeys](#campaign-conflicts)
    *   [How to identify profiles](#how-to-identify-profiles)
    *   [Merge two profiles together](#merge-people)
    *   [Merge profiles via the API](#merge-people-api)
    *   [Automatically merge profiles](#auto-merge)
        *   [Multi-identifier profile merge](#auto-merge-complementary)
        *   [Auto-merge on update](#auto-merge-on-update)
            *   [When we merge profiles](#when-auto-merge-on-update-merges-profiles)
            *   [What happens when profiles merge](#what-happens-when-profiles-merge)
            *   [When we can’t merge profiles automatically](#when-we-cant-merge-profiles-automatically)
        *   [Enable auto-merge for your workspace](#enable-auto-merge)
    *   [Merged profiles in the profile activity](#activity-log)
    *   [Merged profiles in data warehouse sync](#dws-merge)
    *   [Segment membership and automation triggers after a merge](#segment-rules)

Copy page

Copy page [Download .md](/messaging/profiles/manage/merge-profiles.md)

Is this page helpful?

![](https://docs.customer.io/images/export-success.png) ![](https://docs.customer.io/images/export-failure.png)

# How can we make it better?

Close

Do you need help from Customer.io support?  No  
 Yes

What part of Customer.io do you need help with? 

How can we improve this page?

Email (optional):  Please provide a valid email address

 I am not a bot

 

We appreciate your feedback!

Our support team will contact you as soon as possible
