Your Salesforce is full of duplicates
Duplicate records quietly break reporting and member history. Here's how to stop them at the source, keep integrations working, and move from manual cleanup to confident automation.
The short version: turn on Salesforce's built-in matching and duplicate rules, then do the harder work of deciding what actually counts as a duplicate in your organization. Make bad data harder to enter, flag likely duplicates instead of blocking records your integrations create, and move from manual review toward confident, automated merging as your rules prove themselves. AI now makes the matching much smarter.
The same person, three times
Search for a longtime supporter and you get three records. One has their gifts. One has their event registrations. One was created by a form last month with a slightly different email. Nobody knows which one is right, so the next person to log a call picks one at random.
Duplicates are one of the quietest ways reporting breaks. Your donor count is inflated, your giving history is split, and nobody can see a member's full picture. I wrote about those problems in Your board numbers come from a spreadsheet and You can't see a member's full picture. Duplicates sit underneath both.
Start with what Salesforce already has
Salesforce has matching rules and duplicate rules built in. Matching rules define what makes two records look alike. Duplicate rules decide what happens when a match is found: warn the person, block the record, or just report it.
Turning these on is a good starting point. Plenty of organizations I see don't have them configured at all, or are still running whatever was set up years ago.
Deciding what counts as a duplicate is the hard part
The tricky part isn't the feature. It's deciding how you identify a duplicate, and how deep you go.
The easy case is a unique key. If every contact must have a unique email address, duplicates are simple to catch. In practice, a lot of organizations can't enforce that. So you end up writing matching logic across names, addresses, phone numbers, and organizations, and it gets complicated fast.
That complexity is usually where things stall. The rules are hard to get right, nobody owns the decision, and duplicate cleanup quietly drops down the priority list.
Why blocking duplicates can break your integrations
Here's a pattern I see a lot as organizations mature. Duplicate rules can be set to truly block a record from being created or edited. That works fine when people are typing data in.
But as you add automations and integrations that create records from other systems, blocking starts to cause failures. A native integration tries to push a record, hits a duplicate rule, and the record just fails to load. Data goes missing, and someone has to figure out why.
The usual reaction is to turn the duplicate rules off, or switch them from blocking to reporting. That stops the failures, but it also means duplicates start piling up again, now quietly sitting in a report nobody checks.
The real problem: reviewing duplicates is manual
Underneath all of this, duplicate management is manual work, and nobody wants to do it. You have to agree on rules for what a duplicate is, then someone has to review each potential match and decide what to do with it. It's a pain, so it doesn't happen.
The answer is using technology to take as much of that work off people's plates as possible:
- Cut it down at the source. Make it harder for people and systems to enter bad data in the first place.
- Flag proactively. Surface likely duplicates as they appear, instead of discovering them during a report crunch.
- Clean up proactively. Work through flagged duplicates on a schedule, so they never pile up.
From manual review to confident automation
Think of it as a scale. You start very manual: reviewing matches by hand, learning what your duplicates actually look like. As you lock in your rules, you become more confident, and more of the work can be automated.
This is where newer capabilities help a lot:
- AI can spot patterns in your duplicates that would be hard to write rules for by hand, so you identify them more effectively.
- Confidence scores rate how likely each pair of records is a true match.
- Thresholds let you auto-merge high-confidence matches, and send only the uncertain ones to a person.
You can build this yourself, or use a dedicated duplicate management tool. Either way, the goal is the same: people only review the cases that genuinely need judgment.
A practical path
- Turn on matching and duplicate rules, starting with alerts and reporting rather than blocking.
- Write down what counts as a duplicate for people and for organizations in your org.
- Fix the sources. Check every form, import, and integration that creates records, and tighten the ones that create the most duplicates.
- Block where people enter data, flag where integrations do, so you don't break the systems feeding Salesforce.
- Review flagged duplicates on a schedule, with a clear owner.
- Add confidence scoring, with AI or a dedicated tool, and auto-merge above a threshold once your rules have proven themselves.
If you only do one thing
Run a duplicate report on your contacts this week, even a rough one. Seeing how many there are, and where they came from, tells you whether your problem is a form, an import, or an integration, and that's where to start.
