# Apollo — how to use (mcp.ai)

Connect your Apollo account and use 48 tools for CRM straight from your AI agent. Connect with your own API key. Apollo provides CRM and lead generation capabilities, helping businesses discover contacts, manage outreach, and track sales pipelines for consistent customer relationship development.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_apollo?ms=1787293680000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `apollo_add_contacts_to_sequence`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/apollo`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/apollo/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/apollo/add/contacts/to/sequence` — Adds contacts to a specified Apollo email sequence and returns the contact details. `sequence_id`, `emailer_campaign_id`, and `send_email_from_email_account_id` must be retrieved from Apollo listing/s
  - body: { user_id?: string, contact_ids: string[], sequence_id: string, sequence_no_email?: boolean, emailer_campaign_id: string, sequence_job_change?: boolean, sequence_unverified_email?: boolean, send_email_from_email_account_id: string, sequence_active_in_other_campaigns?: boolean, sequence_finished_in_other_campaigns?: boolean }
- `POST https://api.mcp.ai/api/apollo/bulk/organization/enrichment` — Enriches data for up to 10 organizations simultaneously by providing a list of their base company domains (e.g., 'apollo.io', not 'www.apollo.io'). Each call consumes Apollo credits per domain enriche
  - body: { domains: string[] }
- `POST https://api.mcp.ai/api/apollo/bulk/people/enrichment` — Use to enrich multiple person profiles simultaneously with comprehensive data from Apollo's database. Each call consumes Apollo credits; avoid re-enriching the same contacts. Responses may include nul
  - body: { details: object[], webhook_url?: string, reveal_phone_number?: boolean, reveal_personal_emails?: boolean }
- `POST https://api.mcp.ai/api/apollo/bulk/update/account/stage` — Bulk updates the stage for specified existing Apollo.io accounts, moving them to a valid new account stage.
  - body: { account_ids: string[], account_stage_id: string }
- `POST https://api.mcp.ai/api/apollo/create/account` — Creates a new account in Apollo.io; a new record is created even if a similar account exists, and provided `owner_id` or `account_stage_id` must be valid existing IDs. The response includes the new ac
  - body: { name: string, phone?: string, domain?: string, owner_id?: string, raw_address?: string, account_stage_id?: string }
- `POST https://api.mcp.ai/api/apollo/create/bulk/accounts` — Creates multiple accounts in Apollo.io with a single API call (maximum 100 accounts per request). Use when creating multiple company records at once.
  - body: { accounts: object[], run_dedupe?: boolean }
- `POST https://api.mcp.ai/api/apollo/create/bulk/contacts` — Tool to bulk create multiple contacts in Apollo with a single API call. Use when you need to create multiple contacts efficiently. Supports up to 100 contacts per request with optional deduplication.
  - body: { contacts: object[], run_dedupe?: boolean }
- `POST https://api.mcp.ai/api/apollo/create/call/record` — Tool to log call records in Apollo from external systems. Use when recording calls made through outside systems like Orum or Nooks; requires a master API key and cannot dial prospects directly.
  - body: { note?: string, logged?: boolean, status?: string, user_id?: string[], duration?: integer, end_time?: string, to_number?: string, account_id?: string, contact_id?: string, start_time?: string, from_number?: string, phone_call_outcome_id?: string, phone_call_purpose_id?: string }
- `POST https://api.mcp.ai/api/apollo/create/contact` — Creates a new contact in Apollo.io; use `account_id` to link to an organization and `contact_stage_id` for sales stage. Apollo does not auto-deduplicate — duplicate records sharing the same email are 
  - body: { email?: string, title?: string, last_name: string, account_id?: string, first_name: string, home_phone?: string, label_names?: string[], other_phone?: string, website_url?: string, direct_phone?: string, mobile_phone?: string, corporate_phone?: string, contact_stage_id?: string, organization_name?: string, present_raw_address?: string }
- `POST https://api.mcp.ai/api/apollo/create/custom/field` — Creates a new custom field in Apollo.io for contacts, accounts, or opportunities. Use when you need to define additional data fields beyond Apollo's standard attributes.
  - body: { meta?: object, type: string, label: string, modality?: string }
- `POST https://api.mcp.ai/api/apollo/create/deal` — Creates a new sales opportunity (deal) in Apollo.io; all provided IDs (`owner_id`, `account_id`, `opportunity_stage_id`) must be valid existing Apollo identifiers. This action has persistent side effe
  - body: { name: string, amount?: string, owner_id?: string, account_id?: string, closed_date?: string, opportunity_stage_id?: string }
- `POST https://api.mcp.ai/api/apollo/create/task` — Tool to create a single task in Apollo.io. Use when you need to add a new task to your team's Apollo account for a specific contact. The task will be assigned to a user and includes details like type,
  - body: { note?: string, type: string, title?: string, due_at: string, status: string, user_id: string, priority?: string, contact_id: string }
- `POST https://api.mcp.ai/api/apollo/get/account` — Tool to retrieve detailed information about a specific account by its Apollo ID. Use when you need to fetch complete account data including company details, contact information, and CRM integration fi
  - body: { id: string }
- `POST https://api.mcp.ai/api/apollo/get/auth/status` — Tool to check whether the provided Apollo API key is valid and accepted by Apollo (health/auth check). Use when any Apollo endpoint returns 401/403/422 to quickly diagnose invalid/expired keys versus 
- `POST https://api.mcp.ai/api/apollo/get/contact` — Retrieves detailed information about a specific contact by its ID. Use this to view contact details including name, email, phone numbers, organization, and custom fields.
  - body: { contact_id: string }
- `POST https://api.mcp.ai/api/apollo/get/deal` — Retrieves information about a specific deal by its ID. Use this when you need to view details of a single deal.
  - body: { opportunity_id: string }
- `POST https://api.mcp.ai/api/apollo/get/labels` — Retrieves all labels from Apollo.io, used for organizing contacts and accounts. Call this before APOLLO_CREATE_CONTACT or APOLLO_UPDATE_ACCOUNT to validate label values against the returned list; mism
- `POST https://api.mcp.ai/api/apollo/get/opportunity/stages` — Retrieves all configured opportunity (deal) stages from the Apollo.io account.
- `POST https://api.mcp.ai/api/apollo/get/organization` — Retrieves complete information about a specific organization by its Apollo ID. Use when you need detailed company data including funding, technologies, employee counts, and more.
  - body: { id: string }
- `POST https://api.mcp.ai/api/apollo/get/organization/job/postings` — Retrieves paginated job postings for a specified organization by its ID, optionally filtering by domain; ensure `organization_id` is a valid identifier.
  - body: { page?: integer, per_page?: integer, organization_id: string, q_organization_domains?: string }
- `POST https://api.mcp.ai/api/apollo/get/typed/custom/fields` — Retrieves all typed custom field definitions available in the Apollo.io instance, detailing their types and configurations. Call before constructing payloads for APOLLO_UPDATE_CONTACT or APOLLO_UPDATE
- `POST https://api.mcp.ai/api/apollo/list/account/stages` — Retrieves the IDs for all available account stages in your team's Apollo account.
- `POST https://api.mcp.ai/api/apollo/list/contact/stages` — Retrieves all available contact stages from an Apollo account, including their unique IDs and names.
- `POST https://api.mcp.ai/api/apollo/list/deals` — Retrieves a list of deals from Apollo, using Apollo's default sort order if 'sort_by_field' is omitted.
  - body: { page?: integer, per_page?: integer, sort_by_field?: string }
- `POST https://api.mcp.ai/api/apollo/list/email/accounts` — Retrieves all email accounts and their details for the authenticated user; takes no parameters.
- `POST https://api.mcp.ai/api/apollo/list/fields` — Retrieves all field definitions from Apollo.io, including system fields and custom fields. Use the optional 'source' parameter to filter by field type (system, custom, or crm_synced).
  - body: { source?: string }
- `POST https://api.mcp.ai/api/apollo/list/users` — Retrieves a list of all users (teammates) associated with the Apollo account, supporting pagination via `page` and `per_page` parameters. Use this to obtain numeric user IDs required by operations lik
  - body: { page?: integer, per_page?: integer }
- `POST https://api.mcp.ai/api/apollo/organization/enrichment` — Fetches comprehensive organization enrichment data from Apollo.io for a given company domain; results are most meaningful if the company exists in Apollo's database. Each call consumes Apollo credits 
  - body: { domain: string }
- `POST https://api.mcp.ai/api/apollo/organization/search` — Searches Apollo's database for organizations using various filters; consumes credits on every call (unavailable on free plans) — avoid re-running identical queries and surface quota errors rather than
  - body: { page?: integer, per_page?: integer, organization_ids?: string[], q_organization_name?: string, organization_locations?: string[], organization_not_locations?: string[], q_organization_domains_list?: string[], q_organization_keyword_tags?: string[], organization_num_employees_ranges?: string[] }
- `POST https://api.mcp.ai/api/apollo/people/enrichment` — Enriches and retrieves information for a person from Apollo.io. Requires one of: `id`, `email`, `hashed_email`, `linkedin_url`, or (`first_name` and `last_name` with `organization_name` or `domain`) f
  - body: { id?: string, name?: string, email?: string, domain?: string, last_name?: string, first_name?: string, webhook_url?: string, hashed_email?: string, linkedin_url?: string, organization_name?: string, reveal_phone_number?: boolean, reveal_personal_emails?: boolean }
- `POST https://api.mcp.ai/api/apollo/people/search` — Searches Apollo's contact database for people using various filters; results capped at 50,000 records and does not enrich contact data. Combining multiple strict filters (organization_ids, person_titl
  - body: { page?: integer, per_page?: integer, q_keywords?: string, person_titles?: string[], organization_ids?: string[], person_locations?: string[], person_seniorities?: string[], contact_email_status?: string[], organization_locations?: string[], q_organization_domains?: string[], organization_num_employees_ranges?: string[] }
- `POST https://api.mcp.ai/api/apollo/search/accounts` — Searches for accounts within your existing Apollo.io database using various criteria; requires a paid plan and is limited to 50,000 records.
  - body: { page?: integer, per_page?: integer, sort_by_field?: string, sort_ascending?: boolean, account_stage_ids?: string[], q_organization_name?: string }
- `POST https://api.mcp.ai/api/apollo/search/calls` — Searches for call records in Apollo.io using filters like date range, duration, direction (inbound/outgoing), users, contacts, purposes, outcomes, and keywords. Supports pagination for efficient data 
  - body: { page?: integer, inbound?: string, per_page?: integer, user_ids?: string[], q_keywords?: string, duration_max?: integer, duration_min?: integer, date_range_max?: string, date_range_min?: string, contact_label_ids?: string[], phone_call_outcome_ids?: string[], phone_call_purpose_ids?: string[] }
- `POST https://api.mcp.ai/api/apollo/search/contacts` — Searches Apollo contacts using keywords, stage IDs (from 'List Contact Stages' action), or sorting (max 50,000 records; `sort_ascending` requires `sort_by_field`). Search before creating contacts to a
  - body: { page?: integer, per_page?: integer, q_keywords?: string, sort_by_field?: string, sort_ascending?: boolean, contact_stage_ids?: string[] }
- `POST https://api.mcp.ai/api/apollo/search/news/articles` — Tool to search for news articles about companies in Apollo's database. Use when you need to find recent news, announcements, or updates about specific organizations using their Apollo IDs.
  - body: { page?: integer, per_page?: integer, categories?: string[], organization_ids: string[], published_at_max?: string, published_at_min?: string }
- `POST https://api.mcp.ai/api/apollo/search/outreach/emails` — Tool to search for outreach emails sent through Apollo sequences. Use when you need to find emails created and sent by your team as part of Apollo email campaigns. This endpoint requires a master API 
  - body: { page?: integer, per_page?: integer }
- `POST https://api.mcp.ai/api/apollo/search/sequences` — Searches for sequences (e.g., automated email campaigns) in Apollo.io.
  - body: { page?: integer, q_name?: string, per_page?: integer }
- `POST https://api.mcp.ai/api/apollo/search/tasks` — Searches for tasks in Apollo.io using filters like keywords, date ranges (due, created, updated), priorities, types, assigned users, associated contacts/accounts, supporting sorting and pagination.
  - body: { page?: integer, per_page?: integer, q_keywords?: string, task_types?: string[], account_ids?: string[], contact_ids?: string[], sort_by_field?: string, task_user_ids?: string[], due_date_range?: object, sort_ascending?: boolean, task_priorities?: string[], task_created_at_range?: object, task_updated_at_range?: object }
- `POST https://api.mcp.ai/api/apollo/update/account` — Updates specified attributes of an existing account in Apollo.io.
  - body: { name?: string, phone?: string, domain?: string, owner_id?: string, account_id: string, raw_address?: string, account_stage_id?: string }
- `POST https://api.mcp.ai/api/apollo/update/account/owners` — Updates the ownership of multiple Apollo accounts to a specified user. Use when bulk assigning account ownership to a team member.
  - body: { owner_id: string, account_ids: string[] }
- `POST https://api.mcp.ai/api/apollo/update/call/record` — Tool to update an existing call record in Apollo.io. Use when you need to modify details of a previously logged phone call such as duration, status, notes, or associated contact/account information.
  - body: { id: string, note?: string, logged?: boolean, status?: string, user_id?: string[], duration?: integer, end_time?: string, to_number?: string, account_id?: string, contact_id?: string, start_time?: string, from_number?: string, phone_call_outcome_id?: string, phone_call_purpose_id?: string }
- `POST https://api.mcp.ai/api/apollo/update/contact` — Tool to update an existing contact's information in Apollo. Use when you need to modify contact details such as name, email, phone, title, organization, or custom fields. At least one field beyond con
  - body: { email?: string, title?: string, last_name?: string, account_id?: string, contact_id: string, first_name?: string, home_phone?: string, label_names?: string[], other_phone?: string, website_url?: string, direct_phone?: string, mobile_phone?: string, corporate_phone?: string, contact_stage_id?: string, organization_name?: string, present_raw_address?: string, typed_custom_fields?: object }
- `POST https://api.mcp.ai/api/apollo/update/contact/ownership` — Updates the ownership of specified Apollo contacts to a given Apollo user, who must be part of the same team.
  - body: { owner_id: string, contact_ids: string[] }
- `POST https://api.mcp.ai/api/apollo/update/contact/stage` — Updates the stage for one or more existing contacts in Apollo.io to a new valid contact stage, useful for managing sales funnel progression.
  - body: { contact_ids: string[], contact_stage_id: string }
- `POST https://api.mcp.ai/api/apollo/update/contact/status/in/sequence` — Updates a contact's status within a designated Apollo sequence, but cannot set the status to 'active'.
  - body: { status: string, contact_id: string, sequence_id: string }
- `POST https://api.mcp.ai/api/apollo/update/contacts/bulk` — Tool to bulk update multiple Apollo contacts with a single API call. Use when updating multiple contacts simultaneously - either apply the same updates to all contacts using contact_ids, or apply diff
  - body: { async?: boolean, email?: string, title?: string, owner_id?: string, last_name?: string, account_id?: string, first_name?: string, contact_ids?: string[], linkedin_url?: string, organization_name?: string, contact_attributes?: object[], visible_entity_ids?: string[], present_raw_address?: string, typed_custom_fields?: object }
- `POST https://api.mcp.ai/api/apollo/update/deals` — Updates specified fields of an existing Apollo.io deal (opportunity), requiring a valid `opportunity_id`.
  - body: { name?: string, amount?: string, is_won?: boolean, source?: string, owner_id?: string, is_closed?: boolean, account_id?: string, closed_date?: string, opportunity_id: string, opportunity_stage_id?: string }
- `POST https://api.mcp.ai/api/apollo/view/api/usage/stats` — Fetches Apollo API usage statistics and rate limits for the connected team. Use before large enrichment/search runs to understand current API usage and plan/budget constraints. If experiencing 403s on

## Example prompts
- "What can I do in Apollo?"
- "Show me a summary of my Apollo account"

## More
- Page: https://mcp.ai/apollo
- Agent spec (llms.txt): https://mcp.ai/apollo/llms.txt
- Postman collection: https://mcp.ai/apollo/postman.json
