How Do You Migrate from HubSpot to GoHighLevel?
How to move contacts, companies, deals, tasks and pipelines from HubSpot into GoHighLevel with the native HubSpot Importer, including the October 2026 date filters, step-by-step setup, error fixes and what the importer doesn't cover.
DRGHL
GoHighLevel developer

Short answer: GoHighLevel now has a built-in HubSpot Importer. From Contacts, Companies or Opportunities, open Import → Import data → Connect HubSpot, sign in, then choose which objects to bring over (contacts, companies, deals, tasks) along with notes, emails, custom properties and pipelines. The October 2026 update adds Created Date and Last Modified Date filters, so you can import only active or recent records instead of years of stale data.
What does the GoHighLevel HubSpot Importer bring over?
Before this importer, a HubSpot migration meant CSV exports, spreadsheet clean-up and a lot of manual re-linking. The native importer connects to HubSpot with a sign-in and brings data across with its associations:
| HubSpot object | Lands in HighLevel as | Notes |
|---|---|---|
| Contacts | Contacts | Related notes and emails come with them |
| Companies | Companies | Properties and associations preserved |
| Deals | Opportunities | Pipelines and stages recreated; contacts required |
| Tasks | Tasks | Up to 10 linked records per object type; recurring tasks not supported |
| Notes | Notes | One record per object type; not linked to Companies |
| Emails | Read-only email history | View only, can't reply from the imported thread |
| Contact & deal properties | Custom fields | Mapped by internal key |
| Pipelines & stages | Opportunity pipelines | No need to rebuild by hand |
The importer doesn't cover everything. HubSpot workflows, sequences, landing pages, forms, lists and reports aren't migrated. Owner mapping isn't documented either, so plan to reassign record owners in HighLevel afterwards. For those, follow HighLevel's manual migration guide or rebuild them as GHL workflows and funnels.
What changed in October 2026?
The October 22, 2026 changelog added date filters at the preview step. You can now filter any object (or all objects at once) by:
- HubSpot Created Date or HubSpot Last Modified Date
- Relative values: Today, Yesterday, This week/month/quarter/year
- Exact dates: On, Before, After, Between
- Rolling ranges: In the last / In the next / More than / Less than N days, weeks, months or years
- Nested AND/OR conditions for more precise slices
This matters because most HubSpot portals hold thousands of contacts nobody has touched in years. "Last Modified in the last 24 months" is often the difference between a clean CRM and paying to store dead data. One detail to remember: rolling ranges like "In the last 7 days" exclude today and count back from yesterday.
Filters for owner, lifecycle stage and other properties aren't available yet.
How do you migrate from HubSpot to GoHighLevel step by step?
1. Prepare both sides
- Use a fresh or test sub-account for the first run. HighLevel recommends testing in a non-production location.
- In the HighLevel sub-account, temporarily turn on Allow duplicates for Contacts and Opportunities so records aren't blocked mid-import. Turn de-duplication back on afterwards.
- Set the account language to English during the import (recommended).
- In HubSpot, merge duplicates, archive junk and export a backup.
- Check custom properties whose internal name and label differ. Align them, because the importer maps by key and can misread mismatched fields.
2. Connect HubSpot
- Go to Contacts, Companies or Opportunities in the sub-account.
- Open Import (top right) → Import data.
- Click Connect HubSpot and authenticate with the HubSpot portal.
- Review the quick tips on Get started and click Continue.
3. Pick objects and properties
Select Contacts, Companies, Deals and/or Tasks. Choosing Deals auto-selects Contacts, because an opportunity can't exist without one. Use the property picker to leave out fields you don't need. A smaller custom field list is easier to maintain.
4. Filter and preview
On Preview and import, check the estimated counts for each object. Click the pencil icon to add date filters per object, or use Apply filters to all objects. Association counts are estimates and may drop slightly in the final run.
5. Run and monitor
Click Confirm and start import. The job runs in the background. Open Import history to watch the processing percentage, then click the stats icon under Actions to see Import details in Object view or Record view.
6. Fix the errors
In Record view, filter Status to Error and download the CSV. Common fixes are renaming a conflicting custom field key, removing file attachments that block a record, or linking a contact to an orphan deal in HubSpot. Then run a new import. Each run is logged separately, and imports are additive, so existing records aren't overwritten.
How should you handle what the importer can't move?
A clean migration plans for the gaps:
- Workflows and sequences. Rebuild them as HighLevel workflows. Map HubSpot lifecycle stages to tags or pipeline stages first, so triggers have something to fire on.
- Forms and landing pages. Recreate them in HighLevel funnels and forms, then update embeds on the client's website.
- Owners. Use bulk actions or a workflow to assign users once the data is in.
- File attachments. The troubleshooting notes say records with file attachments can error. Detach files in HubSpot, import, then re-attach the important ones.
- Ongoing sync. If the client needs HubSpot and HighLevel running side by side for a while, the importer is a one-off tool, not a sync. That calls for a custom integration on the HighLevel API v2 with OAuth 2.0, using webhooks for new and updated records. It's the same pattern we describe in our GoHighLevel to PostgreSQL sync guide.
Common pitfalls
- Importing into a live account first. Duplicates are hard to unpick. Always do a test run.
- Forgetting "Allow duplicates." If de-duplication is on, records get skipped and associations break.
- Custom field key collisions. If a HighLevel field already uses the same key, that field errors for every record.
- Orphan deals. HubSpot deals with no contact are skipped. Associate them before importing.
- Deleting and re-running. If you delete imported contacts and run the import again, they come back. Restoring the deleted ones later then creates duplicates.
- Calculated properties. These arrive as single-line text and won't keep recalculating. Rebuild the logic with workflows or custom values if you need it.
- Expecting the 7-day filter to include today. It doesn't. Use "Today" as a separate OR condition if you need it.
FAQ
Does the HubSpot Importer overwrite existing GoHighLevel contacts?
No. Imports add records alongside existing ones and never overwrite them, which is why testing in a clean sub-account is recommended.
Can I import only recent HubSpot contacts into GoHighLevel?
Yes. Since October 2026 you can filter by HubSpot Created Date or Last Modified Date, using relative, exact or rolling ranges, before you start the import.
Does it migrate HubSpot workflows or email sequences?
No. The importer moves CRM data (contacts, companies, deals, tasks, notes, emails, custom fields, pipelines). Automations need to be rebuilt as HighLevel workflows.
Can I keep HubSpot and GoHighLevel in sync after the import?
Not with the native importer, which is a one-time migration. Ongoing two-way sync needs a custom integration built on the HighLevel API v2 with OAuth 2.0.
Moving a client off HubSpot?
DRGHL plans and runs HubSpot-to-HighLevel migrations for agencies. That covers data mapping and test imports, rebuilding workflows and pipelines in HighLevel, and custom API v2 sync when both systems have to run in parallel. Talk to DRGHL and we'll scope the move.
Related questions
- What does a GoHighLevel developer do?
- GoHighLevel to PostgreSQL: how to sync GHL data
- How do you hire a GoHighLevel developer for Marketplace Apps and automations?
Sources: Import data from HubSpot · Changelog: Import data directly from HubSpot into HighLevel
Comments
Topics

