Two reps are working the same deal without knowing it. Your email campaign sent the same message to the same person three times because they're in your database three times. Your contact count says 50,000, but the real number is somewhere around 38,000 once you account for duplicates.
Duplicate contacts are one of the most common Salesforce problems, and one of the most damaging. They corrupt your data, waste your team's time, and make it impossible to trust your CRM as a source of truth.
This guide covers how to find duplicates in Salesforce, merge them without losing data, and set up systems to prevent them from multiplying again.
Why Duplicates Happen
Before fixing duplicates, it helps to understand where they come from. The usual suspects:
Web forms that create instead of update. Someone fills out your demo request form. They're already in Salesforce from a previous interaction, but the form creates a new Lead instead of updating the existing Contact. Now you have two records.
List imports without deduplication. Marketing buys a list or exports contacts from an event. They import 5,000 records. 800 of them are people already in your database. Now you have 800 duplicates.
Multiple systems syncing independently. Your marketing automation, sales engagement platform, and support system all push data to Salesforce. They don't coordinate. The same person gets created multiple times from different sources.
Manual entry without checking. Reps add contacts on the fly. They don't search first, or they search but don't find the existing record because it's spelled slightly differently. "Jon Smith" doesn't match "John Smith" in a quick search.
Lead conversion creating new Contacts. A Lead converts, but Salesforce doesn't match it to an existing Contact. This happens when the Lead's email is different from the Contact's, or when matching rules aren't configured.
Finding Duplicates: The Manual Way
Salesforce has basic duplicate detection built in. Here's how to use it.
Duplicate Reports
You can create reports that identify potential duplicates based on matching fields. The simplest approach:
1. Create a new report on Contacts
2. Group by Email
3. Add a row count
4. Filter where row count > 1
This shows you every email address that appears on multiple Contacts. Same logic works for phone number, name, or any other field.
The limitation: this only catches exact matches. "[email protected]" matches "[email protected]," but it won't catch "[email protected]" and "[email protected]" as the same person.
Duplicate Rules and Matching Rules
Salesforce's Duplicate Management feature (Setup > Duplicate Management) uses matching rules to find duplicates. The standard matching rules compare:
- Exact email match
- Exact name match
- Fuzzy name match (catches some variations)
You can view potential duplicates on individual records. Go to any Contact, and if duplicates exist, you'll see a "Potential Duplicates" component (if you've added it to the page layout).
The problem: you have to check records one at a time. For bulk duplicate detection, you need something more.
Finding Duplicates: The Better Way
For serious deduplication, you need tools that can process your entire database and identify duplicates using sophisticated matching.
Third-Party Deduplication Tools
Several AppExchange apps handle bulk deduplication:
Cloudingo. Probably the most popular. Connects to your org, runs matching algorithms, presents duplicates for review or auto-merge. Handles Contacts, Leads, Accounts. Pricing scales with record volume.
DemandTools. From Validity (the company behind Return Path and BriteVerify). Powerful but complex. Better for admins who need granular control over matching logic.
Duplicate Check. Simpler interface, good for basic needs. Lower price point than Cloudingo or DemandTools.
What these tools do that native Salesforce doesn't:
- Fuzzy matching on company names (catches "Acme Corp" and "ACME Corporation")
- Phonetic matching on names (catches "John" and "Jon")
- Cross-object matching (finds Leads that are already Contacts)
- Bulk review and merge interfaces
- Scheduled automated deduplication
Export and Deduplicate Externally
If you don't want to buy a tool, you can export your data, deduplicate in Excel or a database, then update Salesforce.
Export Contacts with ID, Name, Email, Phone, Company, and any other relevant fields. Use Excel's Remove Duplicates feature, or better, use a tool like OpenRefine that handles fuzzy matching.
Once you've identified duplicates, you can use Data Loader to merge them back in Salesforce (you'll need to use the merge API or handle this carefully to preserve relationships).
This works, but it's tedious. For databases over 10,000 records, a purpose-built tool will save you significant time.
Merging Duplicates Without Losing Data
Finding duplicates is the easy part. Merging them correctly is where things get tricky.
The Standard Salesforce Merge
Salesforce lets you merge up to 3 Contacts at a time through the UI:
1. Go to the Contacts tab
2. Click "Merge Contacts" in the tools section
3. Search for the duplicate records
4. Select which values to keep for each field
5. Click Merge
The merged record keeps all relationships from both source records. Activities, Opportunities, Cases, and other related records transfer to the survivor. The "losing" records are deleted (not moved to Recycle Bin).
You cannot undo a merge. The deleted records don't go to the Recycle Bin. Always export a backup before merging, especially if you're doing bulk operations.
Choosing the Survivor
When merging, you choose which record survives. The survivor keeps its record ID, which matters for:
- External system integrations that reference the ID
- Bookmarks and saved links
- API connections
Best practices for choosing the survivor:
- Oldest created date. This preserves the longest history.
- Most complete data. Choose the record with fewer blank fields.
- Most recent activity. The record with recent engagement is more likely to be accurate.
- Owner assignment. Choose the record owned by the rep who should own the relationship.
Preserving Data From Both Records
During merge, you choose field values from either source record. But what if both records have valuable data in the same field?
For example, one record has the contact's work email, the other has their personal email. You can only keep one in the Email field, but you might want both.
Solutions:
- Use custom fields. Create "Secondary Email" or "Alt Phone" fields to preserve additional data.
- Use the Description field. Before merging, paste important data from the losing record into Description.
- Export first. Save a complete export of both records before merging, so you can reference the original data later.
Bulk Merging
If you have hundreds or thousands of duplicates, merging them one at a time isn't practical. Options:
Third-party tools. Cloudingo, DemandTools, and similar tools support bulk merge operations with configurable survivor rules.
Data Loader with merge API. Salesforce's API supports programmatic merging, but you need to build the logic for survivor selection and data preservation.
Hire someone. Seriously. If you have 10,000 duplicates and no tooling, paying someone to clean it up is often cheaper than figuring it out yourself.
Preventing Future Duplicates
Cleaning up duplicates is pointless if they keep coming back. Prevention is the real goal.
Configure Duplicate Rules to Block
By default, Salesforce's duplicate rules just warn users. They can ignore the warning and create the duplicate anyway. Change this.
Go to Setup > Duplicate Rules. Edit your rules to "Block" instead of "Alert." This prevents users from creating records that match existing ones.
Be careful here. If your matching rules are too strict, you'll block legitimate record creation. If they're too loose, duplicates slip through. Test your rules before enforcing them org-wide.
Fix Your Integrations
Most duplicates come from integrations, not manual entry. Audit every system that writes to Salesforce:
- Web forms. Should they create new records, or update existing ones? Configure your form handler (Pardot, Marketo, native Web-to-Lead) to match and update.
- Marketing automation. How does your MAP handle existing records? Is it set to create or update?
- Sales tools. Outreach, Salesloft, and similar tools often create Contacts. Make sure they're checking for existing records first.
- Data imports. Never import a list without deduplicating it first. Match against existing data before creating new records.
Train Your Team
Reps create duplicates when they don't search before adding contacts. But the real problem is usually that searching is too hard or slow.
Make it easy:
- Use Global Search, not list views, to find existing records
- Search on email (more unique than name)
- Add the Potential Duplicates component to record pages
- Create a quick action for adding contacts that includes a duplicate check
Regular Maintenance
Even with prevention in place, some duplicates will slip through. Schedule quarterly duplicate reviews to catch them before they multiply.
The Hidden Cost of Duplicates
Duplicates seem like a minor annoyance, but the costs add up:
Wasted sales time. Reps research the same contact multiple times. They don't see the full picture of a relationship because the history is split across records.
Inflated marketing costs. You're paying to email the same person multiple times. Your list size looks bigger than it is, so your metrics are wrong.
Broken automation. Lead scoring that considers email engagement is wrong when engagement is split across duplicates. Nurture sequences trigger multiple times for the same person.
Lost trust. When reps don't trust the CRM, they stop using it. They keep their own spreadsheets. The system becomes less valuable for everyone.
If your Salesforce has been running for more than a couple years without serious duplicate management, you probably have thousands of them. The question is whether to spend time fixing them now or keep paying the hidden cost every day.
Common Questions
What happens to activities when I merge contacts?
Activities from both records transfer to the surviving record. Task history, email logs, and call records are preserved. Nothing is lost except the duplicate record itself.
Can I undo a merge?
No. Merging is permanent. The losing record is deleted and cannot be recovered. Always export backups before bulk merging.
Why does Salesforce create duplicates in the first place?
Common causes: web forms creating new records instead of updating existing ones, list imports without duplicate checking, multiple systems syncing independently, and reps entering data without searching first.
How do I merge Leads with Contacts?
You can't directly merge across objects. Instead, convert the Lead and merge the resulting Contact with the existing Contact. Some third-party tools can handle cross-object deduplication more elegantly.
Have thousands of duplicates and not enough time to clean them?
Merge My DuplicatesRelated: How to Clean Salesforce Data | Data Deduplication Services | CRM Hygiene