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

# Person Enrich examples

> Enrich person profiles by business email or in batch, with similarity scoring and multi-profile requests.

This page collects example recipes for
[Person Enrich](/person-docs/enrichment/introduction). Each example is a full working
request you can copy, paste, and adapt.

For the core walkthrough (first enrichment by profile URL, response shape),
see [Person Enrich](/person-docs/enrichment/introduction). For the request/response schema
and errors, see [Enrich reference](/person-docs/enrichment/reference).

<Note>
  Replace `YOUR_API_KEY` in each example with your actual API key. All
  requests require the `x-api-version: 2025-11-01` header.
</Note>

***

## Reverse lookup: find a person from a business email

You do not always have a profile URL. If you have a business email, use
`business_emails` to reverse-lookup the person behind the address.

<CodeGroup>
  ```bash Request theme={"theme":"vitesse-black"}
  curl --request POST \
    --url https://api.crustdata.com/person/enrich \
    --header 'authorization: Bearer YOUR_API_KEY' \
    --header 'content-type: application/json' \
    --header 'x-api-version: 2025-11-01' \
    --data '{
      "business_emails": ["abhilash@crustdata.com"],
      "min_similarity_score": 0.8
    }'
  ```

  ```json Response theme={"theme":"vitesse-black"}
  [
      {
          "matched_on": "abhilash@crustdata.com",
          "match_type": "business_email",
          "matches": [
              {
                  "confidence_score": 1.0,
                  "person_data": {
                      "basic_profile": {
                          "name": "Abhilash Chowdhary",
                          "headline": "Co-founder at Crustdata (YC F24) | Real-time B2B data for AI agents",
                          "current_title": "Co-Founder & CEO",
                          "summary": "Love building things. A software engineer with vast experience in shipping products spanning robotics, web technologies and quantitative finance.",
                          "location": {
                              "city": null,
                              "continent": null,
                              "country": null,
                              "raw": "San Francisco, California, United States",
                              "state": null
                          }
                      },
                      "contact": {
                          "phone_numbers": [],
                          "websites": [
                              "https://crustdata.com?utm_source=linkedin&utm_medium=organic_social&utm_campaign=abhilash_bio"
                          ]
                      },
                      "crustdata_person_id": 1068035,
                      "social_handles": {
                          "twitter_identifier": {}
                      }
                  }
              }
          ]
      }
  ]
  ```
</CodeGroup>

<Note>Response trimmed for clarity.</Note>

### How email reverse lookup works

When you submit a business email, the API resolves it to a public person
profile. The response structure is identical to a profile URL lookup, but
`match_type` is `business_email` and `matched_on` shows the email you
submitted.

The `min_similarity_score` parameter controls how strict the matching is. A
value of `0.8` means the API only returns matches where it is at least 80%
confident the email belongs to the person. Higher values give fewer but more
reliable results.

| `min_similarity_score` | When to use                                                     |
| ---------------------- | --------------------------------------------------------------- |
| `0.9` – `1.0`          | High-confidence workflows (CRM enrichment, automated pipelines) |
| `0.7` – `0.8`          | Balanced accuracy for most use cases                            |
| `0.5` – `0.6`          | Exploratory lookups where you will manually verify              |
| Not set                | Returns all matches regardless of confidence                    |

***

## Handle no-match results

Not every identifier will resolve to a person. When there is no match, the
`matches` array is empty.

<CodeGroup>
  ```bash Request theme={"theme":"vitesse-black"}
  curl --request POST \
    --url https://api.crustdata.com/person/enrich \
    --header 'authorization: Bearer YOUR_API_KEY' \
    --header 'content-type: application/json' \
    --header 'x-api-version: 2025-11-01' \
    --data '{
      "business_emails": ["nonexistent@unknowndomain.com"],
      "min_similarity_score": 0.8
    }'
  ```

  ```json Response theme={"theme":"vitesse-black"}
  [
      {
          "matched_on": "nonexistent@unknowndomain.com",
          "match_type": "business_email",
          "matches": []
      }
  ]
  ```
</CodeGroup>

You still get a response entry for the identifier — `matched_on` tells you
which input had no match. This makes it easy to track which lookups
succeeded and which need a different approach.

***

## Batch enrichment: look up multiple people at once

You can enrich up to **25 identifiers** in a single request. The response
returns one entry per identifier, in the same order you submitted them.

<CodeGroup>
  ```bash Request theme={"theme":"vitesse-black"}
  curl --request POST \
    --url https://api.crustdata.com/person/enrich \
    --header 'authorization: Bearer YOUR_API_KEY' \
    --header 'content-type: application/json' \
    --header 'x-api-version: 2025-11-01' \
    --data '{
      "professional_network_profile_urls": [
        "https://www.linkedin.com/in/dvdhsu/",
        "https://www.linkedin.com/in/abhilashchowdhary/"
      ]
    }'
  ```

  ```json Response theme={"theme":"vitesse-black"}
  [
      {
          "matched_on": "https://www.linkedin.com/in/dvdhsu/",
          "match_type": "professional_network_profile_url",
          "matches": [
              {
                  "confidence_score": 1.0,
                  "person_data": {
                      "basic_profile": {
                          "name": "David Hsu",
                          "headline": "Founder, CEO @ Retool",
                          "current_title": "Founder, CEO",
                          "location": {
                              "city": "San Francisco",
                              "state": "California",
                              "country": "United States",
                              "continent": "North America",
                              "raw": "San Francisco Bay Area"
                          }
                      },
                      "social_handles": {
                          "professional_network_identifier": {
                              "profile_url": "https://www.linkedin.com/in/dvdhsu"
                          }
                      }
                  }
              }
          ]
      },
      {
          "matched_on": "https://www.linkedin.com/in/abhilashchowdhary/",
          "match_type": "professional_network_profile_url",
          "matches": [
              {
                  "confidence_score": 1.0,
                  "person_data": {
                      "basic_profile": {
                          "name": "Abhilash Chowdhary",
                          "headline": "Co-founder at Crustdata (YC F24) | Real-time B2B data for AI agents",
                          "current_title": "Co-Founder & CEO",
                          "location": {
                              "city": "San Francisco",
                              "state": "California",
                              "country": "United States of America",
                              "continent": "North America",
                              "raw": "San Francisco, California, United States"
                          }
                      },
                      "social_handles": {
                          "professional_network_identifier": {
                              "profile_url": "https://www.linkedin.com/in/abhilashchowdhary"
                          }
                      }
                  }
              }
          ]
      }
  ]
  ```
</CodeGroup>

<Note>Response trimmed for clarity.</Note>

### Batch enrichment tips

* The maximum batch size is **25 identifiers** per request.
* You must use **one identifier type** per request — either all profile URLs or all emails, not a mix.
* Each entry in the response corresponds to the input at the same position, so you can match results back to your input list by index.
* If some identifiers fail to match, their `matches` array will be empty, but the request still succeeds for the others.

***

## Choosing between profile URL and email enrichment

Both paths return the same `person_data` shape, but they work differently.

|                 | Profile URL                                           | Business email                                               |
| --------------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| **Identifier**  | `professional_network_profile_urls`                   | `business_emails`                                            |
| **Match type**  | Direct lookup — the URL uniquely identifies a profile | Reverse lookup — the API infers which profile owns the email |
| **Confidence**  | Always `1.0` (exact match)                            | Varies. Use `min_similarity_score` to control the threshold  |
| **Best for**    | When you already have the profile URL                 | When you only have an email                                  |
| **Batch limit** | Up to 25 URLs per request                             | Up to 25 emails per request                                  |

***

## Common workflow: Search then Enrich

The most powerful pattern combines [Person Search](/person-docs/search/introduction) with
Person Enrich. Search finds people matching your criteria; Enrich gets the
full profile for each match.

**Step 1:** Search for decision-makers at a target company.

```bash theme={"theme":"vitesse-black"}
curl --request POST \
  --url https://api.crustdata.com/person/search \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "filters": {
      "op": "and",
      "conditions": [
        {
          "field": "experience.employment_details.current.company_name",
          "type": "in",
          "value": ["Retool"]
        },
        {
          "field": "experience.employment_details.current.title",
          "type": "(.)",
          "value": "VP|Director|Head of"
        }
      ]
    },
    "limit": 5
  }'
```

**Step 2:** Take the profile URLs from the search results and enrich them
for full profiles.

```bash theme={"theme":"vitesse-black"}
curl --request POST \
  --url https://api.crustdata.com/person/enrich \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "professional_network_profile_urls": [
      "https://www.linkedin.com/in/dvdhsu/",
      "https://www.linkedin.com/in/abhilashchowdhary/"
    ]
  }'
```

This two-step pattern is the foundation for most sales, recruiting, and
research workflows. Search narrows the universe; Enrich fills in the
details.

***

## Next steps

* [Reference](/person-docs/enrichment/reference) — request parameters, valid `fields` values, `person_data` sections, and errors.
* [Enrich reference](/person-docs/enrichment/reference) — request parameters, response fields, advanced flags, errors.
* [Person Live Enrich](/person-docs/enrichment/live-enrich) — fetch fresh profile data from the web when cached enrich is not enough.
