Operelio
CRM imports & cleanup19 min read

Clean data before or after a CRM import

Clean data before you import it. Fix duplicates, formats and missing fields in the file, so they never become records in your CRM. Clean records that are already in the CRM the same way: export them, clean the export and import it back over the originals. Only merging or deleting records that already exist in the CRM has to happen inside it.

By Operelio team · Updated October 23, 2026

On this page14
  1. 1.Should you clean data before or after a CRM import?
  2. 2.Cleaning before an import: what it catches
  3. 3.Cleaning after an import, in the CRM
  4. 4.Why fixing data after an import costs more
  5. 5.Before vs after a CRM import, compared
  6. 6.How to clean a file before a CRM import
  7. 7.Duplicates in the file and duplicates already in the CRM
  8. 8.One list, before the import
  9. 9.Taking that list through the checklist
  10. 10.Cleaning records already in your CRM
  11. 11.Cleaning data before a CRM migration
  12. 12.What to check after the import
  13. 13.Where Operelio fits
  14. 14.Frequently asked questions

Should you clean data before or after a CRM import?

Before: clean every new list before it is imported. A list cleaned in the file arrives as one record per person, in the formats your CRM expects, and there is nothing to undo later. Cleaning after the import means finding each bad record among thousands of good ones and fixing it in place, after a rep may already have called it or added it to a deal.

Most teams still clean in both places, because some jobs can only happen in one of them. Which place a job belongs in depends on where the data is and what needs to change:

The jobWhereHow
A new list: a webinar export, event leads, a prospecting or bought listIn the file, before the importCheck, fix and remove repeats in the file, then import it
Wrong or messy values on records already in the CRMIn a file, as a round tripExport the records, clean the export, import it back over them
Two records for the same person, both already in the CRMIn the CRMMerge them with the CRM's own merge tool or an app that runs inside the CRM
Rules for every record created from now onIn the CRMRequired fields, dropdown values and duplicate rules, set in the CRM's settings

Cleaning before an import: what it catches

Cleaning before an import means working on the spreadsheet before any of it reaches the CRM. You see every row at once, so a problem that repeats down a column is fixed once, for all of them: a country written three ways, an N/A typed into the Email column, the same person on two rows.

It is also the only point where the list is still separate from your data. Every fix changes a file and nothing else, so you can try a fix, check it, and go back to the original if it went wrong. A list that turns out to be poor can be left out altogether, which is much harder once its rows are records.

The usual worries about cleaning first are losing something along the way and having to do it again for every list. Keeping the original file and the removed rows answers the first, and running the same saved steps on each new file answers the second.

The checklist below takes the before-import jobs in order, from keeping the original file to previewing the import.

Cleaning after an import, in the CRM

Some cleanup can only happen inside the CRM, because it needs the records themselves, not a copy of them.

Merging duplicate records. Two records for one person that both exist already each have their own activity, owner and links to deals and companies. A merge brings those together into one record, and only the CRM, or an app that works inside it, can do that. A file can't merge or delete a record.

Rules for new records. Required fields, dropdown values and duplicate rules apply to every record as it is created, whatever its source: a form, a rep typing, an integration. Those are set in the CRM.

Fixing one record at a time. When a rep spots a wrong title or a bounced address, the quickest fix is on the record.

In-CRM cleaning tools do those jobs well. Their limit is timing: by the time they see a bad record, it has already landed, and so has anything that acted on it. For a new list, that is the difference between fixing a row and fixing a record.

Why fixing data after an import costs more

A row in a file is only a row. Once it is imported, other things start to depend on it: a rep logs a call against it, it joins a list or a deal, an owner is assigned, and the CRM's automation can act on it. A fix now has to account for all of that, one record at a time.

Duplicates show the cost most clearly. In the file, removing a repeated row is a single delete. In the CRM, two records for one person each collect their own emails, calls and deal links, so fixing them takes a merge, and a merge decides which value wins on every field where the two disagree. In HubSpot, the primary record's values are kept, the other record's values fill any properties the primary has empty, and you can pick the other record's value for any property. Two merged records can't be unmerged.

Automation can act on a bad value before anyone sees it. A HubSpot workflow can enroll contacts by the import they arrived in, and Salesforce's Data Import Wizard can trigger workflow rules and processes on imported records when that option is checked. So a wrong country can route a lead to the wrong rep, and a bad address can be sent the first email of a sequence, as soon as the import finishes.

Rows can also be refused on the way in. A row missing a field the CRM requires is refused, and a value a dropdown field doesn't have can be refused or dropped. Finding which rows those were means reading the import's error file against the original, then importing them again.

Old contacts pile up. A list imported whole brings its stale and test rows with it, and each one is a record someone has to recognize as junk later, one at a time.

Mixed values break what is built on a field. A list filtered on Country is United States misses the rows that say USA, and a report grouped by country counts the same country three times. Fixing that in the CRM means finding every variant first.

An import is also hard to take back. HubSpot and Salesforce let you delete the records an import created, but deleting them doesn't reverse the updates it made to records that already existed. HubSpot can roll back changes from an import within 14 days on some paid plans, and Pipedrive lets an admin revert an import within 48 hours.

Before vs after a CRM import, compared

Neither replaces the other. For a new list, before wins; for what is already in the CRM, you need both.

Before, in the fileAfter, in the CRM
DuplicatesRepeats inside the list removed before they become recordsRecords that already exist merged, with their history
What you can checkEvery row, before anything is writtenRecords one at a time, or through the CRM's views and reports
A mistakeFixed in the file, or undone from the originalFixed record by record unless the CRM can roll the import back, and automation may already have acted on it
ReachThe file in front of youEverything in the CRM

How to clean a file before a CRM import

Work through the file in this order before you import it. The order matters: placeholders are cleared before the email and required-field checks, because an N/A looks like a value, and repeats are removed after emails are fixed, because a broken address hides a repeat.

1

Keep the original file

Save the export as it came, with the date in its name, and work on a copy. Any fix can then be checked against the original, and undone.

2

Remove test rows and junk

Take out test entries (a Test Test, an asdf@asdf.example), your own colleagues, rows nobody will work, and in an export from a CRM, records with no owner and no activity in years. Take out columns no CRM field will take. Screen the list against your Do Not Contact list, so people who asked not to be contacted don't come back in with it. Every row left out is a record nobody has to clean later.

3

Match each column to a CRM field

First decide what each row is: a lead, a contact or a company. In Salesforce, leads and contacts are separate records, and removing duplicates won't fix a list imported as the wrong one. Then rename or map every column to the field it belongs in, and check any the import tool guesses. A column mapped to the wrong field imports without an error and is wrong on every record. Check the column the import will match on, too: an email cut short, or a record ID copied from another CRM account or onto the wrong row, matches the wrong record or none. Note which fields your CRM requires for this record type.

4

Clear placeholders

Cells that say N/A, a dash, TBD, none or unknown look filled but hold nothing. Left in, they import as real values: a contact whose company is N/A. Worse, an import that overwrites existing values writes the N/A over good data. Clear them to blank.

5

Write each value one way

Pick one format per column and use it on every row: emails in lower case, no spaces at either end of a cell, phone numbers with their country code, countries and states spelled one way, dates as YYYY-MM-DD. For a dropdown field, every value must be one of the field's options. If the file has been opened in Excel, check ZIP codes and phone numbers: Excel removes leading zeros as it reads them.

6

Check the email addresses

Most CRMs match people on email, so a broken address does twice the damage: the person can't be matched to their record, and the first email bounces. Fix the format first (one @, a domain with an ending, no spaces), then verify the list to find the addresses that will bounce.

7

Remove repeats inside the file

Match on the Email column, not the whole row: two rows for the same person rarely agree in every column, so a whole-row match keeps both. Removing a repeat drops that row whole, so if it holds a phone number or a title the kept row lacks, copy it across first. If the list comes from several files, combine them first and remove repeats across all of them.

8

Fill the fields your CRM requires

A row missing a required field fails to import: a HubSpot contact needs an email, and a Pipedrive person needs a name. Fill it if you can find the value, or take the row out until you can. A made-up value such as Unknown in Company gets the row in and becomes the next cleanup.

9

Find the people the CRM already has, then preview

Before anything is written, find out what the import will do: which rows will create records, which will update one that exists, and which won't go in, and why. Look in particular for people who are in the CRM under a different email, because no email match will find them. With a CRM's own importer, which shows less before it writes, import a small batch first and check those records before the rest.

Duplicates in the file and duplicates already in the CRM

A list can repeat itself, and it can repeat the CRM. Each needs a different fix at a different time, and only the last of the four below has to wait until after the import.

Repeats inside the file are removed before the import, by matching on email. Deduplicate does it in one of three modes: Exact needs the same value, ignoring capitals; Smart also treats a Gmail address with dots or a +tag, a US or Canadian phone with or without +1, and a company with or without Ltd or Inc as the same; Similarity catches typos at a threshold you set, 80 by default. It keeps the first row of each group, or the last if later rows are newer, and puts the removed rows in their own file.

A similar name or company only means a pair is worth checking. Two people at one company can share a name, and two companies can share a domain; in each case both records are right. Check the pairs Similarity finds before anything is removed, and match on email when names alone could be two people.

People who are already in the CRM under the same email are caught at the import, as long as it matches on email. HubSpot's importer updates the contact with the same email and the company with the same domain. Salesforce's Data Import Wizard can match leads and contacts by Salesforce ID, name, email or external ID, if you pick one. Pipedrive's import can merge a person with the same name and the same email, phone or organization. Operelio's push matches each person on email, so someone already there is updated, not added again. On Salesforce, it looks only in the object you push to: a lead push doesn't update a contact with the same email, though a new lead whose name and company match one is flagged first.

People who are in the CRM under a different email get past any email match. Before a push, Operelio lists the new rows that look like a record you already have, by a similar name at the same company, so you can decide before anything is created. The check needs a Company column to compare.

Duplicates that already exist in the CRM can't be fixed from a file. Merge them in the CRM: see merging duplicate contacts in HubSpot, or Salesforce duplicate rules to stop new ones. Duplicate contacts covers where duplicates come from and how to keep them out.

Where it isExampleWhen to fix itHow
Twice in the same listMaya Patel on two rows of a webinar exportBefore the importRemove the repeat, matching on email
In the list and the CRM, same emailPriya Shah signs up and is already a contactAt the importMatch on email, so her record is updated
In the list and the CRM, different emailLena Fischer signs up with a new emailBefore the import, by a personLook for her by name and company, and update her existing record instead
Twice in the CRM alreadyTwo Lena Fischer records from earlier importsIn the CRMMerge them in the CRM

One list, before the import

Here is one list taken through the checklist. It is a webinar sign-up export of 10 rows going into HubSpot, where two of the people already have records. It has no test rows, and each column already matches a HubSpot field. The names, companies and addresses are made up.

RowFirst nameLast nameEmailCompanyCountry
1MayaPatelmaya.patel@brightline.exampleBrightline LtdUSA
2MayaPatelMaya.Patel@brightline.exampleBrightlineUnited States
3TomReyestom.reyes@harborview.exampleHarborview IncUK
4SamOkaforN/AFerngateUnited Kingdom
5PriyaShahpriya.shah@northwind.exampleNorthwindGB
6LenaFischerlena@quillworks.exampleQuillworksGermany
7OwenGrantowen.grant@ironleafIronleafUS
8DanaColedana.cole@westmarch.exampleWestmarchUnited States
9KenItoken.ito@larkspur.exampleLarkspurJapan
10RobHalerob.hale@cobbleton.exampleCobbletonUS

Taking that list through the checklist

HubSpot already has Priya Shah as priya.shah@northwind.example, with no country, and Lena Fischer at Quillworks as lena.fischer@quillworks.example.

1

Keep the original

Save the export as spring-webinar-original.csv and work on a copy.

2

Clear the placeholder

Row 4's N/A goes. Sam now has no email, so nothing can match him to a record.

3

One spelling per country

USA, United States and US become United States; UK, United Kingdom and GB become United Kingdom. A list or report filtered on one spelling now finds all of them.

4

Fix the broken email

Row 7's owen.grant@ironleaf has no ending. His registration confirmation went to owen.grant@ironleaf.example, so the export cut it short. If you can't confirm an address, take the row out rather than guess.

5

Remove the repeat

Rows 1 and 2 are Maya twice, but a whole-row match keeps both, because their companies differ. Matching on the Email column finds them, since the match ignores capitals. Keep row 1, and 9 rows are left.

6

Required fields

HubSpot needs an email to create a contact, so Sam's row would fail. Take it out until you have his address.

7

Who is already there

Priya's email matches her HubSpot contact, so the import updates her record. Lena's doesn't: an import would create a second Lena. Take her row out, and add the new address to her existing record by hand.

8

Preview

7 rows are left. In Operelio, the preview reads: 7 contacts go to HubSpot: 6 new and 1 updated. With Only fill blank fields, Priya's blank Country is filled and the rest of her record stays as it is.

9

After the import

HubSpot should show 6 contacts created and 1 updated. Open Priya's record and one new contact to check the values landed in the right fields.

In Operelio you can leave Sam's and Lena's rows in and let the push preview find them: Sam is under Not sent, with "No email, so it can't be matched", and Lena is under Look-alikes, beside the Lena Fischer HubSpot already has. A look-alike is still pushed as a new contact, so take Lena's row out before you push. Sam's row isn't sent either way.

Cleaning records already in your CRM

Records already in the CRM are cleaned the same way as a new list: export them, clean the export, and import it back over the originals. It is the after-import cleanup done in a file, so you get the same view of every row and a copy to go back to.

With Operelio, a push only fills blank fields unless you choose Overwrite with my data. With overwrite on, the preview lists the values that will be replaced, and on Salesforce an empty cell clears the Salesforce value, listed as Fields cleared, so push only the columns you mean to change. CRM data cleansing covers the whole round trip. If a fresh export arrives every week, a trail can do it for you: a saved set of steps that runs by itself on every file that lands in its folder. It cleans the file and holds the push for you to review before anything reaches your CRM. Operelio doesn't export records from your CRM, so a person or the CRM's own scheduled export has to put the file there.

1

Export the records with what they'll match on

Include the Email column for people, or the CRM's record ID if your import tool matches on it.

2

Clean the export

Work through the checklist above. Leave out columns you aren't changing, so the import can't touch them.

3

Choose what the import may replace

An import that only fills blank fields is safe, but leaves a wrong value in place. To fix values, such as phone formats or country names, the import has to overwrite them. HubSpot's importer has a Don't overwrite checkbox for each mapped property, and a blank cell never clears a HubSpot value.

4

Check before it writes

Look at what will change before it is written, and that blank cells won't clear values you want to keep.

5

Merge the duplicates in the CRM

A file can fix values, but it can't merge two records or delete one.

Cleaning data before a CRM migration

Clean the export from the old CRM before it goes into the new one, not after. A migration imports years of records at once, so every duplicate and old format in the old CRM moves across with them, attached to their deals and history.

The before-the-import rules hold, with two more. Remove duplicates across every file you're bringing over, not only within each one, because the same person is often in two exports. And decide which records to leave behind, such as contacts nobody has touched in years, before you map a single field. Old leads are the part to be most careful with: decide by rule, with a column and a filter such as last activity before a set date, rather than record by record, so the same rule can be checked and explained later. The CRM migration checklist covers the rest of the move: what to rebuild, the order to load records in, and the cutover.

What to check after the import

An import that finishes without errors only proves the CRM accepted the file. Values in the wrong field, placeholders such as N/A and statuses that contradict each other all load without a single error, so check what landed against what you expected from the file, then open a few records by hand.

1

Count

Check the records created and the records updated against what you expected from the file.

2

Read the reasons

Read why each row that didn't go in was left out or refused, and decide whether to fix it and import it again.

3

Open a few records

At least one new and one updated, and check each value is in the right field.

4

Check one standardized field

Run a list or report on a field you cleaned, such as Country, and check every row now reads one way.

After a push, Operelio lists the rows sent, as Created or Updated; the rows the CRM refused, with the reason it gave where it gives one; and the rows not sent, each with why.

Where Operelio fits

Operelio cleans files: new lists, and exports of records already in your CRM. It checks a list, fixes what you pick, removes repeats, maps the columns to your CRM's fields, and shows what a push to HubSpot, Salesforce or Pipedrive will create, update or leave out before anything is written. CRM imports walks through that preview on a trade show list. It doesn't run inside your CRM, so merging records that already exist there, and rules that apply as records are created, stay a job for the CRM or an app that works inside it.

For the checklist above: Data Health Check finds placeholders, broken emails, mixed formats and repeats, and fixes the ones you pick. The Email Verifier checks every address. Deduplicate removes repeats. The CRM Formatter maps the columns to your CRM's fields and shows what a push to HubSpot, Salesforce or Pipedrive will do before it writes anything.

Data Health Check, Deduplicate and the Email Verifier's Quick clean are on every plan, on files up to 2,000 rows. Each run uses one job, and Quick clean uses no credits. Pushing to your CRM, Do Not Contact screening and Full verification start on Starter.

Map a list to your CRM's fields, clean every row, and see what a push will create, update or leave out before it writes anything.

Open CRM Formatter

Frequently asked questions

Should I clean data before or after importing it into a CRM?

Before, for every new list: clean it in the file, so duplicates and bad formats never become records. Clean records already in the CRM by exporting them, cleaning the export and importing it back. Merging or deleting records that already exist are the jobs that have to happen in the CRM.

How do I clean data before importing it into a CRM?

Keep a copy of the original, take out what you don't need, map each column to a CRM field, clear placeholders, write each value one way, check the emails, remove repeats, fill required fields, and preview the import before it writes. The checklist above takes each step in order.

How can I check contact data is accurate before importing it?

Check the file for broken emails, placeholders, mixed formats and repeats, then verify the email addresses to find the ones that will bounce. Then look up each email in your CRM, so you know who is already there before anything is created.

Should I clean data before a CRM migration?

Yes. Clean the export from the old CRM before it goes into the new one, so duplicates and old formats don't move across with years of history attached. The CRM migration checklist covers mapping, load order and cutover.

How do I stop an import from creating duplicate records?

Remove the repeats from the file first, then import with matching on email, so a person already in the CRM is updated instead of added again. People in the CRM under a different email won't match; look for them by name and company before the import.

Will importing over existing records overwrite my data?

It depends on the tool and the setting. HubSpot's importer updates the properties you map unless you check Don't overwrite, and a blank cell never clears a value. An Operelio push only fills blank fields unless you choose to overwrite, and on Salesforce an overwrite also clears a field where your cell is blank.

What data should I leave out of an import?

Rows nobody will work, such as test entries, colleagues and people who asked not to be contacted, and columns no CRM field will take. Every row left out is one less record to clean or merge later.

Can I clean records that are already in my CRM?

Yes, as a round trip: export them, clean the export like any new list, and import it back over the originals, matched on email. Fixing values needs overwrite on; merging duplicates still happens in the CRM.

What can only be done inside the CRM?

Merging duplicate records that already exist, and rules that apply to every new record as it is created, such as required fields and duplicate rules. A file can change values on records, but it can't merge or delete one.

Does Operelio merge duplicates inside my CRM?

No. Operelio works on files: it removes repeats from a list before it reaches the CRM, and before a push it lists new rows that look like a record you already have. Merging records that are already in the CRM is done in HubSpot, Salesforce or Pipedrive, or with an app that works inside them.

Is it better to remove duplicates after the import?

Only for duplicates that are already in the CRM. Repeats inside a new list are quicker to remove in the file, and people the CRM already has are found at the import by matching on email. Merging is for the two records that both exist already.

How do I keep CRM data clean after an import?

Check every new list before it is imported, the same way each time, so new problems stop arriving, and clean what is already there with a round trip now and then. A trail, a saved set of steps that runs by itself on every file that lands in its folder, can run the same checks on each new list and hold the push for your review.

Ready to get started?

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