Super Migrator — How to import your contacts and conversations
Contacts · two imports · about 15 minutes plus processing time

Import your contacts.
Then their conversations.

Super Migrator does not paste contacts. It exports them as two CSV files and you bring them in with HighLevel's own importer, which handles duplicates and lets you check every column before anything is written. Two files, two imports, in this order.

1
contacts.csv
Every contact with their name, email, phone, address, tags, custom field values and notes. Import this first.
2
contact-conversations.csv
One row per contact that has a conversation: name, phone, email, and the full transcript. Import this second, as a note on each contact.
⚠ Do this before either import

Paste Tags and Custom Fields into the destination first (the extension's Paste all already runs them early, so check those two rows say created or verified). The importer matches custom field columns to fields by name. If the field doesn't exist yet, the column has nowhere to go and the importer will skip it.

0

Find the two files

~1 min

Both land in your browser's Downloads folder when the Contacts (CSV) row finishes.

a
Look for contacts.csv and contact-conversations.csv

They download a moment apart. The first time, Chrome may ask whether this site can download multiple files. Say yes. If you said no, run the Contacts (CSV) row again.

b
Only one file? That's normal in one case.

The second file is only written when at least one contact has a conversation. A location with no SMS, email or chat history produces contacts.csv alone.

c
Don't open the files in Excel and re-save them

Excel likes to reformat phone numbers and dates on the way out. If you want to look inside, open a copy, and upload the original to HighLevel.

1

Import contacts.csv

~10 min

In the destination sub-account: Contacts → the import icon at the top of the list (Import Contacts) → upload contacts.csv → Next. You'll get a screen that lists every column in the file and asks what to map it to.

a
Map the columns

The file carries HighLevel's raw contact record, so there are more columns than you need. Map the ones below and leave everything else unmapped. An unmapped column is simply ignored.

Column in the fileMap it to
firstNameFirst Name
lastNameLast Name
emailEmail
phonePhone
companyNameBusiness Name
address1Street Address
cityCity
stateState
postalCodePostal Code
countryCountry
websiteWebsite
sourceContact Source
dateOfBirthDate of Birth (if the column is there)
timezoneTimezone (if the column is there)
tagsTags comma-separated, ready to go
contactNotesNotes creates one note per contact
Columns named after your custom fieldsThe custom field with the same name. HighLevel usually pre-selects these for you. Check a couple to be sure.
contactConversationsLeave unmapped skip The second file handles conversations. Mapping this here can push a very long transcript into a field that wasn't built for it.
id, locationId, dateAdded, dateUpdated, assignedTo, followers, type, contactName, anything ending in LowerCaseLeave unmapped skip These are the old account's internal ids and bookkeeping. They mean nothing in the new one.
Anything else you don't recogniseLeave unmapped skip
b
Set how duplicates are handled

On the next screen, tell HighLevel to match existing contacts on both Email and Phone, and to add new contacts and update existing ones. That way re-running the import later tops up rather than doubles up.

c
Add an import tag, then start it

The importer offers to tag everything in this batch. Use something like migrated-2026-09. It costs nothing and makes it easy to find, or remove, this exact batch later. Then click Import. HighLevel runs it in the background and emails you when it's finished. Progress shows under Contacts → Bulk Actions.

d
Spot check three contacts you know

Open them in the destination. Name, phone, tags and custom field values should all be there, and the Notes tab should hold their old notes. If notes are missing, contactNotes was left unmapped. Re-run the import with just email, phone and contactNotes mapped and it will attach them to the existing contacts.

2

Import contact-conversations.csv

~5 min

Same importer, same place. This time you're only adding one thing to contacts that already exist: their conversation history, as a note.

a
Map only three columns

Email and Phone are there so HighLevel can find the right contact. Conversations is the transcript.

Column in the fileMap it to
EmailEmail
PhonePhone
ConversationsNotes one note per contact, the whole transcript
First Name, Last NameLeave unmapped skip The contact already has a name from import 1. Mapping these does no harm, it's just not needed.
b
Match on both Email and Phone. Update existing only.

This is the one setting that matters here. Many contacts have a phone and no email, so matching on email alone would miss them. And if the importer is allowed to create new contacts, any row it can't match becomes a duplicate with nothing but a note on it. Pick update existing contacts and make sure create new is off.

c
Import, then open a contact who used to text you

Their Notes tab now holds a note with every message in order, each one stamped with the date, the direction and who wrote it. It reads like this:

[Aug 14, 2026, 09:12 AM CST · IN · Maria Lopez] Hi, is Friday still open for a bath and trim? || [Aug 14, 2026, 09:20 AM CST · OUT · Jo-Anne] It is. 2pm work for you? || [Aug 14, 2026, 09:21 AM CST · IN · Maria Lopez] Perfect, see you then

A contact with more than one conversation (say an SMS thread and an email thread) gets them one after the other in the same note, separated by ||||.

3

What lands, and what can't

Contacts, tags, custom field values, notes and full conversation transcripts all arrive on the new contact record.

Anyone opening the contact sees who they are, how they were tagged, and everything that was ever said to them.

The transcript does not appear in the Conversations inbox.

HighLevel has no way to import messages into a conversation thread, from any tool. The history lives in Notes instead. Reply to a migrated contact and a fresh conversation starts, with their past in the Notes tab next to it.

Old notes come across as one note, not several.

Every note the contact had is in there, each with its date and author, but they are joined into a single note separated by ||. That's a limit of what the importer accepts per row.

Assigned user, DND status and opportunities don't travel this way.

User ids belong to the old agency. Set assignment in the destination with a workflow or a bulk action after the import. Pipelines migrate with the extension; opportunities do not.

Import rejected the file, or the counts look wrong?

Reply to your licence email with a screenshot of what the importer said and we'll sort it with you. Then finish up with the post-migration checklist.