How Identity Resolution works
This page explains the mechanics behind Profile Resolution, matching, golden records, and Event Stitching. For the setup flow, see Create your first Profile Resolution project.
Overview
Identity Resolution runs in two stages:
Profile Resolution builds the resolved profile spine.
Event Stitching builds a separate event profile graph from event records.
Profile records can create or merge resolved profiles. Event records can create or merge event profiles, but they do not create dinmo_id values or update the golden record.

Profile Resolution
Profile Resolution takes profile-like source models, such as CRM contacts, ecommerce customers, app users, subscribers, or support contacts.
DinMo standardizes configured identifiers, applies matching rules, and groups records that represent the same person or entity.
The result is a set of resolved profiles, each identified by a dinmo_id.
Identifiers
Identifiers are the values used to connect records.
Common examples include:
email
phone
user ID
customer ID
CRM contact ID
anonymous ID
device ID
For each identifier, you map the relevant source columns from each participating model. Identifier configuration, standardization, criteria, and conflict limits are covered in Matching rules.
DinMo standardizes identifiers before matching. At a minimum, values are trimmed and case-normalized. Additional identifier cleaning may be available depending on your configuration and identifier type.
Matching rules
A matching rule defines when records should be linked. A rule is made of one or more criteria.
Rules can be simple:
match on exact email
match on exact user ID
Rules can also be composite:
exact email and exact phone
exact email and fuzzy last name
Criteria inside the same rule must all match. Multiple rules act as alternatives. See Matching rules for the full AND/OR model and match type definitions.
Fuzzy matching
Anchored fuzzy matching helps with small variations in values such as names.
For example:
the email criterion creates a high-confidence exact block
the last-name criterion can compare similar values inside that block
This makes fuzzy matching safer than comparing every record with every other record.
Guardrails and unresolved records
Identity Resolution includes guardrails to avoid unsafe merges.
Examples:
blocking known bad identifier values
limiting how many unique values of an identifier can exist inside one profile
If a record or cluster cannot safely be resolved, DinMo exposes it in unresolved outputs so you can inspect and improve the configuration. These outputs are available in the Audit tab and in the warehouse output tables.
Golden record creation
After records are resolved, DinMo creates a golden record table.
The golden record contains one row per dinmo_id. Each field can be selected with survivorship rules, such as:
Last non null
Uses the latest available non-empty value.
Model Priority Order
Prefers values from configured source models first.
Most frequent
Uses the value that appears most often in the resolved profile.
This means the golden record can combine the best values from multiple source records.
Event Stitching
Event Stitching connects event records into event profiles.
An event can be stitched when it carries an identifier that matches an existing event profile or creates a safe new one. For example, an event with an email, user ID, anonymous ID, or device ID can be connected to other events when the configured identifier policy allows it.
Event Stitching helps answer:
which event profile does this event belong to?
which identifier contributed to the link?
which identifiers were blocked, expired, or demoted?
how event coverage changes by source and run?
Event Stitching does not replace Profile Resolution. It creates dinmo_stitched_profile_id; Profile Resolution creates dinmo_id and the golden record.
ID stability
dinmo_id is designed to remain stable across normal runs. In most cases, existing resolved profiles keep the same dinmo_id as new source records are added or updated.
A dinmo_id may change only in specific situations where the resolved identity graph itself changes, for example when two previously separate profiles are merged after new matching evidence appears, or when matching rules or source data are materially changed.
Downstream systems should treat dinmo_id as the current resolved profile key and use the output and audit tables to monitor merges, unresolved records, and other identity changes across runs.
Last updated

