GoHighLevel
Import contacts into GoHighLevel without the mess
The import itself takes ten minutes. Everything that goes wrong afterwards was decided in the file you uploaded.
How do I import contacts into GoHighLevel?
Go to Contacts → Import, upload a CSV (Excel and Sheets files must be exported to CSV first), map your columns to GoHighLevel fields, set a unique identifier so existing contacts update rather than duplicate, then confirm. Keep files within your account limit — commonly 30–50 MB — and split larger lists into batches. A prepared file imports in under ten minutes.
Step by step
- Export to CSV, not XLSX
GoHighLevel accepts .csv only. Export from Excel or Google Sheets first, and check the encoding is UTF-8 or accented characters will arrive corrupted.
- Clean the file before uploading
Deduplicate, normalise phone numbers to E.164, and standardise company names now. Importing a messy file just moves the mess into a system where it is harder to fix.
- Check the header row
One header row, no merged cells, no blank columns between populated ones. GHL reads the first row as field names and a stray blank column will silently misalign everything after it.
- Check the file size
Account limits are commonly 30–50 MB. Split larger files into batches rather than letting an upload fail halfway and leave a partial import.
- Map every column deliberately
Do not accept the auto-mapping without reading it. Custom fields in particular get matched to the wrong target when names are similar.
- Set the unique identifier
This is the setting that decides whether you are updating or duplicating. Choose ‘update existing contacts’ and map email as the identifier unless you have a genuine reason not to.
- Name the import and set tags
Give the import a name you will recognise in three months and apply a source tag. When something looks wrong later, you will be able to isolate exactly which batch caused it.
- Verify a sample after import
Pull 50 records at random and compare them against the source file. Check custom fields and phone formatting specifically — those are where mapping errors hide.
Errors that block a GoHighLevel import
Most failed imports come down to five causes:
- Wrong file type — .xlsx or .numbers instead of .csv
- File too large — over the account limit, so split into batches
- Malformed header row — merged cells, blank columns, or two header rows
- Invalid characters — non-UTF-8 encoding mangling accented names
- Insufficient permission — only Admin-level users can run imports
Migrating from another CRM
Contacts, custom fields, tags and opportunity records all move by CSV. Automations do not — GoHighLevel workflows are structured differently and have to be rebuilt rather than lifted across.
One thing that catches agencies out mid-migration: snapshots do not carry contacts. A snapshot captures funnels, workflows, pipelines, calendars and templates. Contacts, conversations and call logs stay in the source sub-account and need a separate CSV migration.
Want this done for you?
This is our most-requested work — 237 of our 282 client reviews come from CRM and GoHighLevel data projects. Send a sample export and we will tell you what is in it, free, within one business hour.
FAQ
Common questions
What file format does GoHighLevel accept for imports?
CSV only. Excel and Google Sheets files must be exported to CSV first, with UTF-8 encoding to preserve accented characters.
Why did my GoHighLevel import create duplicates?
Almost always because no unique identifier was mapped, or the import type was set to 'add new' rather than 'update existing'. GHL will happily create a second record for the same person if nothing tells it not to.
Do GoHighLevel snapshots include contacts?
No. Snapshots capture system assets only — funnels, workflows, pipelines, calendars and templates. Contacts, conversations, call logs and billing settings must be migrated separately.
How long does a GoHighLevel import take?
A prepared file under the size limit typically processes in under ten minutes. The preparation is where the real time goes, and where the errors are prevented.
Data you can actually trust
Tell us what is broken. We will tell you what it would take to fix — and if the answer is nothing, we will say that too.