> Enrich.chat gives AI agents verified work emails and mobiles. To use it from an agent, read https://enrich.chat/agents.md . This is the Markdown version of https://enrich.chat/blog/apollo-api/

# Apollo API in 2026: keys, endpoints, credit costs, rate limits and a simpler alternative

We read Apollo.io's developer docs and pricing page on October 15, 2026. Here is how the API works, what each call costs, how mobile numbers arrive by webhook, and working code next to the Enrich.chat equivalent.

By Enrich.chat Editorial. Updated October 15, 2026.

**Short answer:** The Apollo.io API is a REST API at api.apollo.io/api/v1 that you call with an x-api-key header. People search is free, but [people enrichment costs 1 credit for an email and 8 more for a mobile](https://docs.apollo.io/docs/api-pricing), about $0.02 and $0.16 on annual plans by our math. Mobiles arrive later by webhook, and [paid plans allow 1,000 enrichment calls a minute](https://docs.apollo.io/reference/rate-limits).

## Key takeaways

- Apollo's REST API lives at https://api.apollo.io/api/v1. Apollo users send an API key in the x-api-key header. Partners building apps for other Apollo users use OAuth 2.0.
- People search costs 0 credits but returns no emails or phones. People enrichment costs 1 credit for an email and 8 more for a mobile, and nothing when no data is found.
- Mobile numbers never come back in the first response. Apollo posts them to your webhook_url, which can take several minutes, or you poll for them.
- Limits are per team and per endpoint. Free plans get 50 enrichment calls a minute and 600 a day. Paid plans get 1,000 a minute with no daily cap.
- Apollo's plan table ticks API access on every plan, but its FAQ puts advanced or custom integrations on Custom plans, and products built on Apollo data need a separate agreement.

## What is the Apollo API?

The Apollo API is Apollo.io's REST API for its sales data and sales tools. Every request goes to `https://api.apollo.io/api/v1` and returns JSON, per the [API reference](https://docs.apollo.io/reference/people-enrichment). You use it to search Apollo's people and company database, to enrich records with emails and phone numbers, and to manage contacts, deals and sequences in your Apollo workspace.

Apollo's [API overview](https://docs.apollo.io/reference/apollo-api) sorts the endpoints into six groups:

- **Search and enrich data**: people search, people enrichment, organization search and enrichment, job postings and news.
- **Manage records**: contacts, accounts, deals, lists and notes.
- **Engage with prospects**: sequences, emails, calls, tasks and conversations.
- **Manage the workspace**: users, email accounts and custom fields.
- **Analyze performance**: analytics reports.
- **Usage and webhooks**: rate limit stats, credit stats and webhook results.

Your plan decides which endpoints you can call, your rate limits and what each call costs in credits, per Apollo's [Build with Apollo](https://docs.apollo.io/docs/build-with-apollo) page. For client code, Apollo's docs point you to an [OpenAPI 3 file](https://docs.apollo.io/reference/openapi-specification) that you can import into Postman or feed to a code generator. Apollo also runs an MCP server and a CLI on the same account and credits; our [Apollo MCP guide](https://enrich.chat/blog/apollo-mcp-alternative/) covers those.

### Apollo.io's API is not Apollo GraphQL

Search results for "Apollo API" mix up three unrelated products. Check which one a guide means before you copy its code.

- **Apollo.io API**: B2B contact data and sales outreach. This page covers it.
- **Apollo GraphQL**: a separate company that makes GraphQL developer tools. Its `apollo-api` package is a module of the [Apollo Kotlin client](https://www.apollographql.com/docs/kotlin/kdoc/apollo-api/index.html) that parses GraphQL models and responses. It has nothing to do with contact data.
- **Apollo for Reddit**: a third-party Reddit app. Its developer said it would close on June 30, 2023 after Reddit raised its API prices, [MacRumors reported](https://www.macrumors.com/2023/06/08/apollo-shutting-down-june-30/). Guides about "Apollo with your own API key" usually mean this app.

A quick test: credits, contacts and sequences mean Apollo.io. Schemas, queries and Rover mean GraphQL.

## How do you get and use an Apollo API key?

You create an Apollo API key under Settings, Integrations, API Keys, and send it in the `x-api-key` header of every request. Only admins, or users whose permission profile allows it, can create keys, per Apollo's [developer FAQ](https://docs.apollo.io/docs/developer-faqs).

1. In Apollo, click **Settings**, then **Integrations**, then **API Keys**, then **Create new key**.
2. Give the key a name and a description. Pick each endpoint it may call, or turn on **Set as master key** to allow all of them.
3. Click **Create API key** and copy it to a safe place, per [Apollo's key guide](https://docs.apollo.io/docs/create-api-key).
4. Test it. A GET request to `/auth/health` with a working key returns `"healthy": true` and `"is_logged_in": true`, per [Apollo's test guide](https://docs.apollo.io/docs/test-api-key).

```
curl "https://api.apollo.io/api/v1/auth/health" \
  -H "x-api-key: $APOLLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache"
```

Send the key only in the `x-api-key` header. Apollo's [OpenAPI guide](https://docs.apollo.io/reference/openapi-specification) warns that an API key sent as a Bearer token returns `401 Invalid API key`. Bearer tokens are for OAuth only.

### Scoped key, master key or OAuth?

Apollo offers three kinds of credential, and the right one depends on who your code works for.

- **Scoped key**, the default. It can call only the endpoints you picked. Any other endpoint returns a 403, per [Apollo's key guide](https://docs.apollo.io/docs/create-api-key). Give each integration its own scoped key.
- **Master key**. It reaches every endpoint. A few endpoints, such as get a list of users, only work with one. Apollo says to treat a master key like a password.
- **OAuth 2.0**, for partners who build apps used by other Apollo customers. You register the app under Settings, Integrations, API Keys, pick scopes such as `people_match`, and add up to 4 HTTPS redirect URLs, per [Apollo's OAuth guide](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners).

Who a request acts as matters too. Every API key request acts as your workspace's longest-standing active admin, whoever created the key, per [Apollo's authentication docs](https://docs.apollo.io/reference/authentication). Records you create belong to that admin. An OAuth token acts as the person who granted it.

**Figure 1: Which Apollo API credential to use.** Three cards compare Apollo's credentials. A scoped API key is the default for your own code: you pick the endpoints it may call, and other endpoints return a 403 error. A master key reaches every endpoint, including admin-only ones such as get a list of users, and should be treated like a password. OAuth 2.0 is for apps used by other Apollo customers: you register the app, pick scopes, and requests act as the user who approved it. A note below says an API key acts as the workspace's longest-standing active admin, and sharing Apollo data with non-Apollo users needs a custom agreement.

*The three ways to authenticate to the Apollo API. Sources: [Create an API Key](https://docs.apollo.io/docs/create-api-key), [Authentication](https://docs.apollo.io/reference/authentication), [OAuth 2.0](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners) and the [Developer FAQs](https://docs.apollo.io/docs/developer-faqs), checked October 15, 2026.*

## Which endpoints does the Apollo API offer?

Most teams use four Apollo endpoints: people search, people enrichment, organization enrichment and organization search. Record and sequence endpoints then write the results into your Apollo account. This table lists the main ones, from Apollo's endpoint reference pages checked October 15, 2026.

| Endpoint and path | What it does | Credits |
| --- | --- | --- |
| [People API Search](https://docs.apollo.io/reference/people-api-search) `POST /mixed_people/api_search` | Finds new people by title, location, seniority and company filters. No emails or phones | 0 |
| [People Enrichment](https://docs.apollo.io/reference/people-enrichment) `POST /people/match` | Matches one person by name and domain, email, hashed email, LinkedIn URL or Apollo ID | 1 to 9 per person |
| [Bulk People Enrichment](https://docs.apollo.io/reference/bulk-people-enrichment) `POST /people/bulk_match` | Up to 10 people per call, in a `details[]` array | 1 to 9 per person |
| [Organization Enrichment](https://docs.apollo.io/reference/organization-enrichment) `GET /organizations/enrich` | One company by domain, LinkedIn URL, website or name | 1 |
| [Organization Search](https://docs.apollo.io/reference/organization-search) `POST /mixed_companies/search` | Finds companies with filters | 1 per page of up to 100 |
| [Create a Contact](https://docs.apollo.io/reference/create-a-contact) `POST /contacts` | Saves a person as a contact in your Apollo account | 0 |
| [Add Contacts to a Sequence](https://docs.apollo.io/reference/add-contacts-to-sequence) `POST /emailer_campaigns/{id}/add_contact_ids` | Enrolls saved contacts in a sequence | 0 |
| [Poll Webhook Result](https://docs.apollo.io/reference/poll-webhook-result) `GET /webhook_result/{request_id}` | Fetches phone or waterfall results you didn't get by webhook | 0 |

A few details decide how you chain these calls together:

- **Search returns no contact details.** [People API Search](https://docs.apollo.io/reference/people-api-search) returns IDs, titles and flags such as `has_email`, and the sample response masks last names. It shows at most 50,000 records: 100 per page, up to 500 pages. To get an email, pass the person's ID to people enrichment.
- **Matches come with a confidence.** People enrichment returns `match_confidence` as high, medium, low or none. Apollo warns that a name without a domain or email can return a 200 with nothing enriched.
- **Phones and personal emails are off by default.** You turn them on with `reveal_phone_number` and `reveal_personal_emails`. Apollo won't reveal personal emails for people in GDPR regions, per the [people enrichment reference](https://docs.apollo.io/reference/people-enrichment).
- **Only contacts can join a sequence.** The full path is search, enrich, create a contact, then add it to a sequence. [Create a Contact](https://docs.apollo.io/reference/create-a-contact) does not dedupe by default. With `run_dedupe=true` it overwrites a matching contact in place.

## How much does the Apollo API cost?

The Apollo API has no separate price. Calls spend the credits in your Apollo plan, and only enrichment, organization search, news search and some AI endpoints use them, per [Apollo's API pricing page](https://docs.apollo.io/docs/api-pricing), updated October 7, 2026. Every other endpoint costs 0 credits.

| Apollo API call | Credits | About, on annual plans |
| --- | --- | --- |
| People search | 0 | $0 |
| People enrichment: profile and email | 1 | $0.02 |
| People enrichment: mobile returned | 8 more | $0.16 more |
| Email waterfall | Usually 1 to 4, can pass 20 | $0.02 to $0.08 |
| Phone waterfall | Usually 8 to 25, can pass 45 | $0.16 to $0.49 |
| Organization enrichment | 1 per company | $0.02 |
| Organization search | 1 per page of up to 100 | $0.02 a page |
| Job postings | 1 per page of up to 10,000 | $0.02 a page |
| News articles search | 1 per page of up to 25 | $0.02 a page |
| Contacts, accounts, sequences, tasks | 0 | $0 |

The credit rules behind the table, from the same [API pricing page](https://docs.apollo.io/docs/api-pricing):

- People enrichment charges only when it finds credit-consuming data. A call that finds nothing costs 0 credits.
- There is no profile charge when `match_confidence` is none. A low-confidence match is charged only if it returns data you didn't send.
- Waterfall costs depend on the vendors your admin picked. Some vendors charge per lookup even when they find nothing.
- Legacy plans may use credits differently. Check Settings, Billing and credits, About credits.

**Figure 2: Apollo API credits per call.** Bar chart of the credits each Apollo API call uses. People search uses 0 credits. People enrichment uses 1 credit for an email, about $0.02, and 9 credits for an email plus a mobile, about $0.18. An email waterfall usually uses 1 to 4 credits and can pass 20. A phone waterfall usually uses 8 to 25 credits and can pass 45. Organization enrichment uses 1 credit per company and organization search 1 credit per page. Contact and sequence endpoints use 0 credits.

*Credits per Apollo API call. Dashed boxes show the usual range for waterfall lookups. Dollar values are our math at Basic's annual rate of $588 for 30,000 credits. Sources: [Apollo API pricing](https://docs.apollo.io/docs/api-pricing) and [Apollo pricing](https://www.apollo.io/pricing), checked October 15, 2026.*

The dollar figures are our math. Apollo Basic costs $49 a seat a month billed annually, or $588 a year, for 30,000 credits, per [Apollo's pricing page](https://www.apollo.io/pricing). That is about $0.0196 a credit. Professional ($79 a seat a month for 48,000 credits a year) and Organization ($119 for 72,000, with 3 seats minimum) work out the same. So an email costs about $0.02, a mobile about $0.16, and both together about $0.18. Those rates assume you use every credit; our [Apollo pricing guide](https://enrich.chat/blog/apollo-pricing/) shows how unused credits change the math.

### Which Apollo plans include API access?

Apollo's own pages disagree on this, so here is each statement as we read it on October 15, 2026:

- **The plan table** on [Apollo's pricing page](https://www.apollo.io/pricing) ticks "API Enrichment" and "All other APIs" for Free, Basic, Professional and Organization.
- **The pricing FAQ** on the same page says API access for advanced or custom integrations is on Custom plans.
- **The developer FAQ** says all plans include at least basic API access, and some advanced features need certain plans, per [Apollo's developer FAQ](https://docs.apollo.io/docs/developer-faqs).
- **The key guide** says access depends on your plan and points you to sales, per [Create an API Key](https://docs.apollo.io/docs/create-api-key).
- **The error docs** list a 403 with `API_INACCESSIBLE` when your plan doesn't include API access, per [Apollo's status codes](https://docs.apollo.io/reference/status-codes).

In practice, any plan can make basic calls, and Apollo does not publish which endpoints count as advanced. Free accounts must be registered with a work email to use search and enrichment, per the [API overview](https://docs.apollo.io/reference/apollo-api). Test the exact endpoints you need before you commit to a plan.

One more rule matters if you build software. Apollo's plans are for internal business use. Sharing, exposing or reselling Apollo data to non-Apollo users needs a custom agreement, per the [developer FAQ](https://docs.apollo.io/docs/developer-faqs) and the pricing FAQ. That covers most AI SDR tools and data apps.

## How does the Apollo API return mobile numbers?

Apollo never puts mobile numbers in the first response. You set `reveal_phone_number=true` and pass a `webhook_url`. Apollo answers right away with the profile and email, then posts the phone numbers to your webhook later, which "can take several minutes", per the [people enrichment reference](https://docs.apollo.io/reference/people-enrichment).

**Figure 3: How an Apollo mobile lookup flows, and the one-call alternative.** A sequence diagram. Step 1: your app sends POST /people/match to the Apollo API with reveal_phone_number set to true and a webhook_url. Step 2: Apollo returns 200 right away with the person, email, email_status and a request_id. Step 3: later, which can take several minutes, Apollo posts phone_numbers, with type_cd, status_cd and credits_consumed, to your webhook. Step 4: instead of a webhook you can set poll_only to true and call GET /webhook_result with the request_id. Below, Enrich.chat takes one round trip: GET /v1/person returns the email, the mobile and credits_used in one reply.

*An Apollo mobile lookup takes two deliveries: a synchronous answer and a later webhook or poll. Enrich.chat returns the mobile in the same response. Sources: [Retrieve Mobile Phone Numbers](https://docs.apollo.io/docs/retrieve-mobile-phone-numbers-for-contacts), [Poll Webhook Result](https://docs.apollo.io/reference/poll-webhook-result) and [agents.md](https://enrich.chat/agents.md), checked October 15, 2026.*

What you need to build for the webhook, from [Apollo's phone number guide](https://docs.apollo.io/docs/retrieve-mobile-phone-numbers-for-contacts) and the endpoint reference:

- **A public HTTPS endpoint.** Apollo may retry a delivery, so your handler must cope with the same payload twice.
- **Code that reads the payload.** It holds a `people` array. Each phone has a `sanitized_number`, a `type_cd` such as mobile or work_direct, a `status_cd` and a do-not-call status. The payload also reports `credits_consumed`.
- **A way to match it back.** Store the person's ID or the `request_id` from the first response, then join the phones to the right row when they arrive.
- **Error handling.** Asking for phones without a `webhook_url` returns a 400. So does sending a `webhook_url` with `poll_only=true`.

If you can't host a webhook, set `poll_only=true` and call [Poll Webhook Result](https://docs.apollo.io/reference/poll-webhook-result) with the `request_id`. While the lookup runs, it returns a 404 with `result_pending` and a `retry_after_seconds` value. Results stay available for 30 days, then return a 410.

Waterfall enrichment works the same way. You set `run_waterfall_email` or `run_waterfall_phone`, and the extra vendors' results arrive by webhook, per [Apollo's waterfall guide](https://docs.apollo.io/docs/enrich-phone-and-email-using-data-waterfall). Our guide to [waterfall enrichment](https://enrich.chat/blog/waterfall-enrichment/) explains when the extra sources are worth their cost.

## What are the Apollo API rate limits?

Apollo sets rate limits per team and per endpoint, in minute, hour and day windows that all apply at once. Paid plans get 1,000 enrichment calls a minute with no hourly or daily cap. Free plans get 50 a minute and 600 a day, per [Apollo's rate limits page](https://docs.apollo.io/reference/rate-limits), updated August 21, 2026.

| Endpoint group | Free | Basic and Professional | Organization |
| --- | --- | --- | --- |
| Enrichment: people, organizations, bulk, job postings | 50 a minute, 200 an hour, 600 a day. Bulk: 20 a minute, 100 an hour | 1,000 a minute, no hourly or daily limit | 1,000 a minute, no hourly or daily limit |
| Search: people, organizations, news | 50 a minute, 200 an hour, 600 a day | 200 a minute, 6,000 an hour, 50,000 a day | 200 a minute, 6,000 an hour, 50,000 a day |
| All other endpoints | 50 a minute, 200 an hour, 600 a day | 200 a minute, 400 an hour, 2,000 a day | 200 a minute, 600 an hour, 6,000 a day |

How Apollo's rate limits behave, from the [same page](https://docs.apollo.io/reference/rate-limits):

- **Shared by the team.** Every key and user in a workspace draws from one set of limits. Child workspaces share their parent's limits.
- **Fixed windows.** A window opens with your first request to an endpoint, not on the clock. Hitting any one window blocks that endpoint until the window resets.
- **Headers tell you where you stand.** Responses carry `x-rate-limit-minute`, `x-minute-requests-left` and the hourly and daily versions. A 429 includes `retry-after`, the seconds until the window resets.
- **Some endpoints are tighter.** Query analytics report allows 5 calls an hour. Export conversations allows 1 a minute and 20 an hour on Free.
- **Legacy plans may differ.** Call the `POST /usage_stats/api_usage_stats` endpoint to see your team's real limits.

The sample 429 message in the [people enrichment reference](https://docs.apollo.io/reference/people-enrichment) still quotes 600 calls an hour, so trust the headers over any fixed number. On paid plans, credits usually run out before rate limits do. A Basic seat's 30,000 yearly credits cover about 3,333 email-plus-mobile lookups, by our math.

## What do Apollo API error codes mean?

Apollo uses standard HTTP status codes. Newer errors also carry an `error_details` object with a stable code you should branch on, per [Apollo's status codes page](https://docs.apollo.io/reference/status-codes).

| Code | What it means at Apollo | What to do |
| --- | --- | --- |
| `400` | A bad parameter mix, such as phones without a `webhook_url` | Fix the request before you retry |
| `401` | Key missing or invalid, or the account is inactive | Send the key in `x-api-key`, not as a Bearer token |
| `403` | Your plan lacks API access, or a scoped key lacks the endpoint (`API_INACCESSIBLE`) | Add the endpoint to the key, or check your plan |
| `404` | Record not found, or a poll result still pending | Check the ID, or wait and poll again |
| `422` | Validation error or missing parameter | Read the body for the field at fault |
| `429` | Rate limit reached | Wait the `retry-after` seconds |
| `500` | Error on Apollo's side | Retry, and contact Apollo if it keeps failing |

An `error_details` object has four parts. `code` is a stable ID in the form DOMAIN.CATEGORY.REASON, such as `AUTH.AUTHENTICATION.API_KEY_INVALID`. `message` is human text that can change. `suggestions` lists next steps, with `retry_after_seconds` on rate limits. `context` echoes the values that caused the error.

Plan for one date. On February 16, 2027, Apollo stops returning the old top-level fields, such as `error` and `message`, on errors that use the new format, per its [changelog](https://docs.apollo.io/changelog/api-errors-now-include-structured-details). Code that reads `error` today should read `error_details.code` before then. The same update made organization enrichment return a 422, not a 200 with a null organization, when the company identifier is missing.

## How does an Apollo People Enrichment call compare with Enrich.chat?

Both look up one person per HTTPS call. Apollo's is a POST with an `x-api-key` header and a webhook for the mobile. Enrich.chat's is a GET that returns the email and the mobile in the same response. Here is the same lookup in each, in cURL and Python. The Apollo request follows the parameters in [Apollo's enrichment tutorial](https://docs.apollo.io/docs/enrich-people-data), and the Enrich.chat request follows [agents.md](https://enrich.chat/agents.md).

### Apollo People Enrichment in cURL

```
Q="first_name=Jane&last_name=Doe&domain=acmelogistics.com"
Q="$Q&reveal_phone_number=true"
Q="$Q&webhook_url=https%3A%2F%2Fyour-app.example.com%2Fapollo-phones"

curl -X POST "https://api.apollo.io/api/v1/people/match?$Q" \
  -H "x-api-key: $APOLLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache"
```

### Enrich.chat GET /v1/person in cURL

```
# The free tier needs no key. The Authorization header is optional:
# add -H "Authorization: Bearer $ENRICH_KEY" if you have a paid plan.
curl -G "https://enrich.chat/v1/person" \
  --data-urlencode "name=Jane Doe" \
  --data-urlencode "company=acmelogistics.com" \
  --data-urlencode "fields=email,mobile"
```

### Apollo People Enrichment in Python

```
import os
import requests

r = requests.post(
    "https://api.apollo.io/api/v1/people/match",
    params={
        "first_name": "Jane",
        "last_name": "Doe",
        "domain": "acmelogistics.com",
        "reveal_phone_number": "true",
        "webhook_url": "https://your-app.example.com/apollo-phones",
    },
    headers={
        "x-api-key": os.environ["APOLLO_API_KEY"],
        "Content-Type": "application/json",
        "Cache-Control": "no-cache",
    },
    timeout=30,
)
r.raise_for_status()
person = r.json().get("person") or {}
print(
    person.get("email"),
    person.get("email_status"),
    person.get("match_confidence"),
)

# The phones arrive later, as a POST to your webhook_url.
# A minimal receiver in Flask:
from flask import Flask, request

app = Flask(__name__)

@app.post("/apollo-phones")
def apollo_phones():
    payload = request.get_json()
    for p in payload.get("people", []):
        for phone in p.get("phone_numbers", []):
            print(p["id"], phone["sanitized_number"], phone["type_cd"])
    return "", 200
```

### Enrich.chat GET /v1/person in Python

```
import os
import requests

# Optional: the free tier needs no key. A paid plan's key starts with pp_
headers = {}
if os.environ.get("ENRICH_KEY"):
    headers["Authorization"] = "Bearer " + os.environ["ENRICH_KEY"]

r = requests.get(
    "https://enrich.chat/v1/person",
    params={
        "name": "Jane Doe",
        "company": "acmelogistics.com",
        "fields": "email,mobile",
    },
    headers=headers,
    timeout=30,
)
person = r.json()

if r.status_code == 402:
    # free_limit_reached, credits_exhausted or plan_inactive
    print(person["error"], person["message"], person.get("upgrade_url", ""))
elif not r.ok:
    print(person["error"], person["message"])
elif person["found"]:
    print(person["work_email"], person["mobile"], person["credits_used"])
else:
    print("not found, 0 credits")
```

The two calls differ in more than the method:

|  | Apollo People Enrichment | Enrich.chat GET /v1/person |
| --- | --- | --- |
| Account | Apollo account and API key; free accounts need a work email | None for 10 free lookups a day. For more, log in on the [account page](https://enrich.chat/account/), pick a plan and copy a key that starts with `pp_` |
| Inputs | Name and domain, email, hashed email, LinkedIn URL or Apollo ID | LinkedIn URL, email, or name and company |
| Mobile | Sent later to your webhook, or polled | In the same response, with `mobile.line` mobile or unknown |
| Email status | `email_status`; search filters list verified, unverified, likely to engage and unavailable | `work_email.status`: verified, catch_all or unknown |
| Cost | 1 credit for the email, 8 more for a mobile, from a per-seat plan | Monthly plans from $29. A work email found uses 10 credits and a mobile 250, or $0.0029 and $0.0725 pro-rated on Growth |
| No match | 0 credits | `"found": false`, 0 credits |
| Speed limit | 1,000 enrichment calls a minute on paid plans | Agents keep to 5 requests a second |

Apollo facts in this table come from the [people enrichment reference](https://docs.apollo.io/reference/people-enrichment) and the [people search reference](https://docs.apollo.io/reference/people-api-search). Every Enrich.chat response includes `credits_used`, so your code sees what each call used. Enrich.chat never logs in to LinkedIn; a LinkedIn URL is only a lookup key. The [person enrichment API](https://enrich.chat/api/person-enrichment/) page lists every field, and the free [email finder](https://enrich.chat/tools/email-finder/) runs the same lookup in a browser.

You don't have to write the code at all. An AI agent can read the docs and make the calls itself:

```text
Use www.enrich.chat to find the work email and mobile for each person in my list. Send the LinkedIn URL when a row has one, else the name and company. Mark misses as not found, flag catch-all emails, and tell me the total credits_used.
```

## When is the Apollo API the right choice?

The Apollo API is the right choice when Apollo is already your system of record. If your reps work in Apollo every day, the API keeps their contacts, sequences and tasks in step with your own code at no extra credit cost.

- **You already sequence in Apollo.** Only Apollo contacts can join Apollo sequences, and the contact, sequence and task endpoints cost 0 credits, per [Apollo's API pricing](https://docs.apollo.io/docs/api-pricing). Enrich.chat has no sequencer and can't add leads to an Apollo sequence.
- **You need Apollo IDs.** Apollo person and organization IDs tie search results, enrichment, contacts and accounts together. If your CRM or warehouse keys on them, staying in one system saves a mapping job.
- **Your seats are paid for anyway.** If your team already has spare credits each cycle, API calls use money you have spent.
- **You want company search, job postings and news from one vendor.** Apollo sells all three, on the same credits.
- **You want an MCP connector tied to your Apollo account.** Apollo runs one on the same account and credits. Enrich.chat has an MCP server too, with no sign-in, but its tools are read-only data lookups.

The Apollo API is a weaker fit when you only need contact data in an app, a script or an AI agent. You pay for seats you may not use, mobiles arrive by webhook, and a product built on the data needs a custom agreement.

### What are the alternatives to the Apollo API?

- **Enrich.chat** is built for agents and apps. One GET returns the work email and mobile, each with its status, on [monthly credit plans](https://enrich.chat/pricing/) from $29 with unlimited seats, and credits are spent only on matches. You can start with 10 free lookups a day without signing up, through the plain API or the keyless MCP server on the [install page](https://enrich.chat/install/). For more, log in on the [account page](https://enrich.chat/account/) with an email and a one-time code, pick a plan, and your API key appears there. Two gaps to weigh: there is no sequencer or dialer, and SDKs are still planned.
- **People Data Labs** sells credit plans for developers. Pro starts at $98 a month for 350 credits, and the free plan hides emails and phones, per [PDL's pricing page](https://www.peopledatalabs.com/pricing/person). Our [People Data Labs pricing guide](https://enrich.chat/blog/people-data-labs-pricing/) has the details.
- **Other sales databases** such as ZoomInfo, Lusha and RocketReach are compared in our list of [Apollo alternatives](https://enrich.chat/alternatives/apollo/). For ZoomInfo's API, see [ZoomInfo API pricing](https://enrich.chat/blog/zoominfo-api-pricing/).

Whichever API you pick, you are responsible for TCPA rules on calls and texts, and for CAN-SPAM and GDPR on email. Anyone can remove their data from Enrich.chat at [enrich.chat/opt-out/](https://enrich.chat/opt-out/).

## Frequently asked questions

### Is the Apollo API free?

Partly. Every Apollo plan, Free included, has at least basic API access, per [Apollo's developer FAQ](https://docs.apollo.io/docs/developer-faqs). People search uses no credits, but enrichment does, and the Free plan grants 900 credits a seat a year, paid out monthly. Free accounts must be registered with a work email to use search and enrichment endpoints. Free plans are also capped at 50 calls a minute and 600 a day on enrichment, per [Apollo's rate limits](https://docs.apollo.io/reference/rate-limits).

### How do I get an Apollo API key?

In Apollo, click Settings, then Integrations, then API Keys, then Create new key. Name the key, pick the endpoints it may call or turn on Set as master key, then copy it somewhere safe. You must be an admin or have a permission profile that allows it. Test the key with a GET request to https://api.apollo.io/api/v1/auth/health. A working key returns healthy and is_logged_in as true, per [Apollo's test guide](https://docs.apollo.io/docs/test-api-key).

### How much does the Apollo API cost per call?

The API spends your plan's credits. People enrichment costs 1 credit for the email and profile and 8 more if a mobile comes back. Organization enrichment costs 1 credit, organization search 1 credit per page of up to 100, and people search nothing, per [Apollo's API pricing](https://docs.apollo.io/docs/api-pricing). On Basic billed annually, $588 a year buys 30,000 credits, so by our math a credit is about $0.02 and a mobile about $0.16.

### What is the Apollo API rate limit?

It depends on your plan and the endpoint. On paid plans, enrichment endpoints allow 1,000 requests a minute with no hourly or daily limit, and search endpoints allow 200 a minute and 50,000 a day. Free plans get 50 a minute, 200 an hour and 600 a day. Limits are shared by the whole team. Going over returns HTTP 429 with a retry-after header, per [Apollo's rate limits page](https://docs.apollo.io/reference/rate-limits).

### Why does the Apollo API not return phone numbers?

Apollo only returns phones when you ask, and never in the first response. Set reveal_phone_number=true and pass a public HTTPS webhook_url. Apollo answers right away with the profile, then posts the phone numbers to your webhook, which can take several minutes. Without a webhook you get a 400 error. If you can't host one, set poll_only=true and poll the webhook result endpoint with the request_id, per [Apollo's people enrichment docs](https://docs.apollo.io/reference/people-enrichment).

### Is the Apollo.io API the same as Apollo GraphQL?

No. The Apollo.io API is a REST API for B2B contact data, enrichment and sales outreach, run by Apollo.io. Apollo GraphQL is a separate company that makes developer tools for GraphQL APIs. Its apollo-api package is part of the [Apollo Kotlin client](https://www.apollographql.com/docs/kotlin/kdoc/apollo-api/index.html) and only handles GraphQL models and responses. If a guide mentions schemas, queries or Rover, it is about GraphQL. If it mentions credits, contacts or sequences, it is about Apollo.io.

## Sources

1. [API Pricing and Credits](https://docs.apollo.io/docs/api-pricing)
2. [Rate Limits](https://docs.apollo.io/reference/rate-limits)
3. [People Enrichment](https://docs.apollo.io/reference/people-enrichment)
4. [Bulk People Enrichment](https://docs.apollo.io/reference/bulk-people-enrichment)
5. [People API Search](https://docs.apollo.io/reference/people-api-search)
6. [Organization Enrichment](https://docs.apollo.io/reference/organization-enrichment)
7. [Organization Search](https://docs.apollo.io/reference/organization-search)
8. [Retrieve Mobile Phone Numbers for Contacts](https://docs.apollo.io/docs/retrieve-mobile-phone-numbers-for-contacts)
9. [Enrich Contact Emails and Phone Numbers with Waterfall Enrichment](https://docs.apollo.io/docs/enrich-phone-and-email-using-data-waterfall)
10. [Poll Webhook Result](https://docs.apollo.io/reference/poll-webhook-result)
11. [Authentication](https://docs.apollo.io/reference/authentication)
12. [Create an API Key](https://docs.apollo.io/docs/create-api-key)
13. [Test an API Key](https://docs.apollo.io/docs/test-api-key)
14. [OAuth 2.0 (Partners)](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners)
15. [Status Codes and Errors](https://docs.apollo.io/reference/status-codes)
16. [API errors now include structured details](https://docs.apollo.io/changelog/api-errors-now-include-structured-details)
17. [Developer FAQs](https://docs.apollo.io/docs/developer-faqs)
18. [Build with Apollo](https://docs.apollo.io/docs/build-with-apollo)
19. [Apollo API overview](https://docs.apollo.io/reference/apollo-api)
20. [OpenAPI Specification](https://docs.apollo.io/reference/openapi-specification)
21. [Enrich People Data](https://docs.apollo.io/docs/enrich-people-data)
22. [Create a Contact](https://docs.apollo.io/reference/create-a-contact)
23. [Add Contacts to a Sequence](https://docs.apollo.io/reference/add-contacts-to-sequence)
24. [Apollo.io pricing plans](https://www.apollo.io/pricing)
25. [apollo-api module, Apollo Kotlin](https://www.apollographql.com/docs/kotlin/kdoc/apollo-api/index.html)
26. [Popular Reddit App Apollo Shutting Down on June 30](https://www.macrumors.com/2023/06/08/apollo-shutting-down-june-30/)
27. [People Data Labs pricing: Person Data](https://www.peopledatalabs.com/pricing/person)

## Try this prompt

Enrich a list without webhooks

```text
Use www.enrich.chat to find the work email and mobile for each person in my list. Send the LinkedIn URL when a row has one, else the name and company. Mark misses as not found, flag catch-all emails, and tell me the total credits_used.
```

## Related

- [Apollo pricing explained: plans, credits and cost per contact](https://enrich.chat/blog/apollo-pricing/)
- [Apollo MCP: setup, costs and a no-sign-in alternative](https://enrich.chat/blog/apollo-mcp-alternative/)
- [Person enrichment API](https://enrich.chat/api/person-enrichment/)
