Operelio
CRM imports & cleanup24 min read

CRM migration: a step-by-step checklist

A CRM migration moves your contacts, companies and deals into a new CRM with the links between them intact. Export each record type with its IDs, clean and map the files, load companies, then contacts, then deals, and check the counts before you switch the old CRM off.

By Operelio team · Updated October 27, 2026

On this page21
  1. 1.What CRM data migration is
  2. 2.CRM migration checklist
  3. 3.What gets migrated, and what needs work
  4. 4.What else moves in a CRM migration besides the data
  5. 5.Who does what in a CRM migration
  6. 6.How long does a CRM migration take?
  7. 7.Four ways to migrate CRM data
  8. 8.When to hire a CRM migration service
  9. 9.Moving to HubSpot: Smart Transfer or the importer
  10. 10.Plan the migration: what goes and what stays
  11. 11.Step 1: Export your CRM data with record IDs
  12. 12.Step 2: Check data quality before you migrate
  13. 13.Step 3: Clean the data before it moves
  14. 14.Step 4: Map the fields to the new CRM
  15. 15.Step 5: Run a test batch
  16. 16.Step 6: Import contacts, companies and deals in the right order
  17. 17.If the import goes wrong: how to roll back
  18. 18.Step 7: Validate the imported data
  19. 19.Step 8: Cut over and catch up
  20. 20.After the migration: the first two weeks
  21. 21.Frequently asked questions

What CRM data migration is

CRM data migration is moving records out of one CRM and into another: contacts, companies and deals, the fields on them, and the links between them, so a contact still belongs to its company and a deal still belongs to both.

It is one part of a CRM migration. The other is rebuilding what the data sits inside, such as pipelines, automations, reports and permissions, which don't travel in an export.

This guide covers the data move from the export to the first two weeks in the new CRM, what gets rebuilt around it, who does what, and when a migration service is worth paying for. The risks are in Risks of migrating your CRM. Cleaning and enriching the data while it is out of both systems is in The hidden gap in migrating your CRM data.

CRM migration checklist

Work through this list as you go, and run down it again before cutover. Each line has its step further down the page.

CheckWhy it matters
An owner named, and a tester picked from each teamSomeone has to decide what moves and sign off the test batch, and the people who use the records spot wrong values fastest
Original exports saved somewhere safe, and a way to undo a load agreedThe section on rolling back, further down, says how
Cold, bounced and test records left in the archiveRecords nobody will use slow the migration and clutter the new CRM
History and notes plan agreedField data moves through Operelio; activity history does not. Decide before cutover how, or whether, history moves
Users, custom fields and pipelines set up in the new CRMOwner columns need someone to land on, and a mapped column needs a field to land on
Every workflow and automation in the old CRM listedNone of them comes across in an export. The list is what you rebuild from
Old record IDs kept in every fileThey are how contacts, companies and deals link up again in the new CRM
Data Health Check score recordedIt gives you a before and after score to compare once the data is clean
Duplicates removed: contacts on email, companies on website or nameEvery duplicate you migrate becomes a duplicate to clean up inside the new CRM later
Every required field of the target mappedThe CRM Formatter won't continue until every required field is mapped. It doesn't flag a required value left blank in a row, so filter each required column for blanks before you import
Opt-out and do-not-contact status mapped, and the files screened against your email suppression listWithout both, you contact people who asked you not to
Small test batch run end to endIt catches mapping errors while they are still quick to fix
Record counts checked after the loadA gap between what you sent and what arrived is cheapest to fix the same day
Cutover date set and the catch-up plannedWithout both, records created during the switch end up in only one of the two CRMs
Forms and integrations repointedAnything still pointed at the old CRM keeps creating records there after cutover

What gets migrated, and what needs work

A CRM export is rows and columns, so anything that is a row can move in a file. Anything that isn't needs the new CRM's own migration tooling, a migration service or rebuilding by hand.

DataMoves cleanly?How it gets across
CompaniesYesExport, clean, then import or push. Load them before contacts
ContactsYesExport, clean, then import or push
Opt-out and do-not-contact statusYes, once mappedMap it to the new CRM's subscription or consent field, and check the counts match after the load
DealsNeeds work: keep the IDsThe new CRM's importer (Data Loader on Salesforce), with company and contact IDs so each deal links to its records
OwnersNeeds work: create the users firstCreate the users in the new CRM first, then map the column to the owner field
NotesPartly, as a notes columnAs a column. A push attaches it as a note on the HubSpot contacts and Pipedrive people and organizations it creates. A Salesforce push attaches no notes
Activity history and logged emailsNeeds workSome CRMs export activities as their own files, and some importers take them back: HubSpot imports notes, calls, emails, meetings and tasks. Otherwise, the new CRM's migration tooling or a migration service
AttachmentsNo, not in a fileThe new CRM's migration tooling or a migration service
Automations, reports and pipelinesNo, rebuiltRebuilt in the new CRM, or created by its own transfer tool where that covers your old CRM. The next section lists what to rebuild and when

Operelio works on the rows: contacts, companies and the fields on them, and it can open new deals. Deal history, activity history, logged emails, attachments and automations need their own plan, so agree it before cutover.

What else moves in a CRM migration besides the data

Custom fields, pipelines, users, automations, reports, forms and integrations don't travel in an export. Each one is rebuilt in the new CRM, or created by the new CRM's own transfer tool where it covers your old one, and the rebuild needs a list and an owner as much as the data does.

Check that tool before you plan to rebuild by hand. HubSpot's Smart Transfer, for example, creates properties, pipelines and users in HubSpot from your old CRM's settings before it moves the records, for the apps it supports. It also adds a few workflows of its own, to fill dates and fields the two CRMs store differently. HubSpot's list of them for each app has only these, none of your old CRM's automations, so plan to rebuild those.

Operelio moves field data only: contacts, companies and the values on them. None of the rows below is something it does.

WhatWhat happens to itWhen
Custom fields and dropdown optionsCreated in the new CRM, with the dropdown values you settled in the planBefore you map the files in step 4, so each column you keep has a field to land on. HubSpot's importer can also create one as you map
Users, roles and teamsUsers invited, then roles, teams and record visibility set up the new CRM's wayBefore the test batch, so owner columns have someone to land on and testers see what their team will see
Pipelines and deal stagesRebuilt, or created by the transfer tool. Each old stage is matched to a new oneBefore deals load, since every deal needs a stage to land in
Workflows and automationsListed in the old CRM (what starts each one, what it checks, what it does), then rebuilt and tested in the new oneBuilt before the test batch. Switched on at cutover as the old ones are switched off, so nothing runs twice or not at all
Email templates and sequencesTemplates copied across. Who is partway through a sequence doesn't come across in an export, so decide who to enroll againBefore cutover
Reports and dashboardsRebuilt, then checked against the numbers the team knows from the old CRMIn the first two weeks after cutover
Web forms and integrationsRepointed to the new CRM, or rebuilt where a tool has no connection to itOn cutover day, with a test record sent through each one

Who does what in a CRM migration

A migration needs four jobs filled. On a small team two people can hold all of them. What matters is that each job has a name against it before anyone exports a file.

WhoWhat they do
The ownerDecides what moves and what stays, sets the cutover date, and says go or stop after the test batch
An admin who knows each CRMBuilds the fields, pipelines, users and permissions in the new CRM, runs the exports and loads, and repoints forms and integrations. One person can cover both CRMs if they know both
A tester from each teamChecks the test batch on records they know, such as their own accounts, and signs it off before the full load
Whoever trains the teamShows each team its daily work in the new CRM before cutover, then answers questions for the first two weeks

How long does a CRM migration take?

Loading the data takes hours. The weeks go on the work around it, and most of that work is the steps on this page: deciding what moves, cleaning, mapping, the test batch, rebuilding fields, pipelines and automations in the new CRM, then the catch-up at cutover and two weeks of small fixes after it.

Scope sets the length more than the number of records. Contacts and companies on a small team, with someone who knows both CRMs, take weeks. Deals, activity history, custom objects and integrations each add their own work, and that is when it runs to months.

The CRM vendors' own guides give similar ranges. Salesforce's says simple migrations may take a few weeks and larger ones several months. HubSpot's puts a small migration (under 25,000 records, standard objects, few integrations) at 4 to 6 weeks and a mid-sized one at 2 to 4 months. Both sell CRMs, so treat their ranges as rough (both read Oct 14, 2026).

Four ways to migrate CRM data

Which route fits depends on how much data there is, how much history you need and who is doing the work.

RouteBest forWhat it movesCost
Export and import yourselfContacts, companies and a manageable number of deals, with someone who knows both CRMsAnything that is a row in an exportIncluded with both CRMs. The cost is staff time
A migration tool or service, such as Import2Moving history as well as records, between CRMs the service supportsRecords, the links between them and history where the CRM pair allows itPaid. Import2 runs a free sample migration before you pay
The APILarge or custom CRMs, or a sync that has to keep runningWhatever both APIs exposeDeveloper time, within the API limits on each side
A consultant or agencyLarge or regulated migrations with processes to rebuild as wellWhatever they scopeDay rates or a fixed project fee

Every route moves records as they are, duplicates and dead addresses included. On the export and import route you clean the files between the two CRMs, which is the part Operelio does. On the other routes, clean the old CRM before the move starts.

When to hire a CRM migration service

Hire one when activity history, logged emails or attachments have to move, or when nobody on the team has the hours and knows both CRMs. If you're moving contacts, companies and a manageable number of deals, and someone knows both systems, the steps on this page are enough.

A service also earns its fee when you have custom objects or many record types linked to each other, or when the data is regulated and someone has to answer for how it was handled. If the new CRM's own transfer tool covers your old one, try that first: HubSpot's Smart Transfer is available on every HubSpot plan, though mapping custom fields with it needs a Data Hub subscription.

There are two kinds. A migration tool such as Import2 connects to both CRMs and copies the records, and their history where the pair of CRMs allows it, after you map the fields. A done-for-you service, from the same vendors or from a CRM partner or agency, plans, maps, runs and checks the move for you. Import2's pricing page lists its tool starting from $499, or free for a small migration a CRM vendor sponsors, and its consultant-run migration starting from $5,000 (read Oct 14, 2026).

Before you sign, ask these four questions.

AskWhy
Can we run a free sample on our own data?You see your own records in the new CRM before you pay. Import2 runs one, and its sample can be reversed
Exactly which records and history move between our two CRMs?It depends on the pair. Get the list in writing for yours: notes, emails, attachments, custom objects
How do records created during the switch get across?Without a catch-up run (step 8), anything added after the main copy ends up in only one CRM
Who cleans the data, and when?Unless cleaning is in the quote, a service moves records as they are. Clean the old CRM before the move, or clean the files between the two CRMs on the export and import route

Moving to HubSpot: Smart Transfer or the importer

HubSpot has two ways in. Smart Transfer (Data Management, Data Integration, Transfer data) connects to the old app and moves records, properties and pipelines across. It covers Pipedrive, Zoho CRM, Dynamics 365, ActiveCampaign, Copper, Mailchimp, Keap, Salesforce, Account Engagement (Pardot), Marketo, Zendesk, Freshdesk and monday.com. Only a Super Admin can run it, mapping custom fields needs a Data Hub subscription, and a transfer can be reverted. It is meant for a one-time move: if you'll keep using Salesforce afterwards, HubSpot says to use its Salesforce integration instead, because running both creates duplicate records.

Smart Transfer moves records as they are, duplicates included, so clean the old CRM before it starts. For any other source, or to clean between the two, use the file route on this page with HubSpot's importer. Its advanced imports take several objects at once and create the associations between them, and it imports calls, meetings, notes and tasks as well as records. HubSpot matches contacts on email and companies on domain, so dedupe both before the load.

Plan the migration: what goes and what stays

Moving everything is the default, and it usually means paying to migrate records nobody will use. Settle these before anyone exports a file.

DecisionWhy it matters
What stays behindLeads that went cold years ago, bounced contacts and test records can stay in an archive export instead of the new CRM
Which fields come acrossList the fields your team actually uses. The rest can live in the archive
How dropdown values mapLead status, lifecycle stage, deal stage, industry and country lists rarely match between CRMs. Decide the mapping value by value. On a push, the preview report flags values a restricted dropdown in the target won't accept, before anything is written
Who owns whatCreate every user in the new CRM first, so owner columns have someone to land on
Who can see whatRoles, teams and record visibility work differently in each CRM. Set them up before the team logs in, or people see too much or too little on day one
What else writes to the old CRMWeb forms, email sync, billing and enrichment tools that create or update records. List each one now, because each needs repointing to the new CRM on cutover day
The cutover dateThe day the old CRM goes read-only. Records created or changed after the main export go across in a final catch-up export

Step 1: Export your CRM data with record IDs

Export each record type as its own CSV: companies, contacts and deals. Every major CRM has a bulk export in its settings or admin area.

Keep each record's ID from the old CRM in the file, along with the IDs that link it to other records: the company ID on a contact, the contact and company IDs on a deal. Store each old ID in a custom field in the new CRM (a unique-value property in HubSpot, an External ID field in Salesforce). Importers use it to link records, and it leads you back to the original later.

Keep the original exports untouched. Every Operelio tool writes a new file and leaves the upload alone, but your own copy is what you roll back to.

Step 2: Check data quality before you migrate

Upload each export and run Data Health Check. You get a quality score from 0 to 100, every issue found (invalid emails, duplicate rows, mixed date formats, placeholder values, encoding problems and dozens more), and every row counted under what it needs: Must fix, Should fix, Tidy‑up or Ready. A score of 80 or above means the file is ready to import, 60 to 79 is worth reviewing, and below 60 the data needs fixing first.

The report tells you what to fix before the move. Re-run Data Health Check on the cleaned file afterwards and you have a before and after score to compare.

A finished Data Health Check in Operelio on contacts_export.csv: 2,988 of 5,875 rows have issues and the score is 72, fair. Ready 2,887, Must fix 967, Should fix 1,919 and Tidy‑up 102, then the first issues to fix.
A Data Health Check of a sample contacts export with made-up names: 5,875 rows, a score of 72, and 2,988 rows to look at before the move.

You can check auto-fix categories right on the report and download a cleaned file.

Step 3: Clean the data before it moves

Start with duplicates. Decide which copy of a record wins before you remove the others. Deduplicate keeps the first or last occurrence, so sort the export by its last-modified column and keep the last occurrence, which is the most recent version. Deduplicate contacts on email and companies on website or name. Smart matching treats Westmarch Trading and Westmarch Trading Ltd as one company, and similarity matching catches typos. Keep the file of removed rows: if a deal points at a removed duplicate's ID, repoint it to the record you kept before you load deals.

Removing a duplicate row in the file drops that row whole. Neither Deduplicate nor the CRM Formatter, which keeps the first row with each email, combines values from the copies, so if the row you drop holds a phone number or a title the kept row lacks, copy it across first.

Merging inside a CRM works differently. In HubSpot, the record you pick as primary keeps most of its property values, the other record fills the properties the primary has empty, and the associations of both carry over. A HubSpot merge can't be undone, so pick the primary with care.

Next, work down the rest of the report. Clean Headers tidies inconsistent column names, and Find & Replace handles fixes that repeat across the file, such as a legacy placeholder value that should be blank.

Finally, check the data is still current. Email verification finds the addresses that will bounce, and Company Active Check finds companies whose website no longer works, so neither goes into the new CRM. Full email verification and Company Active Check are on Starter and up.

Each tool writes a new file, so you can always step back a version if a fix went further than you wanted. The hidden gap in migrating your CRM data covers this stage in more depth, including enrichment.

For a single list rather than a whole CRM, see cleaning data before or after a CRM import.

Step 4: Map the fields to the new CRM

Open the CRM Formatter, upload your cleaned file and pick the target CRM's format. Every plan includes eight built-in formats (HubSpot, Salesforce, Pipedrive, Zoho CRM, monday CRM, Freshsales, Close, Copper) and a Generic format. For anything else, custom templates are on Starter and up. There are also ready-made CRM-to-CRM migration templates (Zoho to HubSpot, Salesforce to Pipedrive and more) that pre-fill the mapping when your move matches one.

Operelio auto-maps columns by name: "First Name", "first_name" and "fname" all land on the first name field. Adjust the rest by hand, picking the column for each native field in your new CRM. If a column has no matching field, leave it unpicked so it isn't forced into the wrong one; it shows under Not used from your file.

Map the old ID column to the custom field from step 1. Unmapped columns are left out of the downloaded file by default, so an unmapped ID column would be lost.

If you migrate in weekly batches, save the mapping after the first run and load it for each later file. Saved mappings are available on Starter (25), Pro (150) and Agency (300).

Before you run it, Review shows every row before and after clean-up. It doesn't list rows with an invalid email, a blank required field or a phone with no digits, so filter for those in the file before you import. A push counts the rows your CRM won't take before anything is sent.

If your workspace has a Do Not Contact list (Starter and up), the CRM Formatter screens each file against it and leaves out anyone on it.

The table below lists the mismatches between two CRMs that fail an import, or load wrong values without an error.

ProblemWhat goes wrongWhat to do
Text field into a dropdownEvery value has to match one of the dropdown's options exactly, so free text typed over the years gets refusedMap the values to the new options in the file first, or map the column to a text field
Multi-select valuesThe old CRM may export them separated by commas. HubSpot and Salesforce both expect semicolonsReplace the separator in the file before loading
DatesThe export uses the old CRM's format or the exporting user's locale, and a date such as 03/04 can load as the wrong month without an errorData Health Check flags mixed date formats. Put every date in one format the target accepts
Full name in one columnThe new CRM wants first and last name as separate fieldsThe CRM Formatter splits full names by default
Country and stateSalesforce orgs with State and Country picklists turned on only accept their own valuesTurn on country normalization in the CRM Formatter and fix state values with Find & Replace. On a Salesforce push, the preview report flags any state or country the org won't accept
Numbers with symbolsA value with a currency symbol or a thousands separator in it is refused by a number or currency fieldRemove currency symbols and thousands separators from number columns
Long textText longer than the target field allows is refused, or cut short if the importer is set to truncateMap long notes to a long text field, or trim them
The CRM Formatter's map step in Operelio with contacts_export.csv going to HubSpot Contacts: Full Name split into First Name and Last Name, and Email, Company, Direct Phone and Job Title auto-mapped to HubSpot fields, each shown with the first value from the file. Mobile Phone has no column picked.
The same 5,875 people, exported with the name in one Full Name column, mapped to HubSpot Contacts. Columns that match a field by name are auto-mapped, and Full Name is split into first and last. This sample has no ID column; map yours to the custom field from step 1.

Step 5: Run a test batch

Pick 50 to 100 rows that cover the awkward cases: a contact with no company, a company with several contacts, an owner who has left, a record with every field filled. Load them, open them in the new CRM and check each field landed where you meant, the links are there and the dropdowns show the right values.

Fix the mapping and run the batch again until it comes through clean. A wrong mapping caught in the test batch takes minutes to fix. After the full load, you have to correct every record it touched. If you load through the CRM's own importer, delete the test records before the full import, or they arrive twice.

Step 6: Import contacts, companies and deals in the right order

Load parent records before the records that hang off them: users, then companies, then contacts, then deals, then tickets and custom objects, then activities and attachments if they are moving. A contact loaded before its company has no company to link to.

For any target CRM, download the import-ready CSV and load it with the new CRM's own importer. This path works for all eight built-in formats, the Generic format and custom templates.

When the target is HubSpot, Salesforce or Pipedrive, you can skip the download and push directly (Starter, Pro and Agency). You connect via OAuth, so your CRM password is never stored.

Push creates records that don't exist yet and updates the ones that do. By default it only fills fields that are blank in the CRM, as the answer to "Will pushing overwrite data already in the new CRM?" below explains.

Before the push, the push card shows three counts that add up to your row count: what will be created, updated or not sent, with the reason for each row not sent, including rows the CRM won't accept. After the push, the report counts Created, Updated, Refused and Not sent. On a migration you can also set the owner from a column in the file, or assign the whole push to one rep, so each record lands with the right owner.

On Salesforce and Pipedrive, a company column on a contacts push finds or creates the company and links the contact to it. A HubSpot push creates contacts and companies but doesn't link them, so if those links matter, load the contacts through HubSpot's own importer with the ID columns.

Deals go in through the new CRM's own importer or a migration service, using the IDs you kept in step 1 so each deal links to its company and contacts. On Salesforce that means Data Loader, because the Data Import Wizard doesn't import opportunities.

CRMRecord types for direct push
HubSpotContacts, Companies
SalesforceContacts, Leads, Accounts
PipedrivePeople, Organizations

If the import goes wrong: how to roll back

Decide how you would undo a load before you run one. The test batch in step 5 is the first line: a wrong mapping shows up on 50 to 100 rows, not on the whole file.

Tag every load. Add a Migration batch column holding the load date to every file, and map it to a custom field. Decide before the load what would make you stop: counts that don't match, missing links, wrong owners. If a batch fails that test, filter the new CRM on its batch value, delete those records, fix the file and load it again.

Use the CRM's own undo where it has one. HubSpot's imports dashboard lists the records each import created or updated, and you can select and delete them there. Pipedrive lets a global admin revert an import from the import history within 48 hours. A HubSpot merge can't be undone, so leave merging duplicates in the new CRM until the counts are signed off.

Deleting undoes only the records a load created. If the new CRM already held records and the load updated them, deleting them loses the originals, so export the new CRM before you load into it. Your untouched exports from step 1 are the copy of the old CRM to start again from.

Step 7: Validate the imported data

Count what arrived against what you sent, for each record type. A push reports how many rows were created, updated, refused by the CRM and not sent. The new CRM's own importer gives you an error file. Compare against the formatted file, not the raw export: the CRM Formatter drops blank rows and repeated emails by default. Every row missing between what you sent and what arrived needs explaining before the team starts work.

Then open a sample of records and compare them with the old CRM field by field, including the owner and the links to companies and deals. When you sign off the migration, record the cleaned file's Data Health Check score next to the step 2 score.

The CRM Formatter's review step in Operelio for contacts_export.csv into HubSpot Contacts: 8 of 18 fields filled from 7 of the file's 9 columns; in all 5,875 rows, clean-up changes 4,300 values and removes 967 rows whose email is already in an earlier row, leaves out 2 unmapped columns, and shows the 4,908 rows that remain with each changed value over what it was.
That file at Review: 967 rows with a repeated email are removed, so 4,908 rows go to HubSpot. Check the CRM's count against 4,908, not the 5,875 in the export.

Step 8: Cut over and catch up

If the team can stop entering data for the move, set the old CRM to read-only when you export and there is almost nothing to catch up. If they can't, freeze it on the cutover date instead, then export everything created or updated since the main export and run it through the same steps. With a saved mapping, that catch-up file maps itself.

If you push the catch-up, choose Overwrite with my data. Its values are newer than the ones you loaded, and the default, Only fill blank fields, would leave the old ones in place. On Salesforce an overwrite with a blank cell clears that field, so check the file has no blanks where the CRM holds a value.

On cutover day, repoint the web forms and integrations you listed in the plan, then submit a test form and check the record lands in the new CRM. Keep the old CRM read-only until the team is working in the new one without going back to check.

After the migration: the first two weeks

Expect questions and small fixes for the first two weeks. Give one person the job of answering them, and keep a shared list of every problem reported: a missing field, a wrong owner, a view that doesn't show what it used to.

Check the things that break without anyone noticing. New leads should be arriving from forms and integrations. Rebuilt reports should show the numbers the team knows from the old CRM. Anyone who opted out since cutover should be marked in the new CRM.

Once the list stops growing, take a final full export of the old CRM and store it with the archive of records you chose not to migrate. Then close the old account.

The CRM Formatter maps, validates and cleans your export for the new CRM in one pass.

Open CRM Formatter

Frequently asked questions

How much does CRM data migration cost?

Exporting and importing it yourself costs your team's time and nothing else. Migration services usually price by how many records move and what moves with them, and most quote or run a sample first. Consultants charge day rates or a fixed fee. Cleaning the data first lowers the bill on any route priced by records, because fewer records move.

What is the difference between CRM migration and CRM integration?

A migration is a one-off move: the data leaves the old CRM, lands in the new one, and the old one is closed. An integration keeps two systems in step on an ongoing basis. A long migration sometimes needs one while both CRMs run side by side, but most don't.

How do I update thousands of old CRM contacts with fresh information?

Export them, use Match & Pull Columns to bring the fresh data into the export, matched on email, and push the result back to HubSpot, Salesforce or Pipedrive with Overwrite with my data chosen. The default, Only fill blank fields, would leave the stale values in place. On Salesforce an overwrite with a blank cell clears that field, so fill or remove blanks first. The push matches existing records on email and updates them rather than creating new ones, and the preview report before it shows how many records will change.

How do I avoid duplicate data in a CRM migration?

Remove duplicates from the export before you load it. Deduplicate contacts on email and companies on website or name, with Smart matching to catch the same company written two ways, such as with and without Ltd. On a push, existing records are matched and updated rather than created again, so overlapping batches don't add new duplicates either.

Can I migrate from Excel or a custom-built CRM?

Yes. Once the data is in a file the path is the same, whether it comes from a spreadsheet or a CRM built in-house: save it as CSV or Excel, clean it, and map it to the new CRM's fields with the CRM Formatter. If the sheet has no record IDs, add one per row before you start. The Generic format works on every plan, and a custom template, on Starter and up, covers a target CRM that isn't one of the eight built in.

Can Operelio move my notes, emails and activity history?

No. Operelio works on the spreadsheet layer, so it moves field data: contacts, companies and their attributes. A notes column in your export does carry across: the push attaches it as a note on the HubSpot contacts and Pipedrive people and organizations it creates. When the push updates an existing record, it doesn't add the note. Activity history, logged emails, attachments and automations never appear in a contact export and need their own plan, usually the new CRM's migration tooling or support team.

Will pushing overwrite data already in the new CRM?

Not by default. Push matches people by email and companies by website or name, and only fills fields that are blank on the CRM side; fields that already hold a value are left untouched. Before the push, the push card shows what will be created, updated or not sent, with the reason for each row not sent, before anything is written.

My new CRM isn't HubSpot, Salesforce or Pipedrive. Can I still migrate?

Yes. Pick its built-in format (Zoho CRM, monday CRM, Freshsales, Close or Copper), the Generic format or a custom template, then download the import-ready CSV and load it with your CRM's own importer. Direct push is the only part limited to HubSpot, Salesforce and Pipedrive.

What plan do I need to migrate?

The CRM Formatter works on every plan, including Free (up to 2,000 rows per file, 5 jobs per month). Most migrations need Starter or higher for bigger files (50,000 rows on Starter), direct push and saved mappings.

How do I handle a migration that runs over several weeks?

Export in batches and save your column mapping after the first run; each later batch loads it and maps itself. One push carries up to your plan's row limit (150,000 rows on Agency; 50,000 to Pipedrive or for HubSpot companies), so a database larger than that has to be split into files that size or smaller, one push each. Pipedrive also limits API calls a day by plan and seats; a push of contacts that uses up the day's allowance pauses and finishes after Pipedrive resets it. Overlapping batches are safe on HubSpot, Salesforce and Pipedrive: records that match (people by email, companies by website or name) are updated rather than re-created, and people with no email are skipped so they can't become duplicates. When a later batch holds newer values than one you already loaded, push it with Overwrite with my data (on Salesforce a blank cell then clears that field, so fill or remove blanks first), unless the team is already editing those records in the new CRM.

Ready to get started?

Upload a file and run your first transformation. Free, no credit card required.