Skip to Content
CoursesCRM Enrichment03 Match and dedupe

Match Fields and Dedupe

Outcome: duplicates identified with a chosen survivor per group, a field mapping between your table and the CRM, and nothing merged automatically that a human has not confirmed.

Surface
Sync GTM app
Level
Intermediate
Uses
Formula columns · CRM integration
Credits
0
Prerequisite
Lesson 02's imported slice

Normalize before you compare

Duplicate detection is only as good as the normalization underneath it.

FieldNormalization
DomainLowercase, strip protocol, www., path and query
EmailLowercase, trim
LinkedIn URLLowercase, canonical /in/ form, strip query and trailing slash
Company nameTrim, fix casing, strip legal suffix into its own column
Person nameTrim, fix casing, split first and last

Do all of this into new columns. Never overwrite the CRM’s value — you may need to write it back unchanged, and you certainly need it to compare against.


The match key

Record typeKeyFallback
AccountNormalized root domainCompany LinkedIn URL
ContactNormalized emailLinkedIn profile URL
Contact, no emailLinkedIn profile URLName + account key

Never dedupe accounts on company name. “Acme”, “Acme Inc.”, “ACME Corporation” and “Acme, Inc” are four strings and one company — and worse, two genuinely different companies can share a name. A false merge is far more damaging than a duplicate: it is invisible in the table, it corrupts every number downstream, and it cannot be reliably undone.


Finding the duplicates

Group by the normalized key

Any group of more than one is a duplicate set.

Count and inspect

Read twenty groups by hand. You will find patterns — a bad import, a form that created contacts without checking, a merge that half-completed.

Classify the cause

Duplicates from one cause can often be fixed in bulk. Duplicates from many causes need review.

Flag near-matches separately

Same company name, different domain. Same person name, different email. These go to a review queue, never to an automatic merge.


Choosing a survivor

For each duplicate group, one record survives and the others are merged into it. Choose by rule, not by whichever appears first.

RulePriority
Has an open opportunityHighest — never merge away an active deal
Most recent activityStrong
Most complete — fewest empty fieldsStrong
Oldest created dateWeak, but a reasonable tiebreak
Has a named ownerPrefer over unowned

Then merge field by field: take the most recent value for volatile fields, the verified value for contact data, and never overwrite anything a human wrote — notes, disqualification reasons, custom text.


Field mapping

Write the mapping down before any repair work. For each field:

crm_field the destination table_column the source source_of_truth crm | syncgtm | verified-wins on_conflict newest | verified | never-overwrite

That table is what lesson 06 executes. Making the decisions now, in the calm, is what prevents an argument later about why a rep’s note disappeared.


Do this now

Build the normalization columns

Into new columns, never overwriting.

Set the match key per record type

Group and count duplicates

Record the number — it is one of the findings from lesson 01.

Read twenty duplicate groups

Classify the causes.

Apply the survivor rules

One survivor per group, chosen by rule.

Route near-matches to review

Never auto-merge them.

Write the field mapping table

Every field you intend to touch.


Check your work

  • Normalization went into new columns
  • The match key is a domain, email or profile URL — never a name
  • Every duplicate group has a chosen survivor
  • Near-matches are queued for human review
  • The field mapping table exists, with a source of truth per field

Where this breaks

Merging an account that has an open opportunity into another record can move or orphan the deal, depending on your CRM. That is a revenue-affecting mistake, and it is entirely avoidable: check for open opportunities before any merge and exclude those groups from automatic handling. If both records in a group have opportunities, a human decides.


Further automation

Fix duplicates at the source as well as in the data. Most duplicate creation traces to two or three causes — an unchecked form, an import without dedupe, a sync creating rather than matching. Cleaning the data without fixing the cause means doing this again next quarter.


Next lesson

04 — Fill the gaps, completing empty fields without touching populated ones.

Reference for this lesson: CRM integrations, Import, Tables, GTM Engineering — dedupe and hygiene.