Skip to content
DataUntangler

Salesforce deduplication you can review before anything merges

Salesforce deduplication normally means running an app inside the org and trusting its matching rules. Working on the export gives you the same matching with a review step: pull a report as CSV, see every proposed merge, then update only what you approved.

In-browser your file never leaves your computer

Every row proposed to you before it is applied

CSV log of what you approved and rejected

Clean a file
01 Try it on this page

Load a messy sample and watch it work

The same engine described below, running on your own machine. Nothing is uploaded and nothing is applied until you approve it.

1. Load a file

Your file is read on your own machine. Nothing is uploaded, so nothing can leak.

Or start from a messy sample

Status

Loading the sample file.

File: CRM contact export

Rows

--

Columns

--

Changes

--

Duplicate rows

--

Date formats

--

Blank or invalid emails

--

Load a file to see the diff

Drop a CSV or pick one of the messy samples. Every proposed change appears here as a line you approve or reject.

02 About salesforce deduplication

Duplicate rules catch what they were told to catch

Standard matching rules compare a fixed set of fields, and they run at the moment a record is created. They do nothing about the duplicates already in the org, and they do not see the ones that came in through an import that bypassed them.

Native dedupe apps work on the object level inside Salesforce, which is convenient and also means the work is invisible outside the org. If your duplicates arrived from a spreadsheet, they will arrive that way again next quarter.

Accounts are the expensive case, because a merge moves contacts, opportunities and ownership onto one record and takes at most three records at a time. The account version of this workflow, with owner conflicts flagged before anything merges, is on Salesforce merge accounts.

The export workflow

Export a report with the Id column

Keep the record Id so you can act on exactly the right records afterwards.

Match on name, company and email

Fuzzy matching finds the pairs that differ by a suffix, an accent or a typo.

Review every cluster

Each one names the reason it matched and marks the most complete row as the one to keep.

Export the audit log

It lists the merged row and the row it merges into, which is the list your admin works from.

Before a big import

The cheapest deduplication happens before data enters the CRM. Cleaning a list on the way in stops you from paying for the same cleanup twice, once in the file and once in the org. Doing that on any CRM export is CRM data cleansing, the matching it relies on is fuzzy matching rather than a fixed field rule, and the data cleaning tool runs it without the file leaving your machine. The version of this with a deadline attached, where the org is being left behind entirely, is a Salesforce to HubSpot migration. When the move runs the other way and the org is the destination, the Import Wizard and Data Loader matching rules decide what doubles, and that is covered in HubSpot to Salesforce migration. Which loader to use for each object is compared in Salesforce data migration tools.

Once the groups are approved, the merges themselves still happen in the org, three records at a time. Contacts and leads are covered on Salesforce merge contacts, and accounts on Salesforce merge accounts.

A contact report run through the engine

We exported an eleven row Contact report with the columns an admin would pull: Id, First Name, Last Name, Account Name, Email, Phone, Mailing State, Lead Source and Created Date. The engine proposed three duplicate groups and thirteen field fixes, and it changed nothing until each one was approved.

Rachel Nguyen came in twice, once typed in capitals with a trailing space on the email, so the pair was caught on the email address. Marcus Delgado at Copperline Freight Inc. and at Copperline Freight had two different work emails, and the pair was proposed on name and company with the legal suffix ignored. Allison and Alison Reyes at Summit Ridge Capital were proposed as a close match and flagged, because the emails differ and only a person can say whether the spelling is a typo.

Two pairs were left alone. Tom Becker at a work address and Thomas Becker at a Gmail address share an account, but a nickname plus a personal email scores below the threshold, so your reviewer decides. Kevin Walsh at Northgate Insurance Group and Kevin Walsh at Pioneer Roofing Co are two people, and the engine kept them apart. The same logic, with the match reason on every pair, is documented on fuzzy matching.

The record Id travels with every merge

This is the part that matters in Salesforce. When a group is approved, the row that is kept stays in the cleaned file and the duplicate row is removed, but its record Id is not lost. It is written into an added column called other_id on the surviving row. In our run, row 2 (0035e00000AbC01) came back with 0035e00000AbC02 beside it, so every line of the cleaned file reads as a master Id and the Id to merge into it.

Fields the two records disagree on are kept the same way. The second email address goes to other_emails, and a differing Lead Source or Created Date goes to other_lead_source and other_created_date, so nothing a sales rep typed disappears. The audit log lists each removed row with the row it merged into and every one of those values. Your admin works down that list with the native merge screen or the merge tool of their choice.

Salesforce deduplication options compared

There are three ways to deal with duplicates already in an org. Each one is right for a different team, and the choice usually comes down to who does the work and whether the merges have to be explained later.

Duplicate rules and jobs in the org Dedupe app from AppExchange Export, review, then merge (this tool)
Cleans records already in the org Duplicate jobs only, on some editions Yes Yes, from a report export
Matching beyond the fields in a rule No Yes, configurable Yes, email, name and company scored
Review before anything merges Per record, by hand Varies by app and setting Every group is a proposal
Record of what merged into what Inside the org Inside the app CSV audit log plus other_id column
Install in the org Built in Yes, managed package No, nothing installed
Best for Stopping new duplicates Continuous cleanup by an admin A one-off cleanup, import or migration that must be defended

Category level comparison. Duplicate job availability depends on your Salesforce edition, so check it in your own org.

Who buys this for a Salesforce cleanup

The buyer is the person who owns the list when the numbers are questioned: a RevOps or Salesforce admin cleaning up before a territory change, an ops lead about to load a trade show list, or a consultant handed an org with years of imports in it. They need the duplicate groups found this week, a list their admin can work from, and proof of what was merged.

The Analyst plan runs unlimited files of up to 25MB each, and Enterprise puts several people on one invoice with a DPA. See pricing, or run the demo above on your own report first. Nothing leaves your browser in the demo.

03 Read it off a real file

Duplicate groups from a real engine run on a Salesforce contact report

Rows Kept Matched on Duplicate Id kept in other_id Needs a look
2 and 3 Rachel Nguyen, Brightwater Dental Partners LLC Same email address 0035e00000AbC02 Yes, Lead Source and Created Date differ
4 and 5 Marcus Delgado, Copperline Freight Inc. Same name and company, different email 0035e00000AbC04 Yes, emails differ
7 and 6 Alison Reyes, Summit Ridge Capital Close name and company match 0035e00000AbC05 Yes, emails and first names differ
8 and 9 Not proposed Nickname plus a personal email None Left for the reviewer
10 and 11 Not proposed Same name at two different accounts None Kept as two people

Row numbers count the header as row 1. The kept row is the most complete one, so in the Reyes group row 7 won because it has a phone number. Check the spelling of the survivor before you merge in the org.

04 Duplicate rules in the org

What the rules inside the org were never told to look for

Duplicate rules are a list of fields and a comparison. They are exact about what they were given and blind to everything else.

CRM data cleansing

A rule matches the fields it was given

Records that differ in the field nobody put in the rule stay separate, and the rule reports the org as clean while they do.

The merge is applied straight away

What was in the losing record is no longer somewhere you can read it, so a merge that turns out wrong is not a merge you can talk about.

Leads and contacts are two problems

The same person can exist as both, and a run over one object never sees the other, so the pair survives every pass.

What the export pass adds

The same matching on a report you exported, every cluster reviewed before anything is touched, and a CSV log of what you decided.

05 Before you run it

Questions about salesforce deduplication

Does this merge records in Salesforce for me?
No. It produces the reviewed list of merges and the cleaned file. Applying them in the org stays with your admin, using the record Ids you exported.
Does it work with leads as well as contacts?
Yes. It works on any CSV export with name, company or email columns, whichever object it came from.
How do I find duplicate records in Salesforce?
Export a report of the object with the record Id, name, account and email, then match it on more than one field. Duplicate rules only check new and edited records, so the duplicates already in the org need a scan of the existing data. Here every group comes back with the reason it matched.
Can Data Loader merge duplicate records?
Not by itself. Data Loader inserts, updates, upserts and deletes, and it has no matching of its own. The usual route is to decide the groups outside the org, merge them in Salesforce three records at a time, and use upsert with an external Id to stop the next import from creating new duplicates.
What happens to the record Id of the duplicate?
It is kept. The cleaned file adds an other_id column on the surviving row with the Id of each removed duplicate, and the audit log repeats it. That gives your admin the master Id and the Id to merge into it on one line.
06 What it costs

Plans for when the file is bigger than the demo

Yearly billing saves 50 percent. There is no free plan, and no card is needed to use the browser demo above.

Yearly billing saves 50 percent, half the monthly price.

Switch to yearly and save 50 percent.

Analyst

Self-serve

One person with files to clean, as many as they like.

$29$59/mo

Billed $348 a year Billed monthly

Buy Analyst, yearly Buy Analyst, monthly
  • Unlimited files
  • Files up to 25MB, about 100,000 rows
  • Exact and fuzzy duplicate detection
  • Dates, numbers, currencies, encoding and casing fixed
  • Every change reviewable before you download
  • Cleaned CSV and a change log, both downloadable
  • Runs in your browser: files never leave your machine
  • Email support

Enterprise

Several people on one invoice, a DPA on request, priced per seat.

$49$98/seat/mo

Billed $588 a seat a year, from 2 seats ($1,176) Billed monthly per seat, from 2 seats ($196)

Buy Enterprise, yearly Buy Enterprise, monthly
  • Everything in Analyst
  • Several people on one invoice
  • DPA on request
  • Invoicing and purchase orders
  • A named contact for support

Payment is by card through our payment provider, monthly or yearly, and you can cancel from your account at any time. The free try is one file of your own, up to 5MB, in the browser demo. Already paid? Sign in.

Clean the file, and be able to show what you changed

Try the demo on your own CSV first. It runs in your browser, it costs nothing, and no card is required.

No card required. Your file never leaves your computer.

Clean a file