GoHighLevel duplicate contacts: clean your export before you merge or re-import

HighLevel merges up to 10 contacts at a time, only Admins can run Manage Duplicates, and a completed merge can't be reversed. GHL duplicate contacts (Go High Level duplicate contacts, if you spell it that way) pile up from forms, Zapier, Messenger and imports. Below: HighLevel's own steps first, then our done-for-you cleanup of your exported file: same-email duplicates merged, possible duplicates flagged and a change log, back in 24 hours on Quick Clean (up to 200 rows).

Rather not do it by hand? Skip to done-for-you cleanup, from $25.

How to merge contacts in GoHighLevel: what you can do natively

HighLevel has two built-in ways to merge. Manage Duplicates (Admins only) scans by email, phone or name and lets you merge each group, up to 10 records at a time. A manual merge from a Smart List works when you already know which contacts are the same person. A merge can't be undone, so export a backup first. If you are also re-importing, HighLevel's own advice for the file is: "Duplicate records within CSV: Clean the list before importing." (HighLevel Support: Importing Contacts using a CSV File)

  1. Export first. Go to Contacts, then Smart Lists, filter or select all contacts, then More and Export. Exports are admin-only: "Only Admin Users Can Export Contacts." Only visible columns come out: "The CSV file will only contain the columns that are currently visible in the Contacts table." Use Manage Fields to show Contact ID, email, phone, Business Name, Tags, DND and any custom fields you want back. Long notes are cut: "Some data, such as notes exceeding 255 characters, may be truncated." Several sub-accounts: "You must export contacts separately for each sub-account or location. However, you can combine the resulting .csv files in a spreadsheet application to consolidate contact data from multiple sources." (HighLevel Support: How to Export Contacts to a CSV in HighLevel)
  2. Find duplicates with Manage Duplicates. From Contacts, open the menu: "Click on the Manage Duplicates option." Pick Email, Phone or Name to find by, then "Click Find Duplicates." "Manage Duplicates helps find possible duplicate records by email, phone, or name." Reject a match only if you're sure: "Rejected emails, phone numbers, or names will be excluded from future duplicate scans." (HighLevel Support: How to Manage and Merge Duplicate Contacts in HighLevel)
  3. Merge each group, or merge two contacts by hand. In Manage Duplicates: "Select up to 10 records to merge at once." Then "Choose one record as the Master — this record will retain key details like name, main email, and main phone number." And "All related data (tasks, opportunities, notes, products, etc.) from other records will be combined into this master record." Custom fields: "A value from another selected contact is added only when the corresponding custom field on the master contact is blank. Existing custom field values on the master contact are not overwritten." To merge two contacts by hand: "Navigate to Contacts > Smart Lists." Select the contacts, then "Click More from the top action bar. Select Merge." Then "In the Merge Contacts window, choose the contact that should remain as the Master record." (HighLevel Support: How to Manage and Merge Duplicate Contacts in HighLevel)
  4. Stop new duplicates at intake. "This setting is located under Settings → Business Profile → Contact Deduplication Preferences". Leave Allow Duplicate Contact off if you don't want duplicates from forms and integrations: "When enabled, new records are allowed even if an email or phone already exists." Pick the match field: "Available options are Email (Default) or Phone." (HighLevel Support: Contact Deduplication Preferences)
  5. Clean the file before any re-import. When updating, HighLevel matches in this order: "Contact ID → Email → Phone." Keep the Contact ID column if you're updating existing contacts. (HighLevel Support: Importing Contacts using a CSV File)
  6. Import and check. "The file must be in CSV (.csv) format." "Only users with Admin access can import contacts." Our status, qa_notes and source_row columns can stay unmapped: "Optional: Unmapped columns will be ignored automatically." After the import, open Bulk Actions and Show Stats, where "you can also download the error log" (HighLevel Support: Importing Contacts using a CSV File). There's no undo, but HighLevel suggests a tag: "While there’s no direct “undo” option, you can tag imported contacts during upload." (HighLevel Support: Troubleshooting Bulk Imports Via CSV)

Bigger cleanup across many sub-accounts? See Agencies: white-label batches.

Or let us clean the file before you merge or re-import

  • You send the Smart List export from step 1 as a CSV or Excel (.xlsx) file. With Excel, we clean the first sheet of the workbook, and the file comes back as a cleaned CSV plus a change log. We don't take old Excel .xls files; save them as .xlsx or CSV first. Exports from several sub-accounts can be stacked into one CSV or one sheet (same columns, one header row) and cleaned as one list; add your own "Sub-account" column first if you want to see where each row came from. We don't run the import, merge contacts in HighLevel or pick the master record for you.
  • Rows with the same email (ignoring capitalization and spaces at the start or end) are merged into one row: the first row is kept and its blank fields are filled from the later rows, which can include DND cells. Where both rows have different values (for example two Contact IDs, or different Tags), the first row's value is kept and the other is listed in the change log; tag values aren't combined. Every merge and every fill is listed in the change log. The merged-away contact still exists in HighLevel: the change log lists the kept row and the merged row, so you can merge those contacts in HighLevel (step 3).
  • Rows with the same full name and the same company (HighLevel's Business Name), where both are present, but a different or missing email are flagged, not merged. Each one is marked needs_review, with a note naming the row it may match, so you choose which to keep, or merge them in HighLevel (step 3). Misspelled names aren't caught. HighLevel's own Manage Duplicates matches differently (by email, phone or name) and may find others.
  • Invalid, missing and personal (for example Gmail or Yahoo) emails are flagged in qa_notes. We don't fix or verify mailboxes.
  • Names in ALL CAPS or all lowercase are re-cased. US phone numbers are formatted +1-XXX-XXX-XXXX. Numbers with a non-US country code (starting with + or 00) are kept as you sent them (extra spaces trimmed only). Numbers with no country code and 10 digits are treated as US. Placeholder phones like N/A are blanked and logged. Anything we can't read is kept as-is, with a note in qa_notes. Line breaks inside cells are turned into spaces (except in the email column, where a broken email is flagged invalid instead), and the CSV is saved as UTF-8. Rows with no Business Name get a "missing company" note and are marked needs_review.
  • You get back the cleaned CSV (with status, qa_notes and source_row columns), a change log with every merge, every fill from a duplicate, every email and possible-duplicate flag, and every edited cell listed by row, with its old and new value, a QA report with counts (rows in and out, duplicates merged, possible duplicates flagged, emails flagged and cells edited), and your original file, unchanged.
  • What we don't do: we don't merge, delete or edit anything inside HighLevel. We don't run the import, map fields, or change your Contact Deduplication Preferences. We don't promise deliverability, inbox placement or bounce rates, we don't verify mailboxes, we don't find, buy or add contacts, and we don't merge rows that only might be the same person.

Clean my GoHighLevel export · $25 (up to 200 rows, back in 24h)

Bigger list? Intro $99 for up to 500 rows (48h) · Growth $299 for 501 to 2,000 rows (72h) · Bulk $499 for 2,001 to 5,000 rows (5 business days) · over 5,000 rows, custom quote. See all sizes.

What you get back

  • Every change is logged with its original row number.
  • Possible duplicates are flagged for your review, never blind-merged; same-email duplicates are merged and listed in the change log.
  • Your original file is returned alongside the cleaned one.

See a free before-and-after sample · sample files you can download

Start a Quick Clean · $25 (up to 200 rows)

Check your CSV free first

Check your CSV for exact-email duplicates and formatting problems free in your browser before you import it into GoHighLevel. Your file never leaves your computer.

Run the free CSV Preflight Checker

How it works

Pay

Pick the size that fits your list and check out on Stripe. Quick Clean is $25 for up to 200 rows.

Email us your CSV (reply to your receipt or send it to slrescue@mail.grokbot.com)

No HighLevel login, no call, no upload form.

Get it back: 24h (Quick Clean, up to 200 rows), 48h (Intro), 72h (Growth), 5 business days (Bulk)

A clean CSV plus a change log. Over 5,000 rows, the turnaround is scoped in your custom quote.

Flat pricing

Your $25 Quick Clean counts toward any bigger cleanup within 14 days.

Quick Clean, Intro, Growth and Bulk: If the file isn't what we promised, we fix it once for free within 48 hours. If it still isn't right, you get your money back for the part we couldn't deliver. If we're late, you choose a full refund or a free rush job.

Not sure how messy it is? CRM Hygiene Scorecard (written diagnosis), $29 · DIY HubSpot and Salesforce import checklist, $9. Agencies: white-label batches.

Questions

Can I merge duplicate contacts in bulk in GHL?

Up to ten at a time: "Select up to 10 records to merge at once." (HighLevel Support) For merging inside a workflow, HighLevel says: "Use the Workflow Action – Merge Contact when you want duplicate contact merging to happen inside a workflow." We merge same-email rows in your exported file in one pass and log each one, so you know which contacts to merge in HighLevel.

What does Allow Duplicate Contact do?

"When enabled, new records are allowed even if an email or phone already exists." It doesn't change CSV imports: "For CSV imports, GoHighLevel automatically merges contacts based on phone numbers or email addresses, regardless of the setting" (HighLevel Support).

Can I undo a merge in GoHighLevel?

No: "A completed contact merge cannot be reversed." (HighLevel Support) Export a backup first. Our cleanup returns your original file unchanged next to the cleaned one.

How do I remove duplicate contacts before importing into GoHighLevel?

Export or collect the list as a CSV or Excel (.xlsx) file and send it to us; it comes back as a cleaned CSV plus a change log. Same-email rows are merged and logged, and possible duplicates are flagged needs_review. HighLevel's own advice: "Duplicate records within CSV: Clean the list before importing." (HighLevel Support)

Will you merge or delete contacts in my HighLevel account?

No. We clean the exported file only. Same-email rows are merged in the file, with each merge and fill logged. Rows that only might match (same name and Business Name, different email) are flagged needs_review for you to decide. You run the import and any merges in HighLevel yourself.

What comes back, and how do I import it?

A UTF-8 CSV, also when you send Excel (.xlsx), plus a change log. Headers come back in lowercase with underscores (for example, Contact Id becomes contact_id and DND becomes dnd), and Business Name comes back as company. Our standard columns come first (full_name, then first_name and last_name when your export has them, then email, phone, company, title, website and linkedin; some may be blank), then status and qa_notes, then the rest of your columns and source_row. You can leave status, qa_notes and source_row unmapped: "Optional: Unmapped columns will be ignored automatically." (HighLevel Support) Keep the contact_id column if you're updating existing contacts, remove the dashes from phone numbers (see the caution box), and test a small file first. We don't run or guarantee the import.

Do you need access to my HighLevel account?

No. You export a file and email it. We only clean the exported file and never log in to or touch your HighLevel account.

How fast is delivery?

From when we receive your file: Quick Clean (up to 200 rows) within 24 hours, Intro within 48 hours, Growth within 72 hours, Bulk within 5 business days. Over 5,000 rows is scoped in your quote.

What if the cleaned file isn't right?

If the file isn't what we promised, we fix it once for free within 48 hours. If it still isn't right, you get your money back for the part we couldn't deliver. If we're late, you choose a full refund or a free rush job.

What happens to my data?

Your file is used only for your job and deleted after delivery on request (see Anonymous aggregate statistics). We never log in to your CRM, and we never invent, buy, or append emails.

Anonymous aggregate statistics. After a cleanup we keep a small record of counts about your file: rows in and out, duplicates merged, rows flagged for review, which fields were present, and the CRM you told us it's for. This record contains no contact data, names, emails, company names, domains, file names or cell values, and it isn't deleted when your file is deleted. We only publish these counts combined with at least 19 other lists (and at least 5 different customers), so no single customer can be identified. To opt out, reply 'opt out' to your delivery email and we'll delete your record.

Try the free in-browser CSV dedupe teaser (data never leaves your browser). Freelancers: see the referral kit.

Not affiliated with GoHighLevel. Quotes are from HighLevel's public help docs.