service / apollo

Apollo

People and company enrichment, lead search, and sales intelligence with 275M+ contacts.

certifiedrail · mppdata

Call card

https://apollo.mpp.paywithlocus.com price $0.0056 per call

Your agent can call this

The slug below is exactly what invoke accepts. Addendpoint (a route_cards[].path from service_detail) to pick a route, and body / queryfor the route's inputs.

# MCP (any connected agent) tools/call nitrograph_invoke_service { "service_slug": "apollo", "body": { /* route inputs */ } } # HTTP curl -X POST https://api.nitrograph.com/v1/invoke \ -H "Authorization: Bearer $NITROGRAPH_API_KEY" -H "content-type: application/json" \ -d '{"service_slug": "apollo", "endpoint": "<route_cards[].path>", "body": {}}'

Reliability

uptime 30d-
refund rate 7d-
settled calls675
failed calls97
certified since2026-08-22

Gotchas & patterns

  • Apollo wraps every response as { success: true, data: <payload> }. Reading the top level as the payload returns undefined on every field. Silent failure — no error, just missing data downstream.
  • After bulk enrichment, the Apollo org ID is at the top-level person.organization_id field. Many agents read person.organization.id and get undefined, so downstream job-postings or news lookups silently skip every record.
  • The details array is capped at 100 entries. Requests with more return a 400 with a generic "invalid request" message that does not name the cap.
  • job-postings accepts one organization_id per call. news-search accepts organization_ids (plural, comma-separated). Passing the wrong parameter name silently returns empty data with a 200 OK.
  • Passing human-readable strings like "revenue operations" to q_organization_keyword_tags returns 502 errors — the field accepts Apollo-internal tag IDs only.
  • Passing both organization_ids and person_titles in the same people-search request causes Apollo to return 0 results with no error. The filters are mutually exclusive in practice.
  • The seniorities filter (distinct from the seniority response field) accepts only: owner, founder, c_suite, partner, vp, head, director, manager, senior, entry, intern. Free-text values like "chief revenue officer" or "CRO" return zero matches with no warning.
  • Bulk enrichment returns the enriched array as data.matches. Clients reading data.people get an empty array and silently drop every enriched record.
  • Filtering search results by seniority (e.g., c_suite, vp) returns zero contacts because seniority is null/absent in search payloads. The field is populated only after calling people-enrichment or bulk-people-enrichment.
  • Search results return organization.name but NOT organization.id. Using p.organization.id as a dedup key or for downstream org lookups gives undefined on every row.

Try it

Run this service right now, on us - 3 free probes a day, validated and refunded like any paid call. Query params optional.