Why does our CRM keep creating duplicate customers?
Because records get created at different moments, by different people, through channels that cannot see each other. The web form does not know about this morning’s phone call. A cell number instead of a landline, a nickname instead of a legal name, or a missing apartment number is enough to defeat exact matching. Prevention at the point of creation beats a quarterly cleanup, every time.
Four doors a duplicate walks through
Duplicates are not a single problem. They arrive through distinct paths, and each one needs a different fix.
- Web forms. A returning customer fills out a form with a work email and a cell number. Nothing in the form matches the existing record, so a new one appears.
- Inbound calls. A CSR under time pressure types a name, sees no instant match, and clicks create. The existing record was under the spouse’s name.
- Field creation. A technician adds a customer on a tablet at the curb, with no visibility into the office database.
- List imports. A purchased list, a trade-show export or a legacy spreadsheet gets loaded without a matching pass.
Exact matching fails for boring reasons
Most systems compare strings. Strings are a terrible representation of humans. (480) 555-0142 and 4805550142 are the same phone and different strings. Bob and Robert are the same person. 1421 N Oak St Apt 3 and 1421 North Oak Street #3 are the same door.
Before any matching happens, fields have to be normalized: phone numbers to a single digit-only or E.164 form, addresses standardized to a postal format, emails lowercased with plus-addressing stripped, names reduced to a comparable root. Skipping normalization is why so many built-in dedupe tools find almost nothing.
Catch it at creation, not in a purge
A quarterly cleanup treats duplicates as an accounting problem. They are actually an operations problem: while the duplicate exists, someone calls the wrong number, sends a second estimate, or fails to see that this customer has an open warranty claim.
The durable fix is a check at the moment of creation. Before a new record is written — by a form, an API call, or a person — the system searches normalized phone, normalized address and email, and surfaces likely matches. This is one of the standard jobs of an integration layer sitting between your website, your phone system and your CRM: it holds the matching logic once, so every channel inherits it.
Accept that some duplicates are correct
Two people at one address with different phone numbers may genuinely be two customers. A landlord and a tenant share a service address and are not the same account. A commercial customer with ten locations should not collapse into one record.
This is why aggressive automatic merging causes more damage than duplicates do. Set a high bar for automatic action, route the ambiguous middle to a person, and log every merge so it can be undone. That review workflow is worth building into your customer data layer rather than leaving it to individual judgment.
Topics: duplicates · data hygiene · record creation · matching
Have a version of this question about your own business?
The useful answer usually depends on which systems you run and how they're connected. That's a conversation, not a blog post.