Why GoHighLevel Duplicate Contacts Keep Showing Up
GoHighLevel duplicate contacts rarely show up by accident. They appear because a form, a Zapier submission, a Facebook message, or a WhatsApp reply reached the account before the deduplication settings were configured to catch it. Fix that setting and most of the problem goes away before it starts.
GoHighLevel gives you three tools for this: a setting that decides whether a duplicate gets created, a manual merge screen for cleaning up what already exists, and a workflow action that merges contacts automatically inside an automation.
How the Allow Duplicate Contact Setting Decides What Happens
The setting lives in Settings, then Business Profile, then Contact Deduplication Preferences, in the lower-left corner of the dashboard. Business Profile settings work differently depending on whether you're in the agency view or a sub-account, so check you're editing the right one.
Switch Allow Duplicate Contact on, and a new submission with a matching email or phone creates a fresh record next to the old one. Leave it off, and that same submission updates the existing contact instead.
You also pick a primary matching field, email by default or phone, plus an optional secondary field. With email primary and phone secondary, GoHighLevel checks email first and only falls back to phone when no match turns up.
That logic doesn't reach every channel the same way.
| Channel | How duplicates are handled |
|---|---|
| Forms and Zapier | Follow the Allow Duplicate Contact toggle exactly |
| Facebook and Instagram Messenger | Merge automatically once details match if the toggle is off; can leave separate records if it's on |
| CSV imports | Always merged on phone or email, no matter how the toggle is set |
| Needs phone set as the secondary matching field, or duplicates slip through even with the toggle off |
That CSV row catches people out: it ignores the toggle entirely. Importing a contact list merges on phone or email regardless, so a messy CSV can quietly erase records you meant to keep separate.
Where GoHighLevel Duplicate Contacts Actually Come From
WhatsApp is the clearest example of the setting failing silently. A reply from an existing contact creates a second record whenever the contact search preferences aren't configured to include phone as a secondary criterion, even with Allow Duplicate Contact switched off.
The fix is narrow: open Business Profile, find Contact Duplicate Preference, and set the second preference for search to phone. HighLevel's own walkthrough for the WhatsApp issue lays out exactly those three steps.
Merging Contacts by Hand or Inside a Workflow
Once duplicates exist, the Manage Duplicates tool finds them by email, phone, or name, and lets you combine up to ten matching contacts into one master record at a time.
The master contact's own values stay as they are. Custom fields fill in only where the master was blank, existing values are never overwritten, and tags, notes, tasks and opportunities all combine onto the surviving record, which matters if tag-based segmentation drives your campaigns.
Only Agency Admin and Sub-Account Admin roles can run a merge. And it can't be undone, so check the master contact before confirming.
For duplicates that keep appearing on their own, the Merge Contact workflow action handles it without anyone opening the Contacts screen. Add it to a workflow and choose email, phone, or both as the match criteria.
It merges the newer record into the older one automatically. The older contact always survives, which protects whatever history it already has.
That action has real limits. Goals can malfunction after a merge, and trigger link tracking can break since the tracking ID still points at a contact that no longer exists on its own.
Building that logic into a workflow is worth doing carefully, not bolted onto an existing automation and left to hope.
Set the deduplication preferences correctly first. A merge tool only ever cleans up contacts that shouldn't have been duplicated to begin with.
Cover photo by Gustavo Fring on Pexels
Need help implementing this in GoHighLevel?
Our team builds, automates, and scales GoHighLevel systems for agencies every day. Book a free call and we'll map out exactly what to ship next.
Book a free call