Contact management API returns duplicate records on search queries

After importing 50,000 new contacts from our marketing automation system last week, we’re seeing duplicate records returned by the contact search API. When we search by email or company name, the same contact appears multiple times in the results with different IDs but identical data.

Example query:


GET /api/contacts/search?email=john.doe@example.com
Response: [{id: 12345, email: "john.doe@example.com", ...},
           {id: 67890, email: "john.doe@example.com", ...}]

The UI shows only one contact record when we search manually, so the duplicates seem to be API-specific. We’ve checked our import process and confirmed we’re not sending duplicate records. The issue is affecting our sales team’s lead assignment automation and causing confusion about which contact ID is the “correct” one to use. Is this a known issue with the search API after large imports, or is there a query parameter we need to use for deduplication?

Also verify that your import didn’t create records with slightly different field values that the deduplication rules didn’t catch. Even small differences like trailing spaces, case variations, or different phone number formats can result in separate records being created. Adobe Experience Cloud’s default deduplication only triggers on exact email matches during import, but other fields might differ. Check the full record details for both IDs to see if there are any variations.

This sounds like a search index inconsistency. The UI likely queries the primary database directly, while the API uses a search index that may not have been updated after your bulk import. Check if there’s a reindex operation you can trigger. Large imports often require manual index refresh to ensure the search API returns consistent results with the database.

The search index refresh isn’t in the admin UI - it’s an API operation. You need admin credentials to call POST /api/admin/contacts/reindex. This forces the search index to rebuild from the primary database. It can take 30-60 minutes for large contact databases, during which search results might be incomplete. Schedule it during off-hours if possible. The duplicate issue should resolve once the reindex completes.

Before you reindex, you should also run the built-in duplicate detection tool to merge any actual duplicates in the database. Go to Contacts → Data Quality → Find Duplicates. This will identify records with matching emails and let you merge them. If you reindex without merging, the duplicates will persist. The tool shows you which ID will be kept as the master record after merging.

I compared the full records for both IDs and they’re 100% identical - same email, name, company, phone, everything. So it’s not a field variation issue. Where would I trigger a search index refresh? I don’t see that option in the admin console.

One more thing - check your import job logs to see if any records failed validation and were retried. Sometimes failed imports get retried automatically, and if the duplicate detection wasn’t working during the import window, you could end up with multiple copies of the same record. The job logs will show if any records were inserted multiple times. You can access them via Settings → Import History → Job Details.