Duplicate contacts are usually treated as a cleanup problem, but the durable fix starts upstream. If several WordPress forms, booking tools, imports, and integrations feed the same CRM, merging records once will not stop them returning.
1. Normalize before matching
Lowercase and trim email addresses, standardize phone numbers to a consistent international format, remove formatting noise, and preserve the raw submitted values separately when they matter for audit or support.
2. Define identity rules
Email is often the safest primary match for ordinary B2B leads, but shared inboxes and changed addresses create exceptions. Phone can be a secondary signal. Names alone should rarely trigger an automatic merge. Decide which combinations create a match, a possible match, or a new record.
3. Protect source history
A returning contact is not a new person, but the new submission is still a new event. Keep first-touch source, latest-touch source, form name, campaign/UTM values, submission time, and requested offer as event or attribution data instead of overwriting everything on the contact.
4. Choose field precedence
For each field, decide whether the newest valid value wins, the oldest verified value wins, an empty field may be filled, or a human must review conflicts. This is especially important for lifecycle stage, owner, consent, company, and access-related fields.
5. Test automation re-entry
Merging or updating a contact can retrigger nurture, lead assignment, internal alerts, opportunity creation, and membership access. Test with controlled records before bulk cleanup, and keep an export or rollback path.
A useful QA set includes: same email/different phone, same phone/different email, Gmail alias, shared company inbox, changed surname, returning customer, unsubscribed contact, existing opportunity, and an active course/member record.
The key distinction is person versus event: one person may submit many times, and the CRM should retain those events without creating a new identity every time.
What matching rule has caused the most trouble in your CRM: email, phone, imports, or form integrations?