A self-managed HubSpot migration is possible when the source data is understood, the scope is limited, and someone can own testing. The difficult part is rarely uploading a spreadsheet. It is preserving relationships, consent, ownership, and the reports that teams rely on. Use this checklist to decide whether to do the work internally and to make the result verifiable.
Decide whether DIY is appropriate
List every source system, object, record count, integration, form, workflow, and reporting dependency. Identify who can explain the current data and who can sign off on the new process. A straightforward import of contacts and companies may be manageable internally. Complex custom objects, bidirectional integrations, regulated data, or a live revenue process with little downtime call for specialist design or at least an independent rehearsal review.
Set acceptance criteria before moving data: the required fields, acceptable error count, expected associations, and sample reports that must reconcile. Save an untouched export and the source system's field dictionary. Do not rely on a screenshot of a final record count as proof of a successful migration.
Map and clean the data
For each object, map old fields to HubSpot properties and document transformations. Decide which values are historical facts and which are operational statuses that may change after cutover. Agree on unique identifiers before deduplicating. Check whether contacts, companies, and deals have stable keys and whether relationships survive the move.
Review marketing consent separately from sales status. Do not infer permission to email from the existence of a contact. Keep evidence of opt-in and suppression lists. HubSpot's import file requirements describe headers, file formats, and matching behavior; check them against the current portal before building a large import.
Rehearse with a small, difficult sample
Choose records with duplicates, multiple company relationships, long notes, unusual dates, and missing fields. Import the sample into a controlled environment or test segment. Verify field values, associations, owners, and record links. HubSpot's import overview includes tools for reviewing import errors. Document each fix and repeat the sample until results are predictable.
Test dependent workflows and reports with that same sample. A correct record can still trigger the wrong automation if an enrollment rule assumes a different lifecycle value. Pause or adjust automations during bulk import according to a written cutover plan.
Cut over with a recovery path
Freeze source changes for a defined window, capture a final delta, and reconcile source and destination counts by object and state. Check a random sample of records and every high-value account. Confirm forms, lead routing, integrations, and key dashboards before declaring success. Keep the source read-only until the team no longer needs it for recovery or historical reference.
Assign one owner for the go/no-go decision and one for technical recovery. If acceptance fails, stop new writes where possible, preserve the import log, and return to the known-good process while the mapping is corrected. The migration is complete when users can trust the new records and can explain how they got there.



