---
cuppy_hub: salesforce
cuppy_path: reference/data360/identity-resolution.md
cuppy_section: docs
cuppy_doc: K4GN-7RVN
cuppy_doc_uuid: 0bd5c051-2e9d-448d-98c3-1f771326dff5
cuppy_permalink: https://cuppy.io/salesforce/d/K4GN-7RVN
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/salesforce/docs/reference/data360/identity-resolution
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: 18635720d5f9e0630da6030aaf19ade0cfa2240eaf2ecbee9c5f56e8fbcdad51
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# Identity resolution and golden records

A **ruleset** unifies one object, Individual (people) or Account (companies), inside one data space. It produces:
- a **unified DMO**: the golden record, holding reconciled attributes and no source data;
- a **link DMO**: one row per source record, pointing to its unified record, so you can traverse from source to unified and back.

## Rules

| Kind | Options | Use for accounts, people and orders |
|---|---|---|
| **Match rules** (any rule matching links records) | Exact on any field; **fuzzy** on names; **normalized** on email, phone and address | People: fuzzy first name + exact last name + normalized email, then normalized phone + exact last name. Accounts: exact account number, then normalized name + normalized billing address or phone |
| **Reconciliation rules** (which value the golden record keeps) | **Last updated**, **most frequent** (null is never chosen), **source priority** (your source order) | Contact points: last updated. Names: source priority with CRM first. Account type and industry: most frequent |

Order data is never unified itself. Orders join to golden records through the link DMOs (`reference/data360/insights-and-data-graphs.md`).

## Objects created

| Ruleset object | Unified DMO | Link DMO |
|---|---|---|
| Individual | `UnifiedIndividual__dlm` | `IndividualIdentityLink__dlm` (Salesforce's Trailhead SQL) |
| Account | Unified Account | `UnifiedLinkssotAccount__dlm` (per a community guide) |

With a second ruleset, the ruleset ID is appended to the names; the Salesforce workshop's object is "Unified Individual ccid". **Resolve the names at run time** by listing DMOs, as `guides/data360/automate-the-golden-record-pipeline.md` does.

## API

| Call | Endpoint (under `/services/data/v66.0/ssot`) |
|---|---|
| List or create rulesets | `GET` / `POST /identity-resolutions` |
| Read, update or delete one | `GET` / `PATCH` / `DELETE /identity-resolutions/{id}`. Every item endpoint is keyed by ID, per the community plugin |
| Run now | `POST /identity-resolutions/{id}/actions/run-now` |

- **The create body's fields** are `label`, `description`, `configurationType` (the object), `rulesetId`, `matchRules`, `reconciliationRules` (required) and `doesRunAutomatically`, per Salesforce's Connect API reference.
- **The nested shapes** of match criteria and reconciliation rules didn't render for the hub. Capture them from a working org instead of writing them by hand:
  1. Build the ruleset once in the UI.
  2. Run `GET /identity-resolutions/{id}`.
  3. Drop `id`, status and run fields, and commit the JSON.
  4. `POST` it to other orgs.
  `guides/data360/automate-the-golden-record-pipeline.md` does this. Data kits are the supported alternative (`reference/data360/automation-and-data-kits.md`).
- **Reading status:** responses carry `status`, `lastRunStatus` and `matchedRate` (field names seen by the community plugin). Poll until the last run succeeded. A first run "can take up to 30 minutes", per Salesforce's workshop.

## Limits

These are from a community guide (2025). Check the current Data 360 limits page before you design around them:
- 2 rulesets per data model object per data space;
- on-demand runs up to **4 times per 24 hours** per ruleset;
- scheduled runs every 24 hours by default, skipped when nothing changed.

Each run consumes Data 360 credits (family 10).

## Measure the golden records

```sql
SELECT COUNT(*) AS source_records, COUNT(DISTINCT l.UnifiedRecordId__c) AS golden_records
FROM IndividualIdentityLink__dlm l
```

- The consolidation rate is `1 - golden_records / source_records`. Track it per run; a sudden jump usually means an over-broad match rule.
- **Field names on link DMOs vary with the ruleset.** `UnifiedRecordId__c` is the hub's reading of the Trailhead query. Confirm the names with `GET /ssot/data-model-objects/{link DMO}` before relying on this SQL.

## Failures

| Symptom | Cause → fix |
|---|---|
| Unified DMO missing or empty | The ruleset hasn't run, or the run failed. Read `lastRunStatus`, then run now |
| Run-now refused | The daily on-demand limit was reached. Wait for the scheduled run |
| Unrelated people merged | A match rule on a shared value (a company switchboard number, a generic email). Remove it or combine it with a name match |
| Duplicates not merged | Contact points aren't mapped (Contact Point Email or Phone), or normalization doesn't apply to that field |
| Account ruleset finds nothing | The Account mappings it needs are missing, or the account DLO isn't profile data (`reference/data360/streams-and-mapping.md`) |
| SQL fails on the unified name | A second ruleset changed the object names. Re-resolve them |


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 376 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/salesforce/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
