Why "just export and import" fails
Exporting a CSV from the old CRM and importing it into GoHighLevel sounds like the easiest technical step in the whole process. In practice, two things break quietly here, without announcing themselves. First, any custom field with no matching field pre-created in GoHighLevel drops silently on import - no error, it just vanishes. Second, and more important: workflows never carry over on import, under any circumstance - they're logic that only exists in the source system, and every one has to be rebuilt by hand in the destination. A business that plans to "move a file and keep working" usually discovers both problems in the first week after cutover, when new leads stop getting any automated response at all.
Before you move anything - audit the data
A contact database doesn't stay accurate over time. According to HubSpot's database decay simulation, an average marketing database decays at roughly 22.5% per year - people change jobs, phone numbers, and email addresses, and opt out of lists (source: hubspot.com). The practical consequence: a blanket import of "everything that was ever in the old system" doesn't just move relevant leads - it also moves roughly a quarter of records that are already stale, and you usually find out only when an SMS bounces back as "invalid number" or an email comes back as a hard bounce.
- Set an activity cutoff - for example, only contacts with an interaction (a call, an opened email, a new lead) in the last 12-24 months.
- Flag contacts with no valid phone or email for a separate review, not automatic import.
- Don't carry old tags and statuses over as-is - check whether they still fit the new pipeline structure.
What must be mapped before the first import
Every custom field in the old system needs a matching field in GoHighLevel, with a matching data type (text, date, single-select), before you upload a single CSV. It's worth creating the pipeline stage names in advance to mirror the source system's stages, so open deals map straight into the right stage instead of all landing in a default "stage one." Multi-select fields usually migrate more cleanly as separate tags than as a single custom field.
Run an overlap - not a one-shot switch
The safer migration isn't "shut down today, open tomorrow" - it's a planned overlap. Run both systems for a window of time: new leads flow into both, you confirm the new GoHighLevel automations actually fire (SMS, email, a follow-up call), and only after you see that working correctly on real data - not just a test record - do you cut off access to the old system. A week or two of overlap is far cheaper than a single lead disappearing mid-switch.
What never migrates automatically, and why ignoring it costs money
- Workflows - must be rebuilt from scratch; no import carries logic over.
- SMS-sending phone numbers - if you're switching providers, there's a separate A2P 10DLC registration step that has to clear before your first automated message, or carriers block the messages outright (see the related article below).
- Email sending health - a new sending domain or a DNS change can genuinely hurt deliverability if SPF, DKIM, and DMARC aren't set up in advance.
- Consent records held by a previous vendor - if documented consent isn't carried over to the new system, that's also a GDPR/CCPA record-keeping question, not just a technical one.
Cutover day checklist
- Every form on the site points to the new system's correct webhook/API endpoint.
- Phone numbers and WhatsApp Business numbers are ported and active in the new system, not just "configured."
- The old system stays available read-only (not deleted) for at least 30-90 days, in case you need to check an old record.
- The team knows exactly where a new lead lands from now on - with no habit of also checking the old system.
Planning a move to GoHighLevel?
We build businesses a structured migration plan - field mapping, pipelines, and automations - so the overlap between systems doesn't cost you even one lead.
Get started