---
type: "firecrawl-provider"
description: "Person and company identity resolution, enrichment and search from a profile, email, domain, ticker or name."
use_when: "Resolving an identity to a person record: one identity in, one profile out, or a shortlist of candidates when the identity is ambiguous. A 404 here means the person is absent from the dataset - unlike search, where an empty result is a 200 with total 0.\n\nCompany firmographics, funding, headcount and job-posting signals, keyed by domain, ticker, social profile or PDL id."
categories: "People"
capabilities: 5
credits_range: "50-60"
---
# People Data Labs on Firecrawl Alexandria

Person and company identity resolution, enrichment and search from a profile, email, domain, ticker or name.

- Categories: People
- Category index: [People category](https://alexandria.firecrawl.dev/agents/categories/people)
- Provider key: `people-data-labs`
- Access: Firecrawl credits
- Cost (Person enrichment): 60 credits per call
- Cost (Bulk person enrichment): 50 credits per record
- Cost (Person search): 50 credits per record
- Cost (Company enrichment): 50 credits per call
- Cost (Company search): 50 credits per record

## More

- [Human guide](https://www.firecrawl.dev/app/alexandria/people-data-labs)
- [OpenAPI spec](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/openapi.json)

## Capabilities

- [Person enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/enrich): One person, under `data`, with fields allowed by the key and data_include. The envelope carries status, likelihood (1-10), and optional matched inputs. Fields depend on bundle entitlement; free plans can return contact-presence booleans.
- [Bulk person enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/bulk): A bare JSON array, one element per request and in request order, each `{ status, likelihood, data, metadata? }`. Elements that did not match carry status 404 and a null record. Each matched person costs 50 credits. A miss, an error row, or an empty record costs nothing, including an all-miss batch. A malformed, unauthenticated or throttled call answers with the ordinary error object instead of an array, so array-ness cannot be assumed from a 200.
- [Person search](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/search): People under `data`, sorted by profile completeness rather than relevance, with `total` and `scroll_token` beside it in the envelope. Each returned person costs 50 credits. A query that matches nothing is a 200 with total 0 and costs nothing, so never read the status code as evidence of results - read total. Missing values may be null, excluded fields absent, and free-plan contact fields booleans.
- [Company enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/company/enrich): Full company record (only representative fields are listed here), with the schema fields at the TOP LEVEL beside `status` and `likelihood` - this endpoint does not wrap them in `data`. Fields the record has no value for come back null rather than absent.
- [Company search](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/company/search): Full company records under `data` (only representative fields are listed here), sorted by profile completeness, with `total` and `scroll_token` in the envelope. A query matching nothing is a 200 with total 0, not a 404 - read total, never the status code.

## 1. Choose this provider when

Resolving an identity to a person record: one identity in, one profile out, or a shortlist of candidates when the identity is ambiguous. A 404 here means the person is absent from the dataset - unlike search, where an empty result is a 200 with total 0.

Company firmographics, funding, headcount and job-posting signals, keyed by domain, ticker, social profile or PDL id.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "people-data-labs",
  "capability": "person/enrich",
  "options": {
    "pdl_id": "<pdl_id>",
    "min_likelihood": 2,
    "include_if_matched": false,
    "titlecase": false
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `pdl_id` (string): PDL person id, from person/search. A hard override: sent alongside anything else, every other match input is ignored. Example: `<pdl_id>`
- `email` (string): Email address. Sufficient on its own. Example: `<email>`
- `email_hash` (string): Hashed email, SHA-256 or MD5. Sufficient on its own, and the input to use when the raw address must not leave your systems. Example: `<email_hash>`
- `phone` (string): Phone number. Sufficient on its own, but it must start with + and the country code or nothing matches. Example: `<phone>`
- `profile` (string): Social profile URL, for example a LinkedIn profile. Sufficient on its own and the most reliable single input. Example: `<profile>`
- `lid` (string): LinkedIn numeric id. Sufficient on its own. Example: `<lid>`
- `birth_date` (string): Birth year or date, YYYY or YYYY-MM-DD. Qualifies as the disambiguator beside a name on person/enrich, but never stands alone. Example: `<birth_date>`
- `name` (string): Full name, or use first_name AND last_name. Enrichment also requires company, school, location, street_address, locality, region, country, postal_code or birth_date. Identify accepts name alone. Example: `<name>`
- `first_name` (string): Given name. Requires last_name; enrichment also needs a disambiguator. Example: `<first_name>`
- `last_name` (string): Family name. Only counts alongside first_name. Example: `<last_name>`
- `middle_name` (string): Middle name. Refines a match and never satisfies the minimum-input rule on its own. Example: `<middle_name>`
- `location` (string): Free-form location, for example "san francisco, california". Qualifies as the disambiguator beside a name. Example: `<location>`
- `locality` (string): City. Qualifies as the disambiguator beside a name. Example: `<locality>`
- `region` (string): State or region. Qualifies as the disambiguator beside a name. Example: `<region>`
- `postal_code` (string): Postal code. Qualifies as the disambiguator beside a name, and is assumed to be US unless country is sent too. Example: `<postal_code>`
- `country` (string): Country. Qualifies as the disambiguator beside a name, though it narrows a common name far less than a locality does. Example: `<country>`
- `street_address` (string): Street address. Qualifies as the disambiguator beside a name. Example: `<street_address>`
- `company` (string): Employer name or website. Qualifies as the disambiguator beside a name. Example: `<company>`
- `school` (string): School name or website. Qualifies as the disambiguator beside a name. Example: `<school>`
- `min_likelihood` (number): Refuse a match below this confidence, 1-10, default 2. At 2 the match is only 10-30% likely to be the record asked for. Raising it turns a weak match into a 404, which is the cheaper answer: a 404 is free here and a wrong record is not. Example: `2`
- `required` (string): Boolean expression over required top-level output fields using AND, OR and parentheses. Fields used as matching inputs cannot also be required. Access depends on the key's field bundles. Example: `<required>`
- `data_include` (string): Comma-separated schema fields to return, dot notation for subfields, a leading `-` to exclude instead, `""` for none. Use it to reduce response size. Example: `-`
- `include_if_matched` (boolean): Return matching inputs: top-level matched for enrichment, or matched_on within Identify candidates. Example: `false`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "people-data-labs",
    capability: "person/enrich",
    options: {
      pdl_id: "<pdl_id>",
      min_likelihood: 2,
      include_if_matched: false,
      titlecase: false,
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "people-data-labs",
  "capability": "person/enrich",
  "options": {
    "pdl_id": "<pdl_id>",
    "min_likelihood": 2,
    "include_if_matched": False,
    "titlecase": False
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "people-data-labs",
    "capability": "person/enrich",
    "options": {
      "pdl_id": "<pdl_id>",
      "min_likelihood": 2,
      "include_if_matched": false,
      "titlecase": false
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'people-data-labs/person/enrich' \
  --options '{"pdl_id":"<pdl_id>","min_likelihood":2,"include_if_matched":false,"titlecase":false}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "people-data-labs",
  "capability": "person/enrich",
  "options": {
    "pdl_id": "<pdl_id>",
    "min_likelihood": 2,
    "include_if_matched": false,
    "titlecase": false
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "people-data-labs",
  "capability": "person/enrich",
  "options": {
    "pdl_id": "<pdl_id>",
    "min_likelihood": 2,
    "include_if_matched": false,
    "titlecase": false
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "data": {
    "job_company_12mo_employee_growth_rate": 0,
    "first_name": "<first_name>",
    "full_name": "<full_name>",
    "id": "<id>",
    "last_initial": "<last_initial>",
    "last_name": "<last_name>",
    "middle_initial": "<middle_initial>",
    "middle_name": "<middle_name>",
    "name_aliases": [],
    "emails": [],
    "mobile_phone": "<mobile_phone>",
    "personal_emails": [],
    "phone_numbers": [],
    "phones": [],
    "recommended_personal_email": "<recommended_personal_email>",
    "work_email": "<work_email>",
    "job_company_facebook_url": "<job_company_facebook_url>",
    "job_company_founded": 0,
    "job_company_employee_count": 0,
    "job_company_id": "<job_company_id>",
    "job_company_industry": "<job_company_industry>",
    "job_company_inferred_revenue": "<job_company_inferred_revenue>",
    "job_company_linkedin_id": "<job_company_linkedin_id>",
    "job_company_linkedin_url": "<job_company_linkedin_url>",
    "job_company_location_continent": "<job_company_location_continent>",
    "job_company_location_country": "<job_company_location_country>",
    "job_company_location_geo": "<job_company_location_geo>",
    "job_company_location_locality": "<job_company_location_locality>",
    "job_company_location_metro": "<job_company_location_metro>",
    "job_company_location_name": "<job_company_location_name>",
    "job_company_location_postal_code": "<job_company_location_postal_code>",
    "job_company_location_region": "<job_company_location_region>",
    "job_company_location_street_address": "<job_company_location_street_address>",
    "job_company_name": "<job_company_name>",
    "job_company_size": "<job_company_size>",
    "job_company_ticker": "<job_company_ticker>",
    "job_company_total_funding_raised": 0,
    "job_company_twitter_url": "<job_company_twitter_url>",
    "job_company_type": "<job_company_type>",
    "job_company_website": "<job_company_website>",
    "inferred_salary": "<inferred_salary>",
    "inferred_salary_low": 0,
    "inferred_salary_high": 0,
    "inferred_salary_confidence": "<inferred_salary_confidence>",
    "job_last_changed": "<job_last_changed>",
    "job_last_verified": "<job_last_verified>",
    "job_onet_code": "<job_onet_code>",
    "job_onet_major_group": "<job_onet_major_group>",
    "job_onet_minor_group": "<job_onet_minor_group>",
    "job_onet_broad_occupation": "<job_onet_broad_occupation>",
    "job_onet_specific_occupation": "<job_onet_specific_occupation>",
    "job_onet_specific_occupation_detail": "<job_onet_specific_occupation_detail>",
    "job_start_date": "<job_start_date>",
    "job_summary": "<job_summary>",
    "job_title": "<job_title>",
    "job_title_class": "<job_title_class>",
    "job_title_levels": [],
    "job_title_role": "<job_title_role>",
    "job_title_sub_role": "<job_title_sub_role>",
    "birth_date": "<birth_date>",
    "birth_year": 0,
    "sex": "<sex>",
    "languages": [],
    "education": [],
    "countries": [],
    "location_continent": "<location_continent>",
    "location_country": "<location_country>",
    "location_geo": "<location_geo>",
    "location_last_updated": "<location_last_updated>",
    "location_locality": "<location_locality>",
    "location_metro": "<location_metro>",
    "location_name": "<location_name>",
    "location_names": [],
    "location_postal_code": "<location_postal_code>",
    "location_region": "<location_region>",
    "location_street_address": "<location_street_address>",
    "regions": [],
    "street_addresses": [],
    "possible_birth_dates": [],
    "possible_emails": [],
    "possible_location_names": [],
    "possible_phones": [],
    "possible_profiles": [],
    "possible_street_addresses": [],
    "facebook_friends": 0,
    "facebook_id": "<facebook_id>",
    "facebook_url": "<facebook_url>",
    "facebook_username": "<facebook_username>",
    "github_url": "<github_url>",
    "github_username": "<github_username>",
    "linkedin_connections": 0,
    "linkedin_id": "<linkedin_id>",
    "linkedin_url": "<linkedin_url>",
    "linkedin_username": "<linkedin_username>",
    "profiles": [],
    "twitter_url": "<twitter_url>",
    "twitter_username": "<twitter_username>",
    "profile_score": "<profile_score>",
    "profile_score_factors": {},
    "activity_score": "<activity_score>",
    "activity_score_factors": {},
    "certifications": [],
    "experience": [],
    "headline": "<headline>",
    "industry": "<industry>",
    "inferred_years_experience": 0,
    "interests": [],
    "job_history": [],
    "skills": [],
    "summary": "<summary>",
    "dataset_version": "<dataset_version>",
    "first_seen": "<first_seen>",
    "num_records": 0,
    "num_sources": 0,
    "job_company_industry_v2": "<job_company_industry_v2>",
    "job_company_location_address_line_2": "<job_company_location_address_line_2>",
    "location_address_line_2": "<location_address_line_2>"
  }
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Person enrichment

- Capability: `person/enrich`
- Description: One person, under `data`, with fields allowed by the key and data_include. The envelope carries status, likelihood (1-10), and optional matched inputs. Fields depend on bundle entitlement; free plans can return contact-presence booleans.
- Instructions: Use when you have one identity and want the full record for it. The minimum input is profile OR email OR phone OR email_hash OR lid OR pdl_id, or else a name - `name`, or `first_name` AND `last_name` - together with one of company, school, location, street_address, locality, region, country, postal_code or birth_date. A bare name is a 400, and so is `first_name` without `last_name`.
- Cost: 60 credits per call
- Capability file: [Person enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/enrich)

Accepted options:
- `pdl_id` (string): PDL person id, from person/search. A hard override: sent alongside anything else, every other match input is ignored. Example: `<pdl_id>`
- `email` (string): Email address. Sufficient on its own. Example: `<email>`
- `email_hash` (string): Hashed email, SHA-256 or MD5. Sufficient on its own, and the input to use when the raw address must not leave your systems. Example: `<email_hash>`
- `phone` (string): Phone number. Sufficient on its own, but it must start with + and the country code or nothing matches. Example: `<phone>`
- `profile` (string): Social profile URL, for example a LinkedIn profile. Sufficient on its own and the most reliable single input. Example: `<profile>`
- `lid` (string): LinkedIn numeric id. Sufficient on its own. Example: `<lid>`
- `birth_date` (string): Birth year or date, YYYY or YYYY-MM-DD. Qualifies as the disambiguator beside a name on person/enrich, but never stands alone. Example: `<birth_date>`
- `name` (string): Full name, or use first_name AND last_name. Enrichment also requires company, school, location, street_address, locality, region, country, postal_code or birth_date. Identify accepts name alone. Example: `<name>`
- `first_name` (string): Given name. Requires last_name; enrichment also needs a disambiguator. Example: `<first_name>`
- `last_name` (string): Family name. Only counts alongside first_name. Example: `<last_name>`
- `middle_name` (string): Middle name. Refines a match and never satisfies the minimum-input rule on its own. Example: `<middle_name>`
- `location` (string): Free-form location, for example "san francisco, california". Qualifies as the disambiguator beside a name. Example: `<location>`
- `locality` (string): City. Qualifies as the disambiguator beside a name. Example: `<locality>`
- `region` (string): State or region. Qualifies as the disambiguator beside a name. Example: `<region>`
- `postal_code` (string): Postal code. Qualifies as the disambiguator beside a name, and is assumed to be US unless country is sent too. Example: `<postal_code>`
- `country` (string): Country. Qualifies as the disambiguator beside a name, though it narrows a common name far less than a locality does. Example: `<country>`
- `street_address` (string): Street address. Qualifies as the disambiguator beside a name. Example: `<street_address>`
- `company` (string): Employer name or website. Qualifies as the disambiguator beside a name. Example: `<company>`
- `school` (string): School name or website. Qualifies as the disambiguator beside a name. Example: `<school>`
- `min_likelihood` (number): Refuse a match below this confidence, 1-10, default 2. At 2 the match is only 10-30% likely to be the record asked for. Raising it turns a weak match into a 404, which is the cheaper answer: a 404 is free here and a wrong record is not. Example: `2`
- `required` (string): Boolean expression over required top-level output fields using AND, OR and parentheses. Fields used as matching inputs cannot also be required. Access depends on the key's field bundles. Example: `<required>`
- `data_include` (string): Comma-separated schema fields to return, dot notation for subfields, a leading `-` to exclude instead, `""` for none. Use it to reduce response size. Example: `-`
- `include_if_matched` (boolean): Return matching inputs: top-level matched for enrichment, or matched_on within Identify candidates. Example: `false`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`

Response schema example:
```json
{
  "data": {
    "job_company_12mo_employee_growth_rate": 0,
    "first_name": "<first_name>",
    "full_name": "<full_name>",
    "id": "<id>",
    "last_initial": "<last_initial>",
    "last_name": "<last_name>",
    "middle_initial": "<middle_initial>",
    "middle_name": "<middle_name>",
    "name_aliases": [],
    "emails": [],
    "mobile_phone": "<mobile_phone>",
    "personal_emails": [],
    "phone_numbers": [],
    "phones": [],
    "recommended_personal_email": "<recommended_personal_email>",
    "work_email": "<work_email>",
    "job_company_facebook_url": "<job_company_facebook_url>",
    "job_company_founded": 0,
    "job_company_employee_count": 0,
    "job_company_id": "<job_company_id>",
    "job_company_industry": "<job_company_industry>",
    "job_company_inferred_revenue": "<job_company_inferred_revenue>",
    "job_company_linkedin_id": "<job_company_linkedin_id>",
    "job_company_linkedin_url": "<job_company_linkedin_url>",
    "job_company_location_continent": "<job_company_location_continent>",
    "job_company_location_country": "<job_company_location_country>",
    "job_company_location_geo": "<job_company_location_geo>",
    "job_company_location_locality": "<job_company_location_locality>",
    "job_company_location_metro": "<job_company_location_metro>",
    "job_company_location_name": "<job_company_location_name>",
    "job_company_location_postal_code": "<job_company_location_postal_code>",
    "job_company_location_region": "<job_company_location_region>",
    "job_company_location_street_address": "<job_company_location_street_address>",
    "job_company_name": "<job_company_name>",
    "job_company_size": "<job_company_size>",
    "job_company_ticker": "<job_company_ticker>",
    "job_company_total_funding_raised": 0,
    "job_company_twitter_url": "<job_company_twitter_url>",
    "job_company_type": "<job_company_type>",
    "job_company_website": "<job_company_website>",
    "inferred_salary": "<inferred_salary>",
    "inferred_salary_low": 0,
    "inferred_salary_high": 0,
    "inferred_salary_confidence": "<inferred_salary_confidence>",
    "job_last_changed": "<job_last_changed>",
    "job_last_verified": "<job_last_verified>",
    "job_onet_code": "<job_onet_code>",
    "job_onet_major_group": "<job_onet_major_group>",
    "job_onet_minor_group": "<job_onet_minor_group>",
    "job_onet_broad_occupation": "<job_onet_broad_occupation>",
    "job_onet_specific_occupation": "<job_onet_specific_occupation>",
    "job_onet_specific_occupation_detail": "<job_onet_specific_occupation_detail>",
    "job_start_date": "<job_start_date>",
    "job_summary": "<job_summary>",
    "job_title": "<job_title>",
    "job_title_class": "<job_title_class>",
    "job_title_levels": [],
    "job_title_role": "<job_title_role>",
    "job_title_sub_role": "<job_title_sub_role>",
    "birth_date": "<birth_date>",
    "birth_year": 0,
    "sex": "<sex>",
    "languages": [],
    "education": [],
    "countries": [],
    "location_continent": "<location_continent>",
    "location_country": "<location_country>",
    "location_geo": "<location_geo>",
    "location_last_updated": "<location_last_updated>",
    "location_locality": "<location_locality>",
    "location_metro": "<location_metro>",
    "location_name": "<location_name>",
    "location_names": [],
    "location_postal_code": "<location_postal_code>",
    "location_region": "<location_region>",
    "location_street_address": "<location_street_address>",
    "regions": [],
    "street_addresses": [],
    "possible_birth_dates": [],
    "possible_emails": [],
    "possible_location_names": [],
    "possible_phones": [],
    "possible_profiles": [],
    "possible_street_addresses": [],
    "facebook_friends": 0,
    "facebook_id": "<facebook_id>",
    "facebook_url": "<facebook_url>",
    "facebook_username": "<facebook_username>",
    "github_url": "<github_url>",
    "github_username": "<github_username>",
    "linkedin_connections": 0,
    "linkedin_id": "<linkedin_id>",
    "linkedin_url": "<linkedin_url>",
    "linkedin_username": "<linkedin_username>",
    "profiles": [],
    "twitter_url": "<twitter_url>",
    "twitter_username": "<twitter_username>",
    "profile_score": "<profile_score>",
    "profile_score_factors": {},
    "activity_score": "<activity_score>",
    "activity_score_factors": {},
    "certifications": [],
    "experience": [],
    "headline": "<headline>",
    "industry": "<industry>",
    "inferred_years_experience": 0,
    "interests": [],
    "job_history": [],
    "skills": [],
    "summary": "<summary>",
    "dataset_version": "<dataset_version>",
    "first_seen": "<first_seen>",
    "num_records": 0,
    "num_sources": 0,
    "job_company_industry_v2": "<job_company_industry_v2>",
    "job_company_location_address_line_2": "<job_company_location_address_line_2>",
    "location_address_line_2": "<location_address_line_2>"
  }
}
```

### Bulk person enrichment

- Capability: `person/bulk`
- Description: A bare JSON array, one element per request and in request order, each `{ status, likelihood, data, metadata? }`. Elements that did not match carry status 404 and a null record. Each matched person costs 50 credits. A miss, an error row, or an empty record costs nothing, including an all-miss batch. A malformed, unauthenticated or throttled call answers with the ordinary error object instead of an array, so array-ness cannot be assumed from a 200.
- Instructions: Use to enrich a list rather than looping person/enrich, which throttles. Set `metadata` on every entry so the results can be joined back to your rows. Each matched person costs 50 credits, and a miss or empty record is free, so the charge is a multiple of 50. The quote reserves 50 credits for every submitted row. Use smaller batches or data_include to reduce large response payloads.
- Cost: 50 credits per record
- Capability file: [Bulk person enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/bulk)

Accepted options:
- `requests` (object[], required): 1-100 enrichments, each `{ params: { ...the person/enrich inputs... }, metadata?: {...} }`. Every entry must satisfy the person/enrich minimum-input rule; malformed entries reject the Exchange call locally. `metadata` is echoed back untouched and is the only way to tell which output belongs to which input - the array is in request order, but nothing else identifies a row. Example: `[]`
- `data_include` (string): Comma-separated schema fields to return, dot notation for subfields, a leading `-` to exclude instead, `""` for none. Use it to reduce response size. Example: `-`
- `required` (string): Boolean expression over required top-level output fields using AND, OR and parentheses. Fields used as matching inputs cannot also be required. Access depends on the key's field bundles. Example: `<required>`
- `include_if_matched` (boolean): Return matching inputs: top-level matched for enrichment, or matched_on within Identify candidates. Example: `false`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`
- `min_likelihood` (number): Refuse a match below this confidence, 1-10, default 2. At 2 the match is only 10-30% likely to be the record asked for. Raising it turns a weak match into a 404, which is the cheaper answer: a 404 is free here and a wrong record is not. Applies to every entry that does not set its own. Example: `2`

Response schema example:
```json
[
  {
    "status": 0,
    "likelihood": 0,
    "data": {},
    "metadata": {}
  }
]
```

### Person search

- Capability: `person/search`
- Description: People under `data`, sorted by profile completeness rather than relevance, with `total` and `scroll_token` beside it in the envelope. Each returned person costs 50 credits. A query that matches nothing is a 200 with total 0 and costs nothing, so never read the status code as evidence of results - read total. Missing values may be null, excluded fields absent, and free-plan contact fields booleans.
- Instructions: Use to build a segment - everyone with a title at a set of companies, in a place - rather than to resolve one person you already have. A known LinkedIn profile belongs on person/enrich. Learn the exact strings to filter on from autocomplete/suggest first, since matches are verbatim. Each returned person costs 50 credits, an empty page costs nothing, and the 100-credit authorization ceiling allows at most two records per call. The endpoint is subject to a confirmed account quota of 100 requests a minute.
- Cost: 50 credits per record
- Capability file: [Person search](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/person/search)

Accepted options:
- `query` (object): Elasticsearch 7.7 query object over the person schema. Only term, terms, exists, bool, match, range, match_phrase, wildcard, prefix and match_all are accepted - boosting, custom scoring and aggregations are refused. Any array inside it is capped at 1000 elements and the whole request at 20 wildcard terms. Send this or sql, never both: both is a 400. Example: `{}`
- `sql` (string): `SELECT * FROM person WHERE ...`, translated to the same query types, so it is strictly less expressive than `query`. Column selection and LIMIT are ignored, subfields must be addressed in full (`experience.title.name IS NOT NULL`, not `experience IS NOT NULL`), and at most 20 LIKE '%...%' terms are allowed. Send this or query, never both. Example: `SELECT * FROM person WHERE ...`
- `size` (number): Request 1-2 people per call, costing 50 credits per returned person. The upstream page size is 1-100, but Exchange authorization is capped at 100 credits, so callers must use size 1 or 2. An empty page costs nothing. Example: `1`
- `scroll_token` (string): The scroll_token from the previous response, replayed with the identical query, to take the next page. Unlimited depth. Stop when it comes back absent, or on a 404 - which here means the scroll is finished, not that anything failed. Example: `<scroll_token>`
- `dataset` (string): Datasets to search, comma-separated, default `resume`: all, resume, email, phone, mobile_phone, street_address, consumer_social, developer. A leading `-` on the list switches it to exclusion, written once - `all,-phone` searches everything but phone. Example: `resume`
- `data_include` (string): Comma-separated schema fields to return, dot notation for subfields, a leading `-` to exclude instead, `""` for none. Use it to reduce response size. Example: `-`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`

Response schema example:
```json
{
  "data": [
    {
      "job_company_12mo_employee_growth_rate": 0,
      "first_name": "<first_name>",
      "full_name": "<full_name>",
      "id": "<id>",
      "last_initial": "<last_initial>",
      "last_name": "<last_name>",
      "middle_initial": "<middle_initial>",
      "middle_name": "<middle_name>",
      "name_aliases": [],
      "emails": [],
      "mobile_phone": "<mobile_phone>",
      "personal_emails": [],
      "phone_numbers": [],
      "phones": [],
      "recommended_personal_email": "<recommended_personal_email>",
      "work_email": "<work_email>",
      "job_company_facebook_url": "<job_company_facebook_url>",
      "job_company_founded": 0,
      "job_company_employee_count": 0,
      "job_company_id": "<job_company_id>",
      "job_company_industry": "<job_company_industry>",
      "job_company_inferred_revenue": "<job_company_inferred_revenue>",
      "job_company_linkedin_id": "<job_company_linkedin_id>",
      "job_company_linkedin_url": "<job_company_linkedin_url>",
      "job_company_location_continent": "<job_company_location_continent>",
      "job_company_location_country": "<job_company_location_country>",
      "job_company_location_geo": "<job_company_location_geo>",
      "job_company_location_locality": "<job_company_location_locality>",
      "job_company_location_metro": "<job_company_location_metro>",
      "job_company_location_name": "<job_company_location_name>",
      "job_company_location_postal_code": "<job_company_location_postal_code>",
      "job_company_location_region": "<job_company_location_region>",
      "job_company_location_street_address": "<job_company_location_street_address>",
      "job_company_name": "<job_company_name>",
      "job_company_size": "<job_company_size>",
      "job_company_ticker": "<job_company_ticker>",
      "job_company_total_funding_raised": 0,
      "job_company_twitter_url": "<job_company_twitter_url>",
      "job_company_type": "<job_company_type>",
      "job_company_website": "<job_company_website>",
      "inferred_salary": "<inferred_salary>",
      "inferred_salary_low": 0,
      "inferred_salary_high": 0,
      "inferred_salary_confidence": "<inferred_salary_confidence>",
      "job_last_changed": "<job_last_changed>",
      "job_last_verified": "<job_last_verified>",
      "job_onet_code": "<job_onet_code>",
      "job_onet_major_group": "<job_onet_major_group>",
      "job_onet_minor_group": "<job_onet_minor_group>",
      "job_onet_broad_occupation": "<job_onet_broad_occupation>",
      "job_onet_specific_occupation": "<job_onet_specific_occupation>",
      "job_onet_specific_occupation_detail": "<job_onet_specific_occupation_detail>",
      "job_start_date": "<job_start_date>",
      "job_summary": "<job_summary>",
      "job_title": "<job_title>",
      "job_title_class": "<job_title_class>",
      "job_title_levels": [],
      "job_title_role": "<job_title_role>",
      "job_title_sub_role": "<job_title_sub_role>",
      "birth_date": "<birth_date>",
      "birth_year": 0,
      "sex": "<sex>",
      "languages": [],
      "education": [],
      "countries": [],
      "location_continent": "<location_continent>",
      "location_country": "<location_country>",
      "location_geo": "<location_geo>",
      "location_last_updated": "<location_last_updated>",
      "location_locality": "<location_locality>",
      "location_metro": "<location_metro>",
      "location_name": "<location_name>",
      "location_names": [],
      "location_postal_code": "<location_postal_code>",
      "location_region": "<location_region>",
      "location_street_address": "<location_street_address>",
      "regions": [],
      "street_addresses": [],
      "possible_birth_dates": [],
      "possible_emails": [],
      "possible_location_names": [],
      "possible_phones": [],
      "possible_profiles": [],
      "possible_street_addresses": [],
      "facebook_friends": 0,
      "facebook_id": "<facebook_id>",
      "facebook_url": "<facebook_url>",
      "facebook_username": "<facebook_username>",
      "github_url": "<github_url>",
      "github_username": "<github_username>",
      "linkedin_connections": 0,
      "linkedin_id": "<linkedin_id>",
      "linkedin_url": "<linkedin_url>",
      "linkedin_username": "<linkedin_username>",
      "profiles": [],
      "twitter_url": "<twitter_url>",
      "twitter_username": "<twitter_username>",
      "profile_score": "<profile_score>",
      "profile_score_factors": {},
      "activity_score": "<activity_score>",
      "activity_score_factors": {},
      "certifications": [],
      "experience": [],
      "headline": "<headline>",
      "industry": "<industry>",
      "inferred_years_experience": 0,
      "interests": [],
      "job_history": [],
      "skills": [],
      "summary": "<summary>",
      "dataset_version": "<dataset_version>",
      "first_seen": "<first_seen>",
      "num_records": 0,
      "num_sources": 0,
      "job_company_industry_v2": "<job_company_industry_v2>",
      "job_company_location_address_line_2": "<job_company_location_address_line_2>",
      "location_address_line_2": "<location_address_line_2>"
    }
  ]
}
```

### Company enrichment

- Capability: `company/enrich`
- Description: Full company record (only representative fields are listed here), with the schema fields at the TOP LEVEL beside `status` and `likelihood` - this endpoint does not wrap them in `data`. Fields the record has no value for come back null rather than absent.
- Instructions: Use when you have one company and want its firmographics, funding and headcount. Give it a domain, ticker or social profile if you possibly can - a bare name is the identifier most likely to miss.
- Cost: 50 credits per call
- Capability file: [Company enrichment](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/company/enrich)

Accepted options:
- `pdl_id` (string): PDL company id, or a LinkedIn company slug such as `google`. A hard override: sent alongside anything else, every other match input is ignored. Example: `<pdl_id>`
- `name` (string): Company name, for example "Google, Inc.". The weakest identifier by a distance - an ambiguous name answers 404 rather than guessing - so prefer website, ticker or profile whenever you have one. Example: `<name>`
- `ticker` (string): Stock ticker. Example: `AAPL`
- `website` (string): Company domain. The most reliable single identifier. Example: `<website>`
- `profile` (string): Social profile URL, for example linkedin.com/company/google. Example: `<profile>`
- `location` (string): Free-form location. Raises the likelihood of a name match; never sufficient on its own. Example: `<location>`
- `street_address` (string): Street address, one value. Never sufficient on its own. Example: `<street_address>`
- `locality` (string): City, one value. Never sufficient on its own. Example: `<locality>`
- `region` (string): State or region, one value. Never sufficient on its own. Example: `<region>`
- `country` (string): Country, one value. Never sufficient on its own. Example: `<country>`
- `postal_code` (string): Postal code, one value. Never sufficient on its own. Example: `<postal_code>`
- `min_likelihood` (number): Refuse a match below this confidence, 1-10, default 2. At 2 the match is only 10-30% likely to be the record asked for. Raising it turns a weak match into a 404, which is the cheaper answer: a 404 is free here and a wrong record is not. Example: `2`
- `required` (string): Boolean expression over required top-level output fields using AND, OR and parentheses. Fields used as matching inputs cannot also be required. Access depends on the key's field bundles. Example: `<required>`
- `data_include` (string): Comma-separated schema fields to return, dot notation for subfields, a leading `-` to exclude instead, `""` for none. Use it to reduce response size. Example: `-`
- `include_if_matched` (boolean): Return matching inputs: top-level matched for enrichment, or matched_on within Identify candidates. Example: `false`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`

Response schema example:
```json
{
  "status": 200,
  "likelihood": 9,
  "id": "example-company",
  "name": "Example Company",
  "website": "example.com",
  "industry": "computer software",
  "employee_count": 120,
  "location": {
    "country": "united states"
  }
}
```

### Company search

- Capability: `company/search`
- Description: Full company records under `data` (only representative fields are listed here), sorted by profile completeness, with `total` and `scroll_token` in the envelope. A query matching nothing is a 200 with total 0, not a 404 - read total, never the status code.
- Instructions: Use to find companies by attribute - industry, headcount, funding stage, location - rather than to look one up you can already name. Each returned company costs 50 credits. Smaller pages reduce payload size.
- Cost: 50 credits per record
- Capability file: [Company search](https://alexandria.firecrawl.dev/agents/providers/people-data-labs/company/search)

Accepted options:
- `query` (object): Elasticsearch 7.7 query object over the company schema. Only term, terms, exists, bool, match, range, match_phrase, wildcard, prefix and match_all are accepted. Any array inside it is capped at 100 elements - a tenth of what the person endpoints allow, so a filter list carried over from there will fail. Send this or sql, never both. Example: `{}`
- `sql` (string): `SELECT * FROM company WHERE ...`. Column selection and LIMIT are ignored, and at most 20 LIKE '%...%' terms are allowed. Send this or query, never both. Example: `SELECT * FROM company WHERE ...`
- `size` (number): Request 1-2 companies per call, costing 50 credits per returned company. PDL supports 1-100 upstream, but Exchange authorization is capped at 100 credits, so callers must use size 1 or 2. Example: `1`
- `scroll_token` (string): The scroll_token from the previous response, replayed with the identical query, for the next page. A 404 while scrolling means the results are exhausted, not that the query broke. Example: `<scroll_token>`
- `titlecase` (boolean): Return titlecased values. Responses are lowercase otherwise, which matters when the output is shown to a person rather than matched on. Example: `false`

Response schema example:
```json
{
  "status": 200,
  "total": 1,
  "scroll_token": "example-scroll-token",
  "data": [
    {
      "id": "example-company",
      "name": "Example Company",
      "website": "example.com",
      "industry": "computer software",
      "employee_count": 120,
      "location": {
        "country": "united states"
      }
    }
  ]
}
```
