Joshua SanderfordJoshua Sanderfordby Josh Ads
Free tool · No signup · Runs in your browser

GoHighLevel CSV Import & Migration Tool

Drop in an export from HubSpot, Keap, Mailchimp, Zoho, Salesforce, Pipedrive, or a plain spreadsheet. This tool renames your columns to HighLevel's field names, fixes the phone and date formats that cause failed imports, strips duplicates, splits anything over 30 MB, and hands back a file HighLevel will accept — plus the exact steps to import it.

Format my CSVYour data never leaves this device
A messy CSV export being cleaned into a HighLevel-ready file
How it works

How the tool works

Three moves, all in this page. Nothing is uploaded, and you can start over at any point.

1. Drop your export in

Any CSV from your old CRM or a spreadsheet. The tool detects which platform it came from and preloads a mapping preset.

2. Confirm the mapping

Your columns are matched to HighLevel's exact field names. Change anything that looks wrong, or leave a column out entirely.

3. Download a clean file

Phones in E.164, dates normalised, duplicates gone, tags fixed, and anything over 30 MB split into parts HighLevel accepts.

CSV Formatter for HighLevel
Runs entirely in your browser

What are you importing?

Pick the record type — it decides which HighLevel fields your columns get matched to.

In HighLevel: Contacts → Import Contacts. Every row needs at least a First Name, Email, or Phone.

Step 1 of 5

How your data is handled

  • No uploadThe file is read by your own browser tab.
  • No serverNothing is transmitted to this site or anyone else.
  • No storageNothing is saved to a database or to your device.
  • No loggingFile names, columns, and rows are never recorded.
  • Cleared on refreshClose the tab and the data is gone.
  • Anonymous counter onlyWe record that the tool was opened — never any part of your file.
Acceptable use, responsibility & trademarksShow

Acceptable use. This tool is for ordinary business contact and CRM records. Do not use it for protected health information (HIPAA), consumer credit or financial account data (GLBA/FCRA), government identification numbers, or data about children under 13 (COPPA).

Your responsibility. You are the controller of the data in your file. You confirm you have the lawful basis, consent, and rights needed to process, migrate, and import it, and you remain responsible for compliance with GDPR, UK GDPR, CCPA/CPRA, CAN-SPAM, TCPA, and any other law that applies to you. Because your file never reaches this site, Josh Ads is neither a controller nor a processor of it.

No warranty. The tool is provided as-is. Always keep your original export. Josh Ads is not liable for data loss, incorrect mapping, duplicate merges, or a failed or partial import. See the Terms, Privacy Policy, and Disclaimer.

Trademarks. GoHighLevel® and HighLevel® are trademarks of HighLevel Inc. This site and this tool are independent and are not affiliated with, endorsed by, or sponsored by HighLevel Inc. The names are used only to describe compatibility. Steps quoted here come from HighLevel's public help documentation and may change without notice.

Checklist

Before you import anything

These are HighLevel's own requirements. Most failed imports break one of them.

The mistakes HighLevel names

  • Mismatched headers: Ensure CSV headers match system fields.
  • Blank required fields: Every row should have at least one required field (Name, Email, or Phone).
  • Using special characters in phone numbers: Remove spaces, dashes, or letters.
  • Duplicate records within CSV: Clean the list before importing.

Source: Importing Opportunities using a CSV file

Step by step

The import steps, by record type

Every path below follows the official article for that record type, in the order HighLevel presents the screens.

Import contacts

The default path for anyone moving a list in from another CRM, an email platform, or a spreadsheet.

Where: Contacts → Import Contacts

  1. 1Open the contact importerIn the sub-account, go to Contacts and click Import Contacts.
  2. 2Choose what you are importingPick Contacts only, or Contacts and Opportunities if the same rows also carry deal data.
  3. 3Upload the CSV and pick the import typeUpload your file and choose whether you are creating new records, updating existing ones, or both.
  4. 4Map columns to fieldsMatch every column to a HighLevel field. Green checkmarks mean the field is mapped correctly; a yellow warning triangle means something is missing or wrong. Unmapped columns can be skipped intentionally.
  5. 5Verify, tag, and start the importReview the mapping, optionally add a tag to everything in this file so you can find or undo the batch later, then start the bulk import.
  • When updating, HighLevel matches existing records in this order: Contact ID, then Email, then Phone.
  • Tagging each import batch (for example: import-2026-03-hubspot) makes cleanup one bulk action instead of a manual hunt.
Source: Importing Contacts using a CSV file

Import opportunities (pipeline and deals)

Bring your open pipeline across so revenue forecasting works from day one instead of starting empty.

Where: Opportunities → Import

  1. 1Open the Opportunities tabClick the Import button from the Opportunities tab.
  2. 2Select what to importChoose Opportunities only, or Contacts and Opportunities together.
  3. 3Upload your CSVUpload the file and pick the import type based on whether you are adding new records or updating existing ones.
  4. 4Map the required fieldsContact ID, Opportunity Name, and Pipeline are required. Opportunity Value and Opportunity ID are optional — Opportunity ID is only needed when updating.
  5. 5Verify, confirm, finaliseCheck the mapping, add tags if you want, then click Start Bulk Import. Unmapped columns are ignored automatically.
  • If contacts and opportunities sit on the same line of the CSV, HighLevel maps them to each other automatically.
  • Tick "Don't update Empty Values" so blank cells do not wipe data that already exists on the record.
Source: Importing Opportunities using a CSV file

Create and associate companies automatically

Contacts and companies import separately, but a single setting lets contact imports build the company records for you.

Where: Settings → Objects → Companies, then Contacts → Import

  1. 1Turn on the automationIn the sub-account go to Settings → Objects → Companies and enable the option to automatically create and associate companies from contact business names, then save.
  2. 2Add a Business Name columnYour contacts CSV must include a column named exactly Business Name. No company-specific fields are needed.
  3. 3Import contacts as usualChoose Contacts as the object and select Create and update contacts so the automation runs for both new and existing records.
  4. 4Verify the associationsOpen a few imported contacts and confirm the company record exists and is linked before you import the rest of the list.
  • The automation is per sub-account, so it has to be enabled again for every client account you onboard.
  • It also works retroactively for existing contacts that already carry a Business Name value.
Source: Import Contacts and Automatically Create / Associate Companies

Bulk import custom object records

Properties, vehicles, policies, memberships — anything you modelled as a custom object can be loaded in bulk.

Where: Custom Objects → select object → Import

  1. 1Open the objectIn the sub-account open Custom Objects and select the object you are importing into.
  2. 2Click ImportThe Import button sits in the top right of the object view.
  3. 3Choose an import modeCreate, Update, or Create + Update, depending on whether the records already exist.
  4. 4Pick the dedupe unique fieldWhen more than one unique field is mapped, HighLevel asks which one to dedupe on. Pick the field you trust most — usually an external ID.
  5. 5Map primary and required fields firstThen map the rest, including Owner and Followers if you use them.
  6. 6Start the import and watch Bulk ActionsTrack progress under Bulk Actions → Custom Objects, where you can pause, resume, or cancel and open row-level errors.
  • Enable "Update empty values" only when you genuinely want blank cells to clear existing data.
Source: Bulk Import Custom Object Records (CSV) with Bulk Actions

Import transactions and orders

Load historical revenue so dashboards, contact timelines, and reporting reflect the business you already did.

Where: Payments → Transactions / Payments → Orders

  1. 1Transactions: Payments → Transactions → ImportDownload the sample CSV first, match your data to it exactly, upload, review the preview modal, then confirm.
  2. 2Orders: Payments → Orders → ImportUpload a properly formatted CSV, validate in the preview, and confirm. Each order auto-creates a linked transaction.
  3. 3Include customer detailsField names must be exactly as defined and customer details must be included so records match or create the right contact.
  • Transactions impact revenue metrics immediately once added — import into a test sub-account first if you are unsure.
  • Keep the execution date separate from the ingestion date so historical revenue lands in the right month.
Source: Import Transactions and Orders using CSV files

Import a snapshot (settings, not data)

Snapshots move configuration — workflows, funnels, pipelines, custom fields. They do not move your contact data. Load the snapshot first, then import your CSVs into the fields it created.

Where: Snapshot share link, or Sub-Accounts → Manage Client → Actions → Load Snapshot

  1. 1Open the share link while logged inLog into HighLevel, open a new tab, paste the snapshot share link, and click Yes! Import Now.
  2. 2Find it at the agency levelImported snapshots live under Settings → Account Snapshot → Imported Snapshots. They are not automatically visible inside a sub-account.
  3. 3Load it into the sub-accountGo to Sub-Accounts, click the three dots beside Switch to Sub-account, choose Manage Client, then Actions → Load Snapshot.
  • Load the snapshot before importing contacts so the custom fields your CSV maps to already exist.
Source: How to Import Snapshots
Reference

Field formatting reference

What HighLevel accepts for each type of value. The tool applies most of these automatically, but keep them in mind for custom fields you build yourself.

Phone numberE.164 preferred: +11234567890. 123-456-7890 and (123) 456-7890 work for US numbers. 1234567 or abc1234567 will fail.
EmailStandard format with an @ and a domain: name@example.com.
DatesMM/DD/YYYY, YYYY/MM/DD, MM-DD-YYYY, or YYYY-MM-DD. Pick one and use it everywhere.
Tags and multi-selectSeparate with commas, semicolons, or periods. Slashes are invalid.
Single-option dropdownOne value only, matching an option that already exists in the field.
Contact Owner / FollowersFirstName LastName — e.g. Adam Smith, David Lee.
Numbers1.23, 1234, .123
Money1234 or 1,234,234.33
CountryExact HighLevel country name. United States is accepted; USA and U.S. are not.
Additional emails / phonesComma-separated, in their own column.
Source: CSV File Format for Importing Objects

How updates find existing records

When you import as an update, HighLevel checks these in order:

  1. 1. Contact ID
  2. 2. Email
  3. 3. Phone

Tick “Don't update Empty Values” so blank cells in your file do not erase data that already exists on the record.

Coming from another CRM

Migrating from another CRM

Each platform exports its own way. These are the gotchas worth knowing before you upload.

HubSpot

HubSpot splits contacts, companies, and deals into separate exports. Import contacts first, then run a second pass for deals so the Contact ID exists.

Keap / Infusionsoft

Keap exports several email and phone columns. Keep one as Email/Phone and map the rest to Additional Emails / Additional Phone Numbers.

Mailchimp

Mailchimp exports unsubscribes in the same file. Filter them out or map the status column to DND so you do not email people who opted out.

ActiveCampaign

ActiveCampaign tags come out comma-separated, which HighLevel accepts as-is in the Tags column.

Zoho CRM

Zoho uses Mailing Street / Mailing City. Map those to Street Address and City.

Salesforce

Salesforce IDs are not HighLevel IDs. Leave Contact ID unmapped on the first import so records are created rather than skipped.

Pipedrive

Pipedrive exports a single Person Name column. Split it into First Name and Last Name before importing.

Spreadsheet / other

Save as CSV with a single sheet, keep the header row on line 1, and remove totals or notes rows at the bottom.

The order that avoids rework

  1. 1Load your snapshot (or build custom fields) so the fields your CSV maps to exist.
  2. 2Turn on the Business Name automation if you want companies created for you.
  3. 3Import contacts, tagged with the batch name so you can undo it in one action.
  4. 4Spot-check twenty records before importing the rest.
  5. 5Import opportunities, then transactions and orders.
  6. 6Rebuild automations last, so nothing fires at your imported list by accident.

Pause or disable workflows with contact-created triggers before a bulk import unless you genuinely want thousands of people to get an email.

FAQ

Common questions

What file format does GoHighLevel need for imports?
CSV only. Excel (.xlsx) and Google Sheets files are not accepted — save or download as CSV first, keep a single sheet, and make sure row 1 is your header row and is not blank.
What is the GoHighLevel import file size limit?
30 MB per file. If your export is larger, split it into smaller files and import them one after another. This tool splits automatically and keeps the same columns in every part.
Which fields are required to import contacts into GoHighLevel?
Every row needs at least a First Name, Email, or Phone. For opportunities you also need Contact ID, Opportunity Name, and Pipeline. Only Admin users can run imports.
How does GoHighLevel decide if a contact is a duplicate?
When you import as an update, HighLevel matches existing records in this order: Contact ID, then Email, then Phone, based on your duplicate settings. Cleaning duplicates before the import avoids surprise merges.
How do I migrate from HubSpot, Keap, or Mailchimp to GoHighLevel?
Export each object separately, run the file through this tool to map headers to HighLevel field names and fix phone and date formatting, then import contacts first and opportunities second so the contact records already exist.
Does this tool upload my customer data anywhere?
No. The CSV is parsed, cleaned, and re-saved entirely in your browser. Nothing is uploaded, stored, or sent to a server.
Is it safe to upload customer data to this tool?
There is no upload. Your file is read in your own browser tab, processed in memory, and cleared when you close or refresh the page — it never reaches a server, is never stored, and is never logged. Because of that, no personal data in your file is collected or received by this site. Do not use the tool for protected health, consumer credit, government ID, or children's data.
Do snapshots import my contacts?
No. Snapshots move configuration — workflows, funnels, pipelines, custom fields. Load the snapshot first so the custom fields exist, then import your contact CSV into them.

Once the data is in

Importing is step one. These free resources cover what to build next.