Sooner or later every GoHighLevel account needs data moved: exporting contacts for a backup or another tool, importing a list from a spreadsheet or old CRM, or loading a snapshot into a new sub-account. Each is simple until it goes wrong: missing custom fields, duplicate contacts, or an import that suddenly texts 5,000 people. This guide covers how to do all three safely.
1. How to export contacts from GoHighLevel
- Open Contacts in the sub-account, or a Smart List if you only want a segment (for example a tag or a date range).
- Tick the checkbox at the top to select the page, then choose Select all to include every matching record, not just the 20 or so shown on screen.
- Choose the Export contacts bulk action.
- Download the CSV file and open it to check it.
Things to know:
- Permissions: only users with import/export permission can do this. An admin can change it under the team settings.
- Check the columns: make sure the custom fields, tags and dates you need are in the file before you rely on it. If something's missing, add the field as a column in the Smart List view or pull it through the API.
- Conversations, notes and opportunities aren't part of a simple contact export. For a full move, plan these separately.
- Treat the file as sensitive data. It contains personal information, so store it securely and delete copies you don't need (see GDPR and HIPAA for regulated businesses).
2. Prepare a CSV for import
Most import problems are fixed before you upload:
- Every row needs an email or a phone number, or it can't be imported.
- Phone numbers in international format (for example +1 512 555 0123, +44 20 7946 0123), so texts and calls work.
- Split names into first and last name columns.
- One clear header per column, matching what you'll map it to.
- Remove duplicates in the spreadsheet first.
- Create custom fields first in GoHighLevel for any extra data (for example last visit date, policy renewal date), so you can map to them.
- Add a source column or tag, such as
import-2026-10, so you can find and fix this batch later. - Keep consent information: only import people who agreed to hear from you, and record where that consent came from.
3. How to import contacts into GoHighLevel
- Go to Contacts and choose Import.
- Upload your CSV file.
- Map each column to a contact field or custom field. Standard fields usually match automatically; check every row anyway.
- Choose how existing contacts are handled (add new only, or update existing records matched by email or phone) and add a tag for the batch.
- Optionally create a Smart List from the import so you can review it.
- Start the import, then spot-check a few contacts: name, phone, email, custom fields and tags.
4. Don't let an import trigger your automations
This is the most expensive mistake. If a workflow starts on "contact created" or on a tag your import adds, importing a list can send welcome texts, review requests or "thanks for your enquiry" messages to everyone at once, often to people who didn't expect them, which hurts your A2P standing and your reputation.
- Check which workflows use contact-created or tag-added triggers before importing.
- Use a tag your workflows don't listen to, or add a filter that excludes the import tag.
- Pause risky workflows during large imports.
- Import a test file of three contacts first and watch what happens.
If messages don't send when they should, the opposite problem, see why GoHighLevel workflows stop working.
5. Moving from another CRM
Exporting from HubSpot, Salesforce, Keap or a spreadsheet works the same way: export, clean, map, test, import. Opportunities and pipeline stages usually need their own import or rebuild, and automations always need rebuilding. The full process is in how to migrate to GoHighLevel, and if you're coming from HubSpot, see GoHighLevel vs HubSpot.
6. How to import a snapshot
- Get the snapshot's share link from the seller or agency.
- Import it into your agency's snapshot library. This alone changes nothing in any sub-account.
- Load it into a new or existing sub-account, choosing whether matching items are overwritten or skipped (there's no merge).
- Fill in custom values, then connect the parts snapshots never include: phone numbers, domains, email, integrations and A2P.
- Test before publishing workflows.
Snapshots copy the setup, not the data: contacts and conversations don't come with them. More detail in GoHighLevel templates and snapshots. To move a whole sub-account with its data, use a sub-account transfer instead.
7. Back up your contacts regularly
GoHighLevel keeps your data, but a bad import, an accidental bulk delete or a lost agency relationship can still cost you. A simple routine:
- Export contacts monthly and store the file securely.
- Snapshot the account's setup before big changes.
- For larger businesses, run an automated nightly backup through the API with n8n or a small script.
Need a migration or clean-up done?
I'm Arslan Mumtaz, a software engineer who handles GoHighLevel imports, CRM migrations and data clean-ups, including the field mapping and automation checks that stop surprises. See pricing or monthly GHL VA plans.
Frequently asked questions
Does importing contacts into GoHighLevel cost anything?
No. Importing and storing contacts is free on every plan, and contacts are unlimited. Costs only start when you message or call them.
Can I import notes and conversation history from another CRM?
Contact details, tags and custom fields import cleanly from a CSV. Past conversations usually don't, so keep an export of the history or link to it from a custom field.
How do I clean up duplicate contacts after an import?
Use GoHighLevel's duplicate contact tools to review and merge matches by email or phone, and set your duplicate rules before the next import so it doesn't happen again.