Merging duplicate contacts in GoHighLevel without losing history
Duplicates inflate your list, split conversation history and make reporting lie. Here's how to merge them safely, and what a naive merge quietly destroys.
7 min read
Where duplicates come from
Three sources cover almost all of them: a form filled in twice with a different email, a lead imported from an ad platform that already existed, and a phone-only record created by an inbound call.
None of these are avoidable by being careful. They are a structural consequence of accepting leads from more than one channel, which means duplicate handling has to be a routine, not a one-off cleanup.
Matching rules, in priority order
Match on the strongest signal available and stop. Combining weak signals is how you merge two different people.
- 01Exact email match after normalising case and stripping plus-addressing.
- 02Exact phone match after normalising to international format.
- 03Same last name plus same domain on a work email — a strong signal in B2B, weak in B2C.
- 04Close name similarity plus a shared project or source tag. Flag for review, never auto-merge.
Choosing the record to keep
Keep the record with the most usable data, not the oldest one. Score each candidate: one point per populated contact field, one for a pipeline opportunity, one for any conversation history, one for a booking. Highest score is the survivor.
What a naive merge destroys
Merging by overwriting fields loses whichever value happened to be second. In practice that means the mobile number you actually reach them on, or the note explaining why they went cold.
Merge by filling gaps instead: the survivor keeps its own values, and every empty field is filled from the loser. Conversation history, notes and opportunities are carried across rather than replaced. Anything genuinely conflicting goes into a note on the surviving record so it's recoverable.
Make the run reversible
Before any merge, write down the full state of both records and the batch they belong to. That log is what turns an irreversible operation into one you can undo — and it's the reason an operator will actually approve the run.
Do it project by project rather than account-wide. Smaller batches mean a mistake costs a rollback, not a weekend.