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

# Apollo: Bulk People Enrichment

> Match many people at once and get their profiles, work emails, and optionally phone numbers or personal emails. Includes SDK V2 examples, schemas, and cost.

Match many people at once and get their profiles, work emails, and optionally phone numbers or personal emails.

> [!NOTE]
>
> Tool ID: `apollo_bulk_people_enrichment`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'apollo_bulk_people_enrichment',
  {
    "details": [
      {
        "first_name": "Jane",
        "last_name": "Doe",
        "email": "jane.doe@example.com",
        "domain": "example.com"
      }
    ]
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute apollo_bulk_people_enrichment --input '{
  "details": [
    {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "jane.doe@example.com",
      "domain": "example.com"
    }
  ]
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "request_id": "request_123",
    "request_id_exact": "example",
    "waterfall": {
      "status": "example",
      "message": "Example message",
      "unprocessed_attributes": [
        {}
      ]
    }
  }
}
```

Use `deepline describe apollo_bulk_people_enrichment --json` for the latest machine-readable contract.

## Input reference

Apollo bulk people enrichment input.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.run_waterfall_email` | `boolean` | No | — | When true, run waterfall email enrichment. Requires webhook\_url or poll\_only: true. |
| `payload.run_waterfall_phone` | `boolean` | No | — | When true, run waterfall phone enrichment. Requires webhook\_url or poll\_only: true. |
| `payload.reveal_personal_emails` | `boolean` | No | — | When true, request personal email reveal (credit-consuming). |
| `payload.reveal_phone_number` | `boolean` | No | — | When true, request phone reveal. Requires webhook\_url or poll\_only: true. |
| `payload.poll_only` | `boolean` | No | — | Receive asynchronous phone or waterfall results by polling apollo\_poll\_webhook\_result with the returned request\_id. When true, omit webhook\_url. |
| `payload.webhook_url` | `string` | No | — | Your webhook endpoint for async phone/waterfall results. Omit when poll\_only is true. |
| `payload.details` | `array` | Yes | — | People detail objects to enrich (1-10 items). |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Apollo bulk people enrichment input.",
    "properties": {
      "run_waterfall_email": {
        "type": "boolean",
        "description": "When true, run waterfall email enrichment; requires webhook_url or poll_only: true."
      },
      "run_waterfall_phone": {
        "type": "boolean",
        "description": "When true, run waterfall phone enrichment; requires webhook_url or poll_only: true."
      },
      "reveal_personal_emails": {
        "type": "boolean",
        "description": "When true, request personal email reveal (credit-consuming)."
      },
      "reveal_phone_number": {
        "type": "boolean",
        "description": "When true, request phone reveal; requires webhook_url or poll_only: true."
      },
      "poll_only": {
        "type": "boolean",
        "description": "Receive asynchronous phone or waterfall results by polling apollo_poll_webhook_result with the returned request_id. When true, omit webhook_url."
      },
      "webhook_url": {
        "type": "string",
        "description": "Your webhook endpoint for async phone/waterfall results. Omit when poll_only is true."
      },
      "details": {
        "type": "array",
        "description": "People detail objects to enrich (1-10 items).",
        "items": {
          "type": "object",
          "properties": {
            "first_name": {
              "type": "string",
              "description": "Person's first name."
            },
            "last_name": {
              "type": "string",
              "description": "Person's last name."
            },
            "name": {
              "type": "string",
              "description": "Person's full name."
            },
            "email": {
              "type": "string",
              "description": "Person's email address."
            },
            "hashed_email": {
              "type": "string",
              "description": "Person's MD5-hashed email address."
            },
            "organization_name": {
              "type": "string",
              "description": "Employer/company name."
            },
            "domain": {
              "type": "string",
              "description": "Company domain (e.g., 'apollo.io')."
            },
            "id": {
              "type": "string",
              "description": "Apollo person ID from a prior lookup."
            },
            "linkedin_url": {
              "type": "string",
              "description": "Person's LinkedIn profile URL."
            }
          },
          "additionalProperties": false
        }
      }
    },
    "required": [
      "details"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Apollo bulk people enrichment result.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Apollo bulk people payload with a top-level `matches` array and batch metadata. |
| `result.data.request_id` | `string \| number` | No | — | Asynchronous enrichment request ID. Preserve it unchanged and pass it to apollo\_poll\_webhook\_result. IDs outside JavaScript safe integer precision are returned as exact strings. |
| `result.data.request_id_exact` | `string` | No | — | Authoritative exact decimal request ID. Pass this string as request\_id to apollo\_poll\_webhook\_result. The legacy numeric field can be rounded. |
| `result.data.waterfall` | `object` | No | — | — |
| `result.data.waterfall.status` | `string` | No | — | — |
| `result.data.waterfall.message` | `string` | No | — | — |
| `result.data.waterfall.unprocessed_attributes` | `array` | No | — | — |
| `result.data.phone_enrichment` | `object` | No | — | — |
| `result.data.phone_enrichment.request_id` | `string` | No | — | Phone job identity. Use the top-level request\_id for apollo\_poll\_webhook\_result. |
| `result.data.phone_enrichment.status` | `string` | No | — | — |
| `result.data.phone_enrichment.message` | `string` | No | — | — |
| `result.data.phone_enrichment.request_id_exact` | `string` | No | — | Authoritative exact decimal request ID. Pass this string as request\_id to apollo\_poll\_webhook\_result. The legacy numeric field can be rounded. |
| `result.data.status` | `string` | No | — | — |
| `result.data.error_code` | `string \| null` | No | — | — |
| `result.data.error_message` | `string \| null` | No | — | — |
| `result.data.total_requested_enrichments` | `number` | No | — | — |
| `result.data.unique_enriched_records` | `number` | No | — | — |
| `result.data.missing_records` | `number` | No | — | — |
| `result.data.matches` | `array` | No | — | — |
| `result.data.matches[].id` | `string` | No | — | — |
| `result.data.matches[].first_name` | `string` | No | — | — |
| `result.data.matches[].last_name` | `string` | No | — | — |
| `result.data.matches[].name` | `string` | No | — | — |
| `result.data.matches[].linkedin_url` | `string` | No | — | — |
| `result.data.matches[].title` | `string` | No | — | — |
| `result.data.matches[].email` | `string` | No | — | — |
| `result.data.matches[].email_status` | `string` | No | — | — |
| `result.data.matches[].organization_id` | `string` | No | — | — |
| `result.meta` | `record` | No | — | Additional response metadata (status, paging). |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Apollo bulk people enrichment result.",
    "properties": {
      "data": {
        "type": [
          "object",
          "null"
        ],
        "description": "Apollo bulk people payload with a top-level `matches` array and batch metadata.",
        "properties": {
          "request_id": {
            "description": "Asynchronous enrichment request ID. Preserve it unchanged and pass it to apollo_poll_webhook_result. IDs outside JavaScript safe integer precision are returned as exact strings.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "request_id_exact": {
            "type": "string",
            "description": "Authoritative exact decimal request ID. Pass this string as request_id to apollo_poll_webhook_result; the legacy numeric field can be rounded."
          },
          "waterfall": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "unprocessed_attributes": {
                "type": "array",
                "items": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "additionalProperties": {}
                }
              }
            },
            "additionalProperties": false
          },
          "phone_enrichment": {
            "type": "object",
            "properties": {
              "request_id": {
                "type": "string",
                "description": "Phone job identity. Use the top-level request_id for apollo_poll_webhook_result."
              },
              "status": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "request_id_exact": {
                "type": "string",
                "description": "Authoritative exact decimal request ID. Pass this string as request_id to apollo_poll_webhook_result; the legacy numeric field can be rounded."
              }
            },
            "additionalProperties": false
          },
          "status": {
            "type": "string"
          },
          "error_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "error_message": {
            "type": [
              "string",
              "null"
            ]
          },
          "total_requested_enrichments": {
            "type": "number"
          },
          "unique_enriched_records": {
            "type": "number"
          },
          "missing_records": {
            "type": "number"
          },
          "matches": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "first_name": {
                  "type": "string"
                },
                "last_name": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "linkedin_url": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "email_status": {
                  "type": "string"
                },
                "organization_id": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": false
      },
      "meta": {
        "type": "object",
        "description": "Additional response metadata (status, paging).",
        "additionalProperties": {}
      }
    },
    "required": [
      "data"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Deepline cost

* Pricing model: `per_result` (per result).
* Estimated Deepline credits: `0.17` per pricing unit.

## Related documentation

* [Apollo provider guide](https://deepline.com/docs/providers/apollo/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.