Apollo search
Source people from Apollo's API search: masked rows (first name, title, company, has-email) at no credit cost; reveal the ones worth paying for with apollo/enrich.
| Connector | apollo/search |
|---|---|
| Role | source |
| Records | person |
| Tier | verified since 2026-09-27 |
| Credential | APOLLO_API_KEY stored once with gtme secret set APOLLO_API_KEY |
| Cost | $0 |
| Calls | POST https://api.apollo.io/api/v1/mixed_people/api_search |
| Source | github.com/gtme-run/gtme-bindings/apollo-search |
Use it
Install it from the registry. Nothing installs unverified: the fixtures run offline first.
gtme adapters add github.com/gtme-run/gtme-bindings/apollo-search@mainThe command prints the hosts the binding will call and the credentials it will ask for, then pins the commit it fetched. Then, in a pipeline file:
source:
use: apollo/search
with:
query: QUERYReplace the placeholder:
QUERY: free-text search, such as "vp marketing, saas, 50-200 employees"
gtme plan pipeline.yaml checks the credential is set and that every field this step needs is provided by a step before it, without calling anyone.
Needs
Nothing. A source starts the pipeline.
Provides
first_name, last_name, title, company_name, apollo.id, apollo.has_email
Config
| Key | Type | What it does |
|---|---|---|
query | string | Free-text search, such as "vp marketing, saas, 50-200 employees" |
limit | integer | Stop after this many people |
titles | array of string | person_titles |
seniorities | array of string | person_seniorities |
locations | array of string | organization_locations |
employee_ranges | array of string | organization_num_employees_ranges, such as "50,200" |
domains | array of string | q_organization_domains |
per_page | integer | Default 25. |
base_url | string | Override the API host (testing) Default https://api.apollo.io. |
What a response looks like
Recorded from a real response to POST /api/v1/mixed_people/api_search, status 200. The conformance kit proves this payload in produces canonical records out, and gtme run --simulate serves it in place of the network.
{
"total_entries": 2,
"people": [
{
"id": "5f3b0c1a2d",
"first_name": "Jane",
"last_name_obfuscated": "D.",
"title": "VP Marketing",
"has_email": true,
"has_direct_phone": false,
"has_city": true,
"has_state": true,
"has_country": true,
"last_refreshed_at": "2026-08-01T00:00:00Z",
"organization": {
"name": "Acme Inc",
"has_industry": true,
"has_phone": false,
"has_city": true,
"has_state": true,
"has_country": true,
"has_zip_code": true,
"has_revenue": true,
"has_employee_count": true
}
},
{
"id": "6a4c1d2b3e",
"first_name": "Bob",
"last_name_obfuscated": "S.",
"title": "Head of Growth",
"has_email": false,
"has_direct_phone": false,
"has_city": false,
"has_state": false,
"has_country": true,
"last_refreshed_at": "2026-07-15T00:00:00Z",
"organization": {
"name": "Grove Labs",
"has_industry": true,
… 11 more lines in the fixture fileOn this page, connector means what gtme calls an adapter. This one is a binding from the registry. Two adapter tiers explains the difference.