A spreadsheet can be a perfectly good way to get contacts and opportunities into GoHighLevel (HighLevel). Teams do this when they’re leaving another CRM, leaving a mix of tools, or finally moving a list out of Sheets or Excel.
The mistake that causes the most cleanup is running the import too early. HighLevel will not create your pipelines, stages or custom fields for you during a CSV import. If a column has no matching field, or a pipeline name doesn’t already exist, that data has nowhere to land. Create the fields and pipelines first, then import.
This guide covers how to prepare the file, what to set up in HighLevel, and how to test a small sample before you load everything. HighLevel’s own import documentation is the source for the product-specific rules below.
Before you import a spreadsheet into GoHighLevel
Decide which rows are contacts, which are opportunities, and whether both are moving. Every opportunity in HighLevel has to belong to a contact. If the people are not already in HighLevel, plan to import contacts first, or use a combined contacts-and-opportunities import.
Then clean the sheet in the spreadsheet, not in HighLevel:
- One header row, with a unique name for each column
- One record per row
- Emails in lowercase, with duplicates merged or marked
- Phone numbers, states and other dropdowns in one consistent format
- Pipeline and stage values spelled exactly as they will appear in HighLevel
- A unique ID from the old system, if you have one, so you can check the import later
Save the file as CSV. HighLevel’s current documentation asks you to keep the file under 30 MB. Drop columns nobody will use.
Create custom fields and pipelines first
Do this in HighLevel before you upload anything.
Create the custom fields
Open HighLevel’s custom field settings and create a field for every spreadsheet column you want to keep that isn’t a standard HighLevel field. Make contact fields on the contact object, and opportunity fields on the opportunity object. A number, date or dropdown in your sheet should be the same type in HighLevel, with the same options.
If you skip this step, those columns either fail to map or never show up on the record.
Create pipelines and stages
HighLevel’s opportunity import notes are direct: create the pipelines you intend to use before importing, and create the stages before you import stage information. The pipeline value in the CSV should match an existing HighLevel pipeline. If you include a stage, that stage should already exist in that pipeline.
If the names don’t match exactly, opportunities can land in the wrong place, or the row can fail.
Other setup worth doing first
Add the users who will own contacts and opportunities. If you use tags or custom values, create those too. Pause automations and campaigns that could email a newly imported contact by accident.
How HighLevel’s CSV import expects the file
HighLevel supports a contacts import, an opportunities-only import, and a contacts-and-opportunities import. Choose based on whether the contacts already exist.
- Contacts only when you’re loading people first.
- Opportunities only when the contacts are already in HighLevel. Each row currently needs a valid Contact ID, Opportunity Name and Pipeline.
- Contacts and opportunities together when you still need to create the people the deals belong to.
To update an existing opportunity instead of creating a new one, include the existing Opportunity ID and map it. Without it, HighLevel may create a second opportunity. If a later update file has blank cells, HighLevel has a “Don’t update Empty Values” option so blanks don’t wipe data that’s already there.
Completed imports do not have a one-click undo. HighLevel says to test with a small sample and review your mappings before you process a large file. If some rows fail, you can find them under Bulk Actions, then Show Stats and the Error tab.
Try it on 250 records, free
We’ll move up to 250 of your real records into your new CRM so you can open them, poke around, and decide. It’s free. One per company, approved by our team, and we’ll need your work email.
Choose how to load the spreadsheet
HighLevel’s own import tool
This is the built-in path, and it’s the right choice if you’re comfortable mapping columns yourself and you’ve already created the fields and pipelines. You’ll upload the CSV, map each column to a HighLevel field, and records are written when the import runs. There isn’t a one-click undo, so the sample file matters.
Carryrow
With Carryrow, you upload the spreadsheet, and every column is shown with a few real values next to it and the HighLevel field it will go into. You can point a column somewhere else, drop it, or skip rows missing a value. Nothing is written until you accept the map.
Then we write the records into HighLevel using access you create there. We never ask for a password to the system the file came from, and you can delete the HighLevel access the same day. The price follows the number of records in your file, from $129 for up to 5,000 rows. See CRM migration pricing and how a move works.
If the spreadsheet came from HubSpot, our HubSpot to GoHighLevel guide covers that move in more detail. For the broader process, see the CRM migration checklist. If you’re comparing tools, we also wrote an honest look at Carryrow, Import2 and HubSpot’s built-in importer.
Test with a sample, then import everything
Start with a small file that includes your hardest rows: contacts with no email, opportunities in unusual stages, custom fields filled in, and at least one contact with more than one opportunity if that’s a real case for you.
Open each record in HighLevel and check:
- Names, emails and phone numbers are right
- Custom fields hold the values you expected
- Opportunities are in the right pipeline and stage, with the right amount
- Each opportunity is attached to the right contact
Fix the map or the sheet, run the sample again, then run the full import. Compare your spreadsheet counts with what HighLevel shows for contacts and opportunities before you go live.
After the import
Tell the team HighLevel is now the system of record. Turn automations back on one at a time. Keep the spreadsheet and a copy of the field map somewhere safe.
If some rows failed, download the error log from Bulk Actions, fix those rows, and import only the corrections. Don’t re-import the whole file unless you know how you’ll avoid duplicates.
Spreadsheet to GoHighLevel import FAQ
Do I have to create pipelines before I import opportunities?
Yes. HighLevel’s documentation says to create the pipelines and stages first. The names in your CSV have to match what already exists in HighLevel.
Do custom fields have to exist before the import?
Yes, if you want those columns to land somewhere. Create them first, then map each column.
Can I import opportunities without contacts?
Only if the contacts already exist. An opportunities-only import currently needs a valid Contact ID, Opportunity Name and Pipeline on each row.
Can I undo a HighLevel import?
No. HighLevel does not provide a one-click rollback. Test with a small sample first.
Do you need my HighLevel password?
Not with Carryrow. You upload the spreadsheet yourself, and you create the HighLevel access.
Can I test the import before paying?
Yes. Carryrow offers a free sample of up to 250 records from a spreadsheet into GoHighLevel. It’s one per company and approved by our team.
Check your own data before you pay for the move
Ask for the free 250-record sample and we’ll move a slice of your real data into the new CRM first. One per company, approved by our team, work email required. If you’d rather skip ahead, upload your export and start mapping.

