On this page

How the matching is configured

The indexer: four ways of grouping

MappingMatchingKeysGroups found
by-tax-idExacttaxId84
by-emailExact, case and accents normalizedemail76
by-name-postcodeFuzzy, combined, up to 2 typosfullName + postcode106
by-phoneExactphone84

The customer cleaning pipeline stores phone values in one canonical form. That lets the exact phone mapping find 84 duplicate groups, even when the source files use formats such as 611000000 and +34 611 00 00 00.

The classifier: weights and two thresholds

SettingValue
Match threshold0.85, equivalent to a reported score of 85
Non-match threshold0.55, equivalent to a reported score of 55
Review above bucket size10 records
ColumnWeight
taxId3.0
email2.0
fullName2.0
phone1.5
street1.0
postcode0.5
city0.5

The initial customer sample has 350 candidate groups: 349 classified MATCH and one classified REVIEW.

After cleaning, Ana’s two CRM records have the same canonical phone. Their comparison scores are above the match threshold. The Javier near miss remains in REVIEW; matching names and postcodes do not make the differing tax identifiers safe to merge.

The merger: which record survives

sample-customer-merger sorts on contractDate and keeps the highest. In this data the most recently contracted record is always the clean 2024 CRM original rather than the 2022 re-registration or the 2021 billing row.

Inspect the contributing values before adopting a date-based precedence rule. A newer contract date does not generally establish that a record is more accurate.

The steward, installed but not attached

sample-customer-steward ships with the sample and is deliberately not attached to the entity. The entity is DUPLICATES, not AUTO_DUPLICATES. This keeps the initial candidate groups available for the manual exercises.

The rules run in this order:

  1. leave-large-buckets-to-a-human ignores groups with nine or more records.
  2. auto-merge-same-tax-id merges groups found by by-tax-id and classified MATCH.
  3. queue-fuzzy-name-matches-for-review excludes by-name-postcode groups from automatic merging.

The first rule that selects a group acts on it. Place the size guard before the merge rule so that groups meeting the size limit are excluded from merging.

To attach it, see Configure a steward. Setting steward on a DUPLICATES entity is accepted and persisted but creates no scheduling; the entity has to be AUTO_DUPLICATES and in automatic mode.

Use the design review to consider a solution beyond the sample.

Golden 3.0.0 · Published 2026-10-13