Data Quality Checks Before Identity Resolution

Identity resolution amplifies bad data. These checks find placeholder emails, shared phones and broken identifiers before they merge the wrong people.

Type
Article
Topic
Data Cloud
Reading time
5 min
Updated
Author
GeekMidst Team
Reviewed by
Site owner
Banner for the GeekMidst article “Data Quality Checks Before Identity Resolution”, covering What to check, and why and Pre-resolution checks

Identity resolution does exactly what your rules tell it to, on whatever data you give it. Give it a shop phone number recorded against two thousand customers and it will try to merge them. Give it customer IDs with and without leading zeros and it will keep the same person apart. An afternoon spent profiling source data before the first ruleset run is cheaper than weeks of explaining odd profiles to the business afterwards.

Checklist of six source data checks before identity resolution: shared values, fill rates, key uniqueness, formats, invalid values and overlap between sources
Profiling sources first prevents over-merging through shared or fake values and under-merging through inconsistent formats. View full size

What to check, and why

Each check below targets a specific failure: either over-merging, where different people become one profile, or under-merging, where one person stays split.

Pre-resolution checks

What you are looking forFailure it causes
Placeholder valuestest@, noemail@, 0000000000, N/A, unknownOver-merging through a shared fake value
Shared contact pointsOne email or phone on many recordsOver-merging through households, role inboxes or staff entries
Format consistencyCase, spaces, country codes, ID prefixesUnder-merging when the same value is written differently
Key uniquenessDuplicate primary keys within a sourceSilent overwrites during ingestion
Fill ratesShare of records with each match field populatedLow match coverage and many single-source profiles
Invalid valuesMalformed emails, impossible dates, short phonesWasted matches and unreachable profiles

Before you start

Run these checks where the data is easiest to query: your warehouse, a staging database or Data Cloud's query tooling against the ingested DLOs. The examples use plain SQL against a sample table called customer_extract with columns customer_id, email, phone, first_name and last_name. Adjust names and functions to your environment; string functions in particular vary between SQL dialects.

Check 1: the most common contact values

The fastest way to find placeholders and shared values is to look at the top of the frequency list. Real personal emails rarely appear more than a handful of times.

sql
SELECT
  LOWER(TRIM(email)) AS email_norm,
  COUNT(*)           AS records
FROM customer_extract
WHERE email IS NOT NULL
GROUP BY LOWER(TRIM(email))
HAVING COUNT(*) > 5
ORDER BY records DESC
Emails shared by more than five records; repeat for phone after stripping spaces and symbols

Review the top fifty results with someone who knows the source. You will usually find a mix of test addresses, staff or store addresses, role inboxes and genuine family sharing. Agree what to do with each category: exclude, null out, or keep but never use as a match key on its own.

Check 2: fill rates for match fields

Match rules can only use fields that are populated. If only a third of loyalty records carry an email, your email-based rule will barely touch that source.

sql
SELECT
  COUNT(*)                                             AS total_records,
  SUM(CASE WHEN email      IS NOT NULL THEN 1 ELSE 0 END) AS with_email,
  SUM(CASE WHEN phone      IS NOT NULL THEN 1 ELSE 0 END) AS with_phone,
  SUM(CASE WHEN first_name IS NOT NULL THEN 1 ELSE 0 END) AS with_first_name,
  COUNT(DISTINCT customer_id)                          AS distinct_ids
FROM customer_extract
Fill rates per match field; if distinct_ids is lower than total_records, the key is not unique

Compare distinct_ids with total_records. A gap means the intended primary key is not unique, and rows will overwrite each other on ingestion. Fix that before building the data stream.

Check 3: formats across sources

Take a sample of the same kind of value from each source and compare them side by side. Typical findings:

  • Phones with and without country code, with spaces, dashes or a leading zero. Agree one format, such as E.164, and standardise in a data transform or in the extract.
  • Customer or loyalty IDs with different prefixes or padding, for example LOY-00123 against 123.
  • Emails with trailing spaces or mixed case. Normalised matching handles some of this, but cleaning first makes results predictable and easier to debug.
  • Names in all capitals in one source and title case in another, which matters for display after reconciliation.

Check 4: invalid and junk values

Look for emails without an @ or a domain, phones that are too short, names like xxx or customer, and birth dates in the future or a century ago. These rarely cause merges, but they create unreachable profiles and clutter segment counts.

Check 5: overlap between sources

Finally, estimate how many people appear in more than one source by joining normalised emails or IDs across extracts. If the CRM and the loyalty platform share almost no emails, either the populations really are different or one source is storing emails in a different format. Both answers change how you write match rules, and the overlap figure gives the business a realistic expectation of how many profiles will actually unify before anyone sees the first count.

Turning findings into rules

  1. Exclude values that are never real, such as test domains and all-zero phones, before mapping.
  2. Guard values that are sometimes shared, such as landlines and generic inboxes, by pairing them with a name in match rules.
  3. Standardise formats in one place, so every source reaches the DMO in the same shape.
  4. Fix upstream where you can: a form that forces a phone number produces fake phone numbers.
  5. Repeat the checks after go-live on a schedule, because new sources and new staff habits bring new problems.

Common mistakes

  • Profiling only the biggest source, while a small one carries the bridging value.
  • Excluding shared values from matching but still sending them to activation, so a role inbox receives personal content.
  • Cleaning in Data Cloud while the source keeps producing bad data, with nobody told.

Checklist

  • Top shared emails and phones reviewed per source.
  • Placeholder list agreed and excluded.
  • Fill rates recorded per match field and source.
  • Primary keys confirmed unique.
  • Formats standardised for phone, email and IDs.
  • Findings shared with source owners.

Want your data profiled before the first ruleset run?

We can run these checks across your sources, agree exclusions with the data owners and hand over a clean starting point for identity resolution.

Request a data quality review →

Tell us what you are trying to fix.

Share your Salesforce setup, goals and constraints. A practitioner reads every message and replies with questions, first thoughts or an honest view of whether you need outside help at all.

Talk to a Salesforce Expert
Book a Consultation