---
type: "firecrawl-provider"
description: "Company identity resolution, enrichment and search from a domain, ticker, name or company profile."
use_when: "Company firmographics, funding, headcount and job-posting signals, keyed by domain, ticker, social profile or PDL id."
categories: "Company"
capabilities: 2
credits_range: 50
---
# People Data Labs on Firecrawl Alexandria

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

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

## More

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

## Capabilities

- [Company enrichment](https://firecrawl.dev/alexandria/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://firecrawl.dev/alexandria/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

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": "company/enrich",
  "options": {
    "website": "example.com"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `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`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "people-data-labs",
    capability: "company/enrich",
    options: {
      website: "example.com",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "people-data-labs",
  "capability": "company/enrich",
  "options": {
    "website": "example.com"
  }
})
```

### 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": "company/enrich",
    "options": {
      "website": "example.com"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'people-data-labs/company/enrich' \
  --options '{"website":"example.com"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "people-data-labs",
  "capability": "company/enrich",
  "options": {
    "website": "example.com"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "people-data-labs",
  "capability": "company/enrich",
  "options": {
    "website": "example.com"
  }
}
```

## 6. Response data

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

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

## API reference-derived contract

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

### 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://firecrawl.dev/alexandria/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://firecrawl.dev/alexandria/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"
      }
    }
  ]
}
```
