> ## Documentation Index
> Fetch the complete documentation index at: https://docs.narrative.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Evaluating Identity Data Providers

> A structured framework for choosing between graph enrichment and addressability expansion providers and measuring their incremental value

An organization maturing its identity strategy faces a common challenge: dozens of third-party identity providers offer overlapping capabilities, and it is not always clear which providers deliver incremental value versus redundant coverage. This cookbook provides a structured evaluation process for choosing between [graph enrichment](/concepts/identifiers/graph-enrichment) and [addressability expansion](/concepts/identifiers/addressability) providers and measuring their contribution.

## What this cookbook covers

This cookbook walks through a five-step evaluation process:

1. Define whether you need graph enrichment, addressability expansion, or both
2. Baseline your current identity graph and match rates
3. Select providers for proof-of-concept testing
4. Measure each provider's incremental contribution
5. Evaluate commercial terms and build a layered strategy

The result is a repeatable framework you can apply each time you evaluate a new provider or renegotiate an existing relationship.

## Prerequisites

Before starting, ensure you have:

* Familiarity with [identity graph concepts](/concepts/identifiers/identity-graph)
* Understanding of [graph enrichment](/concepts/identifiers/graph-enrichment) and [addressability expansion](/concepts/identifiers/addressability)
* A first-party dataset with identifier mappings in Narrative
* Familiarity with [NQL syntax](/nql/general/syntax)
* Understanding of [materialized views](/concepts/nql/materialized-views)

***

## Step 1: Define your primary objective

Start by identifying which problem you are solving:

**Choose graph enrichment if:**

* Your audience segments feel fragmented—the same customers appear as multiple profiles
* Your frequency capping is ineffective because you cannot recognize users across devices
* Your attribution is unreliable because conversion paths break across identifier boundaries
* You need to improve person-level or household-level resolution before activation

**Choose addressability expansion if:**

* Your segmentation is sound but match rates on activation platforms are low
* You have strong first-party identity but limited identifier type diversity
* You are expanding to new activation channels (CTV, programmatic audio, digital out-of-home) that use identifier types you do not currently have
* You need immediate lift in campaign reach without changing your targeting logic

**Choose both if:**

* You have fragmented profiles (graph enrichment problem) AND low platform match rates (addressability problem)
* You are building identity infrastructure for the first time and need both resolution and reach

Most organizations eventually need both, but the sequencing matters. Graph enrichment typically comes first because better resolution improves the accuracy of everything downstream, including addressability expansion.

***

## Step 2: Baseline your current state

Before evaluating any provider, measure where you stand today.

### For graph enrichment: measure graph structure

```sql theme={null}
-- Count connected component sizes in your first-party graph
SELECT
    component_size,
    COUNT(1) AS component_count,
    SUM(component_size) AS total_identifiers
FROM (
    SELECT
        seed.internal_user_id,
        COUNT(DISTINCT seed."_rosetta_stone"."unique_identifier"."value") AS component_size
    FROM company_data."first_party_graph" seed
    GROUP BY seed.internal_user_id
)
GROUP BY component_size
ORDER BY component_size
```

Key metrics to record:

| Metric                           | What it tells you                                               |
| -------------------------------- | --------------------------------------------------------------- |
| **Singleton percentage**         | Share of profiles with only one identifier—these are unresolved |
| **Average component size**       | How many identifiers per resolved profile                       |
| **Deterministic coverage**       | Share of linkages based on direct observation vs. inference     |
| **Identifier type distribution** | Which identifier types you have and which you lack              |

### For addressability expansion: measure match rates

```sql theme={null}
-- Count identifiers by type in your first-party data
SELECT
    seed."_rosetta_stone"."unique_identifier"."type" AS id_type,
    COUNT(DISTINCT seed."_rosetta_stone"."unique_identifier"."value") AS unique_ids,
    COUNT(DISTINCT seed.internal_user_id) AS unique_users
FROM company_data."crm_seed" seed
GROUP BY seed."_rosetta_stone"."unique_identifier"."type"
```

Record your current match rates on each activation platform you use. These become the baseline against which you measure provider lift.

***

## Step 3: Select providers for proof of concept

### For graph enrichment providers

Evaluate candidates on:

* **Linkage methodology.** Deterministic linkages from login events are more reliable than probabilistic linkages from behavioral signals. Understand each provider's methodology mix.
* **Update cadence.** Identity data has a shelf life. Providers that refresh linkages monthly are more valuable than those refreshing quarterly.
* **Incremental coverage.** A provider whose linkages overlap 90% with your existing graph adds less value than one with 40% overlap and 60% net new edges.

### For addressability expansion providers

Evaluate candidates on:

* **Identifier type coverage.** If you need MAIDs for programmatic and hashed phones for social, ensure the provider covers both.
* **Platform-specific match rates.** Ask providers for benchmark match rates on the specific platforms you activate on.
* **Freshness guarantees.** Appended identifiers that are six months old will have significantly lower match rates than those observed within the last 30 days.

### How to evaluate incremental vs. overlapping coverage

Use NQL to measure overlap between a candidate provider and your existing data:

```sql theme={null}
-- Measure identifier overlap with a candidate provider
SELECT
    provider."_rosetta_stone"."unique_identifier"."type" AS id_type,
    COUNT(DISTINCT provider."_rosetta_stone"."unique_identifier"."value") AS provider_total,
    COUNT(DISTINCT CASE
        WHEN seed."_rosetta_stone"."unique_identifier"."value" IS NOT NULL
        THEN provider."_rosetta_stone"."unique_identifier"."value"
    END) AS overlapping,
    COUNT(DISTINCT CASE
        WHEN seed."_rosetta_stone"."unique_identifier"."value" IS NULL
        THEN provider."_rosetta_stone"."unique_identifier"."value"
    END) AS net_new
FROM external_provider."candidate_identity_data" provider
LEFT JOIN company_data."first_party_graph" seed
    ON provider."_rosetta_stone"."unique_identifier"."value" = seed."_rosetta_stone"."unique_identifier"."value"
    AND provider."_rosetta_stone"."unique_identifier"."type" = seed."_rosetta_stone"."unique_identifier"."type"
GROUP BY provider."_rosetta_stone"."unique_identifier"."type"
```

***

## Step 4: Measure incremental contribution

Run a time-boxed proof of concept with each shortlisted provider and measure specific outcomes.

### For graph enrichment: measure structural improvement

| Metric                    | How to calculate                                           | What good looks like                                   |
| ------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ |
| **Net new edges**         | Count linkages the provider adds that you did not have     | Higher is better, but quality matters more than volume |
| **Component size change** | Compare average component size before and after            | Modest, consistent growth (not sudden large merges)    |
| **Singleton reduction**   | Change in percentage of single-identifier profiles         | Direct measure of resolution improvement               |
| **Cross-device reach**    | Percentage of profiles with identifiers on 2+ device types | Measures practical multi-device capability             |

### For addressability expansion: measure activation lift

| Metric                            | How to calculate                                                      | What good looks like                        |
| --------------------------------- | --------------------------------------------------------------------- | ------------------------------------------- |
| **Match rate lift by platform**   | (New match rate - baseline match rate) / baseline match rate          | Varies by platform; 20%+ lift is meaningful |
| **Incremental addressable users** | Users matchable after expansion minus users matchable before          | The absolute reach improvement              |
| **Cost per incremental match**    | Provider cost / incremental matched users                             | Compare across providers for efficiency     |
| **Identifier freshness**          | Percentage of appended identifiers observed within last 30/60/90 days | Fresher identifiers match at higher rates   |

### Measuring before and after in Narrative

Create materialized views that capture your baseline and post-enrichment states:

```sql theme={null}
-- Baseline: unique users matchable by identifier type
CREATE MATERIALIZED VIEW "identity_baseline"
DISPLAY_NAME = 'Identity Baseline - Pre-Enrichment'
DESCRIPTION = 'Baseline identifier coverage before provider enrichment'
TAGS = ('identity', 'evaluation', 'baseline')
WRITE_MODE = 'overwrite'
AS
SELECT
    seed."_rosetta_stone"."unique_identifier"."type" AS id_type,
    COUNT(DISTINCT seed.internal_user_id) AS unique_users,
    COUNT(DISTINCT seed."_rosetta_stone"."unique_identifier"."value") AS unique_ids
FROM company_data."crm_seed" seed
GROUP BY seed."_rosetta_stone"."unique_identifier"."type"
```

```sql theme={null}
-- Post-enrichment: unique users matchable after provider data is incorporated
CREATE MATERIALIZED VIEW "identity_post_enrichment"
DISPLAY_NAME = 'Identity Post-Enrichment - Provider A'
DESCRIPTION = 'Identifier coverage after incorporating Provider A data'
TAGS = ('identity', 'evaluation', 'post-enrichment')
WRITE_MODE = 'overwrite'
AS
SELECT
    combined_id_type AS id_type,
    COUNT(DISTINCT internal_user_id) AS unique_users,
    COUNT(DISTINCT combined_id_value) AS unique_ids
FROM (
    SELECT
        seed.internal_user_id,
        seed."_rosetta_stone"."unique_identifier"."type" AS combined_id_type,
        seed."_rosetta_stone"."unique_identifier"."value" AS combined_id_value
    FROM company_data."crm_seed" seed
    UNION
    SELECT
        seed.internal_user_id,
        provider."_rosetta_stone"."unique_identifier"."type" AS combined_id_type,
        provider."_rosetta_stone"."unique_identifier"."value" AS combined_id_value
    FROM company_data."crm_seed" seed
    INNER JOIN external_provider."provider_a_data" provider
        ON seed."_rosetta_stone"."unique_identifier"."value" = provider."_rosetta_stone"."unique_identifier"."value"
        AND seed."_rosetta_stone"."unique_identifier"."type" = provider."_rosetta_stone"."unique_identifier"."type"
)
GROUP BY combined_id_type
```

***

## Step 5: Evaluate commercial terms

Identity data pricing varies significantly. Consider:

| Factor                    | Graph enrichment considerations                                                                       | Addressability expansion considerations                                     |
| ------------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| **Pricing model**         | Flat licensing or per-linkage pricing; understand cost per incremental edge                           | CPM-based or per-record pricing; understand cost per incremental match      |
| **Use case restrictions** | Some providers restrict derived-data usage or require separate licensing for analytics vs. activation | Some providers restrict which platforms you can activate on                 |
| **Refresh costs**         | Ongoing costs for linkage updates; stale linkages degrade value                                       | Ongoing costs for identifier refresh; churned identifiers waste spend       |
| **Data sovereignty**      | Where linkage data is stored and processed; relevant for GDPR/CCPA compliance                         | Whether appended identifiers can be stored or must be used in-flight        |
| **Pass-through rights**   | Whether you can use enriched profiles with downstream partners                                        | Whether expanded identifiers can be shared with agency or platform partners |

***

## The layered identity strategy

Most mature identity strategies follow a phased approach:

### Phase 1: Graph foundation

Build your first-party graph with deterministic linkages from login events, CRM data, and transaction records. This is your highest-confidence data and forms the foundation for everything else.

### Phase 2: Addressability expansion

Once your graph foundation is solid, expand addressability to improve activation reach. This delivers immediate, measurable ROI through higher match rates and broader campaign reach.

### Phase 3: Graph enrichment

With addressability established, invest in graph enrichment to improve structural resolution. Better resolution improves segmentation accuracy, frequency capping, and attribution—benefits that compound over time.

### Phase 4: Continuous measurement

Identity is not a one-time project. Establish ongoing measurement of graph quality, match rates, and provider contribution. Re-evaluate providers annually as the identity landscape shifts with privacy regulations, platform changes, and new identifier standards.

***

## Summary

| Decision point               | Key question                                                    | Primary metric                                          |
| ---------------------------- | --------------------------------------------------------------- | ------------------------------------------------------- |
| **Enrichment vs. expansion** | Is your problem fragmented profiles or low match rates?         | Singleton % vs. platform match rates                    |
| **Provider selection**       | Does this provider add incremental value or redundant coverage? | Net new edges or net new matched users                  |
| **Quality validation**       | Are new linkages or identifiers reliable?                       | Component size distribution or identifier freshness     |
| **Commercial fit**           | Does the pricing align with the incremental value delivered?    | Cost per incremental edge or cost per incremental match |

***

## Related content

<CardGroup cols={2}>
  <Card title="Identity Graphs" icon="diagram-project" href="/concepts/identifiers/identity-graph">
    Core concepts behind identity graph structure
  </Card>

  <Card title="Graph Enrichment" icon="circle-nodes" href="/concepts/identifiers/graph-enrichment">
    Strengthening graph structure with third-party linkage data
  </Card>

  <Card title="Addressability Expansion" icon="bullseye-arrow" href="/concepts/identifiers/addressability">
    Improving activation reach by appending identifiers
  </Card>

  <Card title="Data Activation" icon="rocket" href="/concepts/data-activation/overview">
    Delivering audiences to destination platforms
  </Card>

  <Card title="Demographic Enrichment" icon="users" href="/cookbooks/use-cases/demographic-enrichment">
    A related pattern: enriching records with demographic attributes
  </Card>
</CardGroup>
