This article provides the reasons for duplicate customer profiles and ways to fix duplicate customer profiles. The most likely cause of the issue is that two (or multiple) customer profiles have not merged properly, therefore there are two separate customer profiles with the same data. Merging in the Engagement application works based on the values in _hard_ids_ in your project. Let’s assume that you are working with the more common scenario, the _hard_id_ named ‘registered’ is holding a value of the user's email. So you are using emails as _hard_id_ identifiers. Identify where the duplicate data point is being stored. In this case, assume that you are working with a user email address.
Is the duplicate information in the _soft_ids_?
Is it in customer properties?
Additionally, determine from your system where you are tracking the duplicate information which is found on multiple profiles - so you can fix this at the root. In other words, is the email coming from:
JS SDK (website tracking)
## JS SDK (website tracking)
There are multiple points on your website where you can track the customer data. The most common ones are after successfully finishing the checkout (ecommerce), signing up to an email subscription weblayer, and registering.
Under each of these form action submissions, you can have the data passed onto the JS SDK functions. For more information on tracking using JS SDK, refer to [this page](🔗).
Now you need to check if the correct functions are invoked via SDK. Check if you are using _exponea.update()_ instead of _exponea.identify()_. If yes, this will track the data into the customer attributes (_exponea.update()_) instead of the _hard_ids_ (_exponea.identify()_). This prevents the profiles from merging.
If you are importing data from your backend data storage, double check the import settings and make sure that you have the correct identifiers assigned to the respective data points.
The most usual scenario in this case is a [double opt](🔗) where you are first tracking the email into a new profile and then merging it with the original profile after the customer has confirmed the subscription by clicking the link in the received email. Check your double opt-in setup and make sure that the customers are getting merged.
Other scenarios that are utilizing API work on the same principle as with JS SDK, but here instead of functions you need to double check all of your instances of where you are invoking the API calls.
For tracking the customer property (in our case email) into _hard_ids_, you need to specify it in the payload under the ‘customer_ids’. If it is under ‘properties’ in the payload, it will get tracked into customer properties. Check [API references](🔗) for more information.
## Fixing the non-merged profiles
After you have identified and fixed the source where these profiles are coming from, it is time to fix the non-merged profiles.
Note that as this is a non-reversible action, after you merge the profiles you cannot undo it. Therefore we highly recommend getting in touch with our business consultants to assist you in this matter.
This is usually done by using the [API of updating customer properties](🔗), where you track the identifiers (email in our case) into the _hard_ids_ of the duplicate profiles. This way, the customer profiles get merged, as it is not possible to have two customer profiles with the same _hard_id_.
Did this article help you?
Please provide your feedback. We would like to know if our help center is effective in solving your queries. You can also leave comments and suggestions on how we can make our help articles better. You can also suggest topics you’d like us to cover.