A HubSpot migration is a one-way door. Once your team works in HubSpot and the old system is off, anything that didn't come across properly is gone, or expensive to fix. Notes lose their dates. Contacts lose their companies. People who unsubscribed years ago get your newsletter again.
This is the step-by-step method I use to migrate to HubSpot from Insightly, Mailchimp, spreadsheets and Access databases, for businesses in Wollongong, the Illawarra and across Australia. It covers the data side of the move. For the setup decisions (objects, pipelines, lifecycle stages, permissions), read the HubSpot implementation guide first.
Step 1: decide what moves and what dies
Start with a decision, not an export. Every record and field you bring across costs time to map, money in contact fees and clutter in every search. A migration is the cheapest chance you will get to leave the junk behind. Go through the old system type by type with the people who use it. My default calls:
| Data | Default | Why |
|---|---|---|
| Active contacts and companies | Move | The core of the CRM. Cleaned on the way in. |
| Open deals | Move | With stage, amount, owner and close date, or the pipeline report is wrong on day one. |
| Won and lost deals | Move the years you report on | Revenue history and win rates need them. |
| Notes, calls and emails | Move, with original dates | The history your team misses first. |
| Custom fields | Only if used | Empty on almost every record means it stays behind. |
| Junk, test records, hard bounces | Leave | Kept in the archive export, not in HubSpot. |
| Unsubscribes and opt-outs | Always move | Even when the rest of the record stays behind. |
| Old automations | Rebuild | They don't export. Rebuild the ones worth keeping as HubSpot workflows. |
Write the decisions down and get the business owner to sign them off.
Step 2: audit and clean the source data
Take a full export and look at what is really there. Count records, check fill rates, find duplicates and note which fields feed forms, reports or integrations. Each source has its own habits:
| Source | How the data comes out | What to watch for |
|---|---|---|
| Insightly | Record exports, plus the API where the export falls short | Projects need a home in HubSpot. Check notes and record links came out intact. |
| Mailchimp | Audience export, split by status | Unsubscribed and cleaned contacts come out separately. Tags and groups become properties. |
| Other email platforms | Contact export and the suppression or do-not-contact list | Forms live on your website and must be swapped on cut-over day. |
| Spreadsheets and Outlook | The files themselves | Several versions of the truth and inconsistent spelling. |
| Access databases | Tables and queries exported to CSV | Related tables need joining. Often one person understands it. |
| Zoho and other CRMs | Exports or API | Same method. Check early whether you need that platform's admin. |
Then clean, in the export, not after the import. Merge duplicates, standardise values and park dead records. Cleaning a spreadsheet is fast. Cleaning inside HubSpot is slow and risky. The method is in the CRM data clean-up guide, and very rough data may need a dedicated data clean-up first.
Merge across sources too. The person in your Mailchimp audience and your sales spreadsheet is one contact. Match on email, then name plus company, and decide which source wins for each field.
Step 3: map objects, properties and associations
The field map is the most important document in the project. Every old field gets a destination, a transformation or a polite goodbye, and someone who knows the business signs it off before anything moves. Example object mapping:
| Old system | Becomes in HubSpot |
|---|---|
| Insightly contacts | Contacts |
| Insightly organisations | Companies, with domain as the key |
| Insightly opportunities | Deals, with stages mapped to the new pipeline |
| Insightly projects | A delivery pipeline, tickets, or a custom object on an Enterprise tier |
| Mailchimp tags and groups | Contact properties or lists you can segment on |
| Access products and prices | Products in the product library, ready for quotes |
Then properties
- Dropdown values must match. HubSpot rejects values that don't match an option, so "NSW", "N.S.W." and "New South Wales" become one value first.
- Check the date format. 03/04/2021 is March or April depending on who is reading. Pick day-month-year in the import every time.
- Keep the old record ID in a property such as "Legacy CRM ID". It links records across files, lets you rerun an import as an update, and traces any record back to its source.
- Tag the source and batch. A "Migration batch" property shows exactly what one import touched.
Then associations
Associations link records: contact to company, deal to company, note to all three. Import companies, then contacts, then deals, then activities. HubSpot's import can link two files through a shared column, such as company domain or your legacy ID. Check the links on the test import, not after go-live.
Step 4: keep the history
History is what your team misses first and what careless migrations drop first. My rules:
- Timeline, not a text field. Notes, calls and emails become timeline activities, not one giant "Old notes" property.
- Original dates. Each activity keeps its original date and who logged it, so the timeline reads in order.
- Right records. Each activity links to its contact, company and deal, and files land on the record they belong to.
- API where the import tool stops. Where the import tool falls short, I use the HubSpot API, which can set each activity's original timestamp.
- A fallback. What can't move cleanly is archived as a file on the record, and the old system stays read-only for a while.
Decide how far back to go. Open-by-open email logs from Mailchimp usually become summary properties, such as last engaged date.
Step 5: owners and users
HubSpot matches record owners to its users. Get this wrong and views, task queues and reports are wrong from day one.
- Create users first, with teams if you use them.
- Build an owner map: old system user, their email, their HubSpot user. "Sam S" and "Samantha Smith" might be one person.
- Decide on former staff. Reassign their records by a clear rule (territory, account, round robin). If the history matters, keep the original owner's name in a text property.
- Check after import. Filter for unowned records. Anything with an open deal or recent activity needs an owner.
Step 6: unsubscribes, bounces and consent
This step has legal teeth. Under the Spam Act 2003 you need consent to send commercial email, and when someone unsubscribes you must stop. Changing CRM doesn't reset that. A migration is the easiest time to break it by accident: the unsubscribe flag stays in Mailchimp or the old email tool, the contacts arrive fresh in HubSpot, and the next newsletter goes to everyone.
- Export unsubscribes separately. Mailchimp splits them out by status. Other email tools usually keep a suppression or do-not-contact list. Elsewhere, look for an opt-out field or a list someone kept by hand.
- Import them as opted out before any email goes out, using the opt-out option in HubSpot's import. Do it even for people you are not otherwise bringing across.
- Treat hard bounces the same way. A burst of bounces hurts deliverability for everyone else.
- Import as non-marketing by default. Set marketing status only on people you may email and plan to. You don't pay for contacts you never mail.
Step 7: run a test import
Never make the real import your first one. Run a test, have people who know the customers check it, fix the map and rerun until it is boring. Pick the test set on purpose:
- Your 20 biggest customers. Your team knows them and will spot problems fast.
- A company with many contacts and deals, and a record with years of notes.
- Someone who unsubscribed, someone whose email bounced, and records owned by former staff.
- The odd ones: overseas addresses, two companies with the same name, contacts with no email.
Use a sandbox if your HubSpot tier has one. If not, tag test records by batch so you can find and delete them cleanly. Check counts, associations, owners, timeline dates, dropdown values, amounts and subscription status. Read the import error file every time.
Step 8: plan the cut-over
Pick a quiet window, such as a Friday afternoon or a weekend. Avoid month end, end of financial year and your busy season. A typical plan:
| When | What happens |
|---|---|
| Two weeks before | Field map signed off. Final test checked. Training booked. New forms tested on a staging copy of the website. |
| One week before | Date announced. No new fields or bulk edits in the old system from here. |
| Cut-over day | Old system frozen. Final export of changes since the test, then import. Forms swapped. Email, calendar, phones and integrations reconnected. |
| Next working day | Team works in HubSpot. Old system set to read-only. |
| 30 to 90 days after | Archive export stored safely. Old subscription cancelled. |
Switch workflows on last. When HubSpot asks whether to enrol existing records, think hard before saying yes, or a welcome sequence fires at thousands of people you met years ago.
What to check after go-live
Day one
Record counts match the export, minus what you chose to leave. Submit every website form and check where it lands.
Week one
Compare 20 customers with the old system, field by field. Run the pipeline report in both and compare totals.
Week two
Check opted-out and bounced counts before the first campaign. Look for new duplicates from integrations.
Month one
Check reps are logging in HubSpot, not their inbox. Share the field map so "where did X go?" has an answer.
Already live and something feels off? A HubSpot health check ($1,950, fixed price) finds what broke in the move and gives you a ranked fix list.
Common HubSpot migration mistakes
- Importing before the portal is designed, so the old fields become your HubSpot property model, mess included.
- No legacy ID, so you can't rerun an import or trace a record back.
- Australian dates read as US dates, so close dates land in the wrong month.
- Unsubscribes left behind in Mailchimp or the old email tool.
- Workflows switched on before the import, emailing years of old contacts.
- The old system turned off on cut-over day, with no read-only fallback.
How long a HubSpot migration takes and what it costs
A single-source migration typically takes 2 to 4 weeks from audit to cut-over. Several sources, years of email history or custom objects push it to 4 to 8 weeks. The data work is rarely the slow part. The decisions are.
| Service | What it covers | Price |
|---|---|---|
| HubSpot migration | Audit, field map, clean-up, test import, cut-over and training. Fixed quote after I've seen your data. | From $7,500 |
| HubSpot implementation | A new portal designed around how you sell, quoted with the migration | From $9,500 |
| HubSpot health check | Already migrated and it went badly. Ranked fix list and walkthrough. | $1,950 fixed |
| Data clean-up | When the data needs serious work before any move | From $4,500 |
All prices AUD. HubSpot licences are paid to HubSpot directly. Price depends on sources, record volume, history and integrations.
FAQ
How long does it take to migrate to HubSpot?
Typically 2 to 4 weeks for one source system, from audit to cut-over. Several sources, years of email history or custom objects push it to 4 to 8 weeks.
Can we do a HubSpot migration ourselves?
For one clean spreadsheet of contacts, yes. Once you have history to keep, linked records, several sources or unsubscribes to protect, DIY imports usually go wrong.
Will we lose our notes and email history?
Not if it is done properly. Notes, calls and emails come across as timeline activities with their original dates, on the right records, and the old system stays read-only as a fallback.
What happens to our Mailchimp unsubscribes?
Every one comes across and is set as opted out in HubSpot before any email goes out. Under the Spam Act you can't email people who have unsubscribed, and changing CRM doesn't change that.
Can you migrate from Zoho or another CRM?
Yes, as a source system, using the same method from its exports or API. If getting the data out needs that platform's admin, I'll flag it in the audit.
Should we clean our data before migrating?
Clean it during the migration, in the export, before anything reaches HubSpot. If the data is in very rough shape, a data clean-up may come first.
Next steps
Do Step 1 this week: list what is in your old system and decide what deserves to move. The free CRM Migration Checklist in the sidebar has every step as a printable list. If you want it done once and done properly, see how I run a HubSpot migration, or tell me what you're moving from. I work on site in Wollongong and across the Illawarra, and remotely Australia-wide.