API reference
Apollo Scraper API
Create Apollo people, company and mobile number exports, find emails and phone numbers, and verify email lists from your own apps, track their progress, and download the finished CSV. It's a simple JSON REST API that uses the same credits as your dashboard.
https://api.apolloscrapers.com/api/v1Get your API key
Create a key in your dashboard.
Quickstart
Place your first order in 2 minutes.
Webhooks
Get notified when files are ready.
How it works
- 1
Create an order
POST an Apollo search URL to a scraper endpoint, or a list to a data tool. Credits are deducted up front.
- 2
Track progress
Poll the order, or receive a webhook as it moves to processing and delivered.
- 3
Download the CSV
Fetch the file from download_url. Undelivered leads are refunded automatically.
Quickstart
Three requests take you from a fresh API key to a downloaded CSV.
Check your key and balance
Store your key in an environment variable, then call /me. A 200 response means you're connected.
curl "https://api.apolloscrapers.com/api/v1/me" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"Create an order
Send an Apollo search URL to a scraper endpoint. Save the order_id from the response.
curl -X POST "https://api.apolloscrapers.com/api/v1/apollo-people-scraper" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: people-order-2026-09-10-001" \
-d '{
"search_url": "https://app.apollo.io/#/people?personTitles[]=founder&personLocations[]=United%20States",
"results_file_name": "apollo-founders-usa",
"contact_count": 1000,
"verify_emails": "yes",
"note": "US founders only",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'Check status and download
Poll the order until status is completed, then download the file from download_url. Or skip polling with a callback_url.
curl "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"Authentication
Every request needs your API key in the Authorization header as a bearer token. Create, view or regenerate your key on the API Key page.
Authorization: Bearer YOUR_API_KEYexport APOLLO_SCRAPER_API_KEY="as_live_..."Credits & pricing
Each scraper has its own credit rate (see the table below). Credits are deducted when an order is accepted; if fewer leads are delivered or the order is cancelled, the difference is refunded automatically. Credits cost $3 per 1,000.
| Service | Endpoint | Credits / 1,000 | Min. per order |
|---|---|---|---|
| People | /apollo-people-scraper | 1,000(+300 with verify_emails) | 1,000 |
| Company | /apollo-company-scraper | 834 | 1,000 |
| Mobile Number | /apollo-mobile-scraper | 20,000 | 100 |
| Email Finder | /email-finder | 5,000 | 100 |
| Phone Number Finder | /phone-finder | 20,000 | 100 |
| Email Verifier | /email-verifier | 500 | 100 |
Maximum 1,000,000 leads per order. Live values are always available from GET /pricing.
Errors
Errors use standard HTTP status codes and always return the same JSON shape, with a stable code you can branch on and a readable message.
Status codes
- 400Invalid request: the message names the field
- 401Missing, invalid or revoked API key
- 402Not enough credits for this order
- 403Account suspended
- 404Order not found
- 409File not ready yet
- 410File expired
- 429Rate limit exceeded
- 500Something went wrong on our side
{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits for this order."
}
}Rate limits
Each API key can make 60 requests per minute. Every response includes X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit you get a 429; wait a few seconds and retry.
Idempotency
Network hiccups happen. Add an Idempotency-Key header (8–100 characters, unique per order) to create requests. If you retry with the same key, you get the original order back instead of being charged twice.
Scrapers
Apollo People Scraper
https://api.apolloscrapers.com/api/v1/apollo-people-scraperCreate an Apollo people export from a filtered Apollo people search URL. Add email verification and a note when the filter setup needs extra context.
Body parameters
- search_urlstringrequired
Full Apollo people search URL copied from the browser address bar (https://app.apollo.io/#/people?...).
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- contact_countnumberrequired
Number of leads to export. Minimum 1,000, maximum 1,000,000.
- verify_emailsstringoptional
Set to yes to verify emails before delivery (+300 credits per 1,000 leads). Defaults to no. Booleans are accepted too.
yesno - notestringoptional
Optional filter notes or delivery instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - contact_countnumber
Number of leads requested.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Minimum contact_count is 1,000; maximum is 1,000,000.
- Costs 1,000 credits per 1,000 leads, plus 300 per 1,000 with verify_emails.
- Credits are checked and deducted when the order is accepted. If fewer leads are delivered, or the order is cancelled, the difference is refunded automatically.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- Poll status_url with the same bearer token. download_url is populated only after status becomes completed.
- When callback_url is provided, store callback_signing_secret securely; it is shown only in the creation response.
- Delivered files remain available for up to six months from the delivery date.
curl -X POST "https://api.apolloscrapers.com/api/v1/apollo-people-scraper" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: people-order-2026-09-10-001" \
-d '{
"search_url": "https://app.apollo.io/#/people?personTitles[]=founder&personLocations[]=United%20States",
"results_file_name": "apollo-founders-usa",
"contact_count": 1000,
"verify_emails": "yes",
"note": "US founders only",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "people",
"status": "pending",
"contact_count": 1000,
"credits_deducted": 1300,
"new_balance": 11100,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Scrapers
Apollo Company Scraper
https://api.apolloscrapers.com/api/v1/apollo-company-scraperCreate an Apollo company export from a filtered Apollo companies search URL: domains, industries, headcount, revenue and locations.
Body parameters
- search_urlstringrequired
Full Apollo companies search URL copied from the browser address bar (https://app.apollo.io/#/companies?...).
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- contact_countnumberrequired
Number of leads to export. Minimum 1,000, maximum 1,000,000.
- notestringoptional
Optional filter notes or delivery instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - contact_countnumber
Number of leads requested.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Minimum contact_count is 1,000; maximum is 1,000,000.
- Costs 834 credits per 1,000 leads.
- Credits are checked and deducted when the order is accepted. If fewer leads are delivered, or the order is cancelled, the difference is refunded automatically.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- Poll status_url with the same bearer token. download_url is populated only after status becomes completed.
- When callback_url is provided, store callback_signing_secret securely; it is shown only in the creation response.
- Delivered files remain available for up to six months from the delivery date.
curl -X POST "https://api.apolloscrapers.com/api/v1/apollo-company-scraper" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: company-order-2026-09-10-001" \
-d '{
"search_url": "https://app.apollo.io/#/companies?organizationLocations[]=Germany&organizationNumEmployeesRanges[]=51%2C200",
"results_file_name": "saas-companies-germany",
"contact_count": 1000,
"note": "B2B SaaS only",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "company",
"status": "pending",
"contact_count": 1000,
"credits_deducted": 834,
"new_balance": 11566,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Scrapers
Apollo Mobile Number Scraper
https://api.apolloscrapers.com/api/v1/apollo-mobile-scraperCreate an Apollo people export that includes direct dial and mobile phone numbers where available.
Body parameters
- search_urlstringrequired
Full Apollo people search URL copied from the browser address bar (https://app.apollo.io/#/people?...).
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- contact_countnumberrequired
Number of leads to export. Minimum 100, maximum 1,000,000.
- notestringoptional
Optional filter notes or delivery instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - contact_countnumber
Number of leads requested.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Minimum contact_count is 100; maximum is 1,000,000.
- Costs 20,000 credits per 1,000 leads.
- Credits are checked and deducted when the order is accepted. If fewer leads are delivered, or the order is cancelled, the difference is refunded automatically.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- Poll status_url with the same bearer token. download_url is populated only after status becomes completed.
- When callback_url is provided, store callback_signing_secret securely; it is shown only in the creation response.
- Delivered files remain available for up to six months from the delivery date.
curl -X POST "https://api.apolloscrapers.com/api/v1/apollo-mobile-scraper" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: mobile-order-2026-09-10-001" \
-d '{
"search_url": "https://app.apollo.io/#/people?personTitles[]=head%20of%20sales&personLocations[]=United%20Kingdom",
"results_file_name": "uk-sales-leaders-mobile",
"contact_count": 500,
"note": "Prioritise contacts with mobile numbers",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "mobile",
"status": "pending",
"contact_count": 500,
"credits_deducted": 10000,
"new_balance": 2400,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Data tools
Email Finder
https://api.apolloscrapers.com/api/v1/email-finderFind work emails for a list of people. Send names with a company domain (or company name, or LinkedIn URL) and get each row back with email and email_status.
Body parameters
- rowsobject[]required
Your list, one object per person. Needs first_name, last_name and company_domain (company_name or linkedin_url also work). Extra keys are kept and returned in the result. Between 100 and 100,000 rows per order. With multipart/form-data, send a CSV file instead.
- filefileoptional
multipart/form-data only: your list as a UTF-8 CSV with a header row (max 1 GB). Use it instead of rows.
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- notestringoptional
Optional instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json or multipart/form-data
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - row_countnumber
Rows we counted in your list.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Costs 5,000 credits per 1,000 results found.
- Credits for every row are reserved when the order is accepted. When the file is delivered you're only charged for the results we found; the rest is refunded automatically.
- Between 100 and 100,000 rows per order. Split bigger lists into several orders.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- The delivered CSV is your list with the new columns added. Poll status_url or use callback_url, then download it from download_url.
curl -X POST "https://api.apolloscrapers.com/api/v1/email-finder" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: email_finder-order-2026-10-27-001" \
-d '{
"results_file_name": "q4-target-accounts-emails",
"rows": [
{
"first_name": "Ava",
"last_name": "Reed",
"company_domain": "northwindlabs.com"
},
{
"first_name": "Liam",
"last_name": "Hart",
"company_domain": "globexcloud.com"
}
],
"note": "Priority list for Q4",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'curl -X POST "https://api.apolloscrapers.com/api/v1/email-finder" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Idempotency-Key: email_finder-upload-2026-10-27-001" \
-F "results_file_name=q4-target-accounts-emails" \
-F "file=@people.csv" \
-F "callback_url=https://example.com/webhooks/apollo-scraper"{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1043,
"service": "email_finder",
"status": "pending",
"row_count": 100,
"credits_deducted": 500,
"new_balance": 11900,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Data tools
Phone Number Finder
https://api.apolloscrapers.com/api/v1/phone-finderFind mobile and direct-dial numbers for a list of people. LinkedIn URLs give the best match rate; names with a company domain work too. Rows come back with phone and phone_type.
Body parameters
- rowsobject[]required
Your list, one object per person. Needs linkedin_url, or first_name, last_name and company_domain. Extra keys are kept and returned in the result. Between 100 and 100,000 rows per order. With multipart/form-data, send a CSV file instead.
- filefileoptional
multipart/form-data only: your list as a UTF-8 CSV with a header row (max 1 GB). Use it instead of rows.
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- notestringoptional
Optional instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json or multipart/form-data
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - row_countnumber
Rows we counted in your list.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Costs 20,000 credits per 1,000 results found.
- Credits for every row are reserved when the order is accepted. When the file is delivered you're only charged for the results we found; the rest is refunded automatically.
- Between 100 and 100,000 rows per order. Split bigger lists into several orders.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- The delivered CSV is your list with the new columns added. Poll status_url or use callback_url, then download it from download_url.
curl -X POST "https://api.apolloscrapers.com/api/v1/phone-finder" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: phone_finder-order-2026-10-27-001" \
-d '{
"results_file_name": "q4-call-list",
"rows": [
{
"linkedin_url": "https://www.linkedin.com/in/ava-reed"
},
{
"first_name": "Liam",
"last_name": "Hart",
"company_domain": "globexcloud.com"
}
],
"note": "Priority list for Q4",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'curl -X POST "https://api.apolloscrapers.com/api/v1/phone-finder" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Idempotency-Key: phone_finder-upload-2026-10-27-001" \
-F "results_file_name=q4-call-list" \
-F "file=@contacts.csv" \
-F "callback_url=https://example.com/webhooks/apollo-scraper"{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1043,
"service": "phone_finder",
"status": "pending",
"row_count": 100,
"credits_deducted": 2000,
"new_balance": 10400,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Data tools
Email Verifier
https://api.apolloscrapers.com/api/v1/email-verifierCheck a list of emails before you send. Every address comes back with email_status (valid, invalid, risky, catch_all, unknown) and a short reason.
Body parameters
- emailsstring[]required
The emails to check, as an array of strings (or send rows with objects that have an email key). Between 100 and 500,000 rows per order. With multipart/form-data, send a CSV file instead.
- filefileoptional
multipart/form-data only: your list as a UTF-8 CSV with a header row (max 1 GB). Use it instead of rows.
- results_file_namestringrequired
Name used for the order in your history and for the delivered CSV (1–120 characters).
- notestringoptional
Optional instructions for our team (max 1,000 characters).
- callback_urlstringoptional
Public HTTPS URL notified when the order moves to processing, delivered or cancelled.
Headers
- Authorizationstringrequired
Bearer YOUR_API_KEY
- Content-Typestringrequired
application/json or multipart/form-data
- Idempotency-Keystringoptional
Makes retries safe. Sending the same key again returns the original order.
Returns
- messagestring
Human-readable confirmation for the accepted order.
- order_idstring
Unique order ID. Use it to check status and download the result file.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service that received the order.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status. New orders start as pending.
pendingqueuedprocessingcompletedcancelled - row_countnumber
Rows we counted in your list.
- credits_deductednumber
Credits deducted from your balance for this order. Undelivered leads are refunded automatically.
- new_balancenumber
Your credit balance after the deduction.
- status_urlstring
Authenticated endpoint to poll for status and result details.
- download_urlstring | null
Public link to the result file once the order is completed (no API key needed, valid until the file expires); null until then.
- callback_urlstring | null
Webhook URL accepted for this order, or null when none was supplied.
- callback_signing_secretstring | null
Returned once when callback_url is supplied. Store it to verify webhook signatures.
Status codes
- 201Order created
- 400Invalid request
- 401API key missing or invalid
- 402Insufficient credits
- 403Account suspended
- 429Rate limit exceeded
- 500Server error
Good to know
- Costs 500 credits per 1,000 emails checked.
- Credits for every row are reserved when the order is accepted. Duplicates and rows without a usable email are refunded automatically on delivery.
- Between 100 and 500,000 rows per order. Split bigger lists into several orders.
- Send an Idempotency-Key header to retry safely: the same key returns the original order instead of creating a new one.
- The delivered CSV is your list with the new columns added. Poll status_url or use callback_url, then download it from download_url.
curl -X POST "https://api.apolloscrapers.com/api/v1/email-verifier" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: email_verifier-order-2026-10-27-001" \
-d '{
"results_file_name": "newsletter-cleanup",
"emails": [
"ava.reed@northwindlabs.com",
"liam@globexcloud.com"
],
"note": "Priority list for Q4",
"callback_url": "https://example.com/webhooks/apollo-scraper"
}'curl -X POST "https://api.apolloscrapers.com/api/v1/email-verifier" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-H "Idempotency-Key: email_verifier-upload-2026-10-27-001" \
-F "results_file_name=newsletter-cleanup" \
-F "file=@emails.csv" \
-F "callback_url=https://example.com/webhooks/apollo-scraper"{
"message": "Order created successfully",
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1043,
"service": "email_verifier",
"status": "pending",
"row_count": 100,
"credits_deducted": 50,
"new_balance": 12350,
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": null,
"callback_url": "https://example.com/webhooks/apollo-scraper",
"callback_signing_secret": "whsec_3b9f0c2e7d41a8b6c5e0f19d2a7c4b81e6f3d905"
}Orders
Get Order Status
https://api.apolloscrapers.com/api/v1/orders/{order_id}Fetch one order's status, credits and result details. Poll this until status is completed, then download the file from download_url.
Path parameters
- order_idstringrequired
The order_id returned when the order was created.
Returns
- order_idstring
Unique order ID.
- order_numbernumber
Short order number shown in your dashboard.
- servicestring
Service the order was placed with.
peoplecompanymobileemail_finderphone_finderemail_verifier - statusstring
Current processing status.
pendingqueuedprocessingcompletedcancelled - search_urlstring | null
Apollo search URL submitted with the order (null for data tools).
- input_fileobject | null
Data tools only: name, rows and size_bytes of the list you sent.
- results_file_namestring
Name given to the order and its CSV.
- requested_countnumber
Leads requested.
- delivered_countnumber
Leads delivered in the file (0 until completed).
- verify_emailsboolean
Whether email verification was requested.
- notestring | null
Filter notes or delivery instructions sent with the order.
- creditsobject
deducted (charged up front), refunded (returned for undelivered leads or cancellation) and charged (final cost).
- status_urlstring
This endpoint.
- download_urlstring | null
Public CSV download link — works without an API key, so you can share it or open it in a browser. null while processing, after cancellation or once the file expired.
- fileobject | null
name, rows and size_bytes of the delivered CSV.
- callback_urlstring | null
Webhook URL attached to the order.
- cancel_reasonstring | null
Why the order was cancelled, when it was.
- created_atstring
ISO 8601 timestamp of order creation.
- delivered_atstring | null
ISO 8601 timestamp of delivery.
- expires_atstring | null
When the delivered file stops being downloadable.
- delivery_expiredboolean
true once expires_at has passed.
Status codes
- 200Success
- 401API key missing or invalid
- 404Order not found
- 429Rate limit exceeded
Good to know
- You can only read orders that belong to the account that owns the API key; anything else returns 404.
- pending and queued mean the order is waiting for our team; processing means the file is being prepared.
- Poll no more often than once a minute, or use callback_url to be notified instead.
curl "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"{
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "people",
"status": "completed",
"search_url": "https://app.apollo.io/#/people?personTitles[]=founder&personLocations[]=United%20States",
"results_file_name": "apollo-founders-usa",
"requested_count": 2000,
"delivered_count": 1970,
"verify_emails": true,
"note": "US founders only",
"credits": {
"deducted": 2600,
"refunded": 39,
"charged": 2561
},
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": "https://api.apolloscrapers.com/api/orders/ord_8f2c41d9a7b34e01/download?file=0&t=8kq2XvR1mW",
"file": {
"name": "apollo-founders-usa.csv",
"rows": 1970,
"size_bytes": 421580
},
"callback_url": "https://example.com/webhooks/apollo-scraper",
"cancel_reason": null,
"created_at": "2026-09-10T09:24:11.000Z",
"delivered_at": "2026-09-10T13:45:01.000Z",
"expires_at": "2027-03-09T13:45:01.000Z",
"delivery_expired": false
}Orders
Download Result File
https://api.apolloscrapers.com/api/v1/orders/{order_id}/downloadDownload the delivered CSV for a completed order with your API key. The order status response also includes download_url, a public link that works without a key.
Path parameters
- order_idstringrequired
ID of a completed order.
Status codes
- 200CSV file
- 401API key missing or invalid
- 404Order not found
- 409File not ready yet
- 410File expired
- 429Rate limit exceeded
Good to know
- Responds with Content-Type: text/csv and a Content-Disposition filename.
- Returns 409 until the order is completed and 410 after the file expires (six months after delivery).
curl "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01/download" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY" \
-L -o "apollo-founders-usa.csv"first_name,last_name,title,company,email,linkedin_url
Jane,Cooper,Founder & CEO,Northwind Labs,jane@northwindlabs.com,https://linkedin.com/in/janecooper
Marcus,Lee,Co-founder,Brightline,marcus@brightline.io,https://linkedin.com/in/marcusleeOrders
List Orders
https://api.apolloscrapers.com/api/v1/ordersList your orders, newest first, with optional status filtering and offset pagination.
Query parameters
- statusstringoptional
Only return orders with this status.
pendingqueuedprocessingcompletedcancelled - limitnumberoptional
Page size, 1–100. Defaults to 20.
- offsetnumberoptional
Number of orders to skip. Defaults to 0.
Returns
- dataarray
Orders in the same shape as Get Order Status.
- totalnumber
Total orders matching the filter.
- limitnumber
Page size used.
- offsetnumber
Offset used.
- has_moreboolean
true when another page is available.
Status codes
- 200Success
- 400Invalid status filter
- 401API key missing or invalid
- 429Rate limit exceeded
Good to know
- Combine limit and offset to page through results; stop when has_more is false.
curl "https://api.apolloscrapers.com/api/v1/orders?status=completed&limit=20" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"{
"data": [
{
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "people",
"status": "completed",
"search_url": "https://app.apollo.io/#/people?personTitles[]=founder&personLocations[]=United%20States",
"results_file_name": "apollo-founders-usa",
"requested_count": 2000,
"delivered_count": 1970,
"verify_emails": true,
"note": "US founders only",
"credits": {
"deducted": 2600,
"refunded": 39,
"charged": 2561
},
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": "https://api.apolloscrapers.com/api/orders/ord_8f2c41d9a7b34e01/download?file=0&t=8kq2XvR1mW",
"file": {
"name": "apollo-founders-usa.csv",
"rows": 1970,
"size_bytes": 421580
},
"callback_url": "https://example.com/webhooks/apollo-scraper",
"cancel_reason": null,
"created_at": "2026-09-10T09:24:11.000Z",
"delivered_at": "2026-09-10T13:45:01.000Z",
"expires_at": "2027-03-09T13:45:01.000Z",
"delivery_expired": false
}
],
"total": 37,
"limit": 20,
"offset": 0,
"has_more": true
}Account
Get Account & Balance
https://api.apolloscrapers.com/api/v1/meReturn the account that owns the API key and its available credit balance. Handy as a connection test.
Parameters
No parameters. Just send the Authorization header.
Returns
- idstring
Account ID.
- namestring
Account holder name.
- emailstring
Account email.
- credits.availablenumber
Credits available for new orders.
Status codes
- 200Success
- 401API key missing or invalid
- 429Rate limit exceeded
Good to know
- Check credits.available before large orders to avoid 402 responses.
curl "https://api.apolloscrapers.com/api/v1/me" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"{
"id": "usr_4b1d9e2a",
"name": "Alex Morgan",
"email": "alex@example.com",
"credits": {
"available": 12400
}
}Account
Get Pricing
https://api.apolloscrapers.com/api/v1/pricingLive credit costs and order limits for each scraper, so you can estimate credits before ordering.
Parameters
No parameters. Just send the Authorization header.
Returns
- credit_price_usd_per_1000number
Price in USD for 1,000 credits.
- max_countnumber
Largest contact_count accepted per order.
- services[].servicestring
Service key.
peoplecompanymobile - services[].endpointstring
Create-order endpoint for the service.
- services[].credits_per_1000number
Credits charged per 1,000 leads.
- services[].min_countnumber
Smallest contact_count accepted.
- services[].add_onsarray
Optional extras and their cost per 1,000 leads.
Status codes
- 200Success
- 401API key missing or invalid
- 429Rate limit exceeded
Good to know
- Estimated credits = ceil(contact_count × (credits_per_1000 + add-ons) ÷ 1,000).
curl "https://api.apolloscrapers.com/api/v1/pricing" \
-H "Authorization: Bearer $APOLLO_SCRAPER_API_KEY"{
"credit_price_usd_per_1000": 3,
"max_count": 1000000,
"services": [
{
"service": "people",
"endpoint": "/apollo-people-scraper",
"credits_per_1000": 1000,
"min_count": 1000,
"add_ons": [
{
"key": "verify_emails",
"credits_per_1000": 300
}
]
},
{
"service": "company",
"endpoint": "/apollo-company-scraper",
"credits_per_1000": 834,
"min_count": 1000,
"add_ons": []
},
{
"service": "mobile",
"endpoint": "/apollo-mobile-scraper",
"credits_per_1000": 20000,
"min_count": 100,
"add_ons": []
},
{
"service": "email_finder",
"endpoint": "/email-finder",
"credits_per_1000": 5000,
"min_count": 100,
"max_count": 100000,
"charged_for": "found",
"enabled": true,
"add_ons": []
},
{
"service": "phone_finder",
"endpoint": "/phone-finder",
"credits_per_1000": 20000,
"min_count": 100,
"max_count": 100000,
"charged_for": "found",
"enabled": true,
"add_ons": []
},
{
"service": "email_verifier",
"endpoint": "/email-verifier",
"credits_per_1000": 500,
"min_count": 100,
"max_count": 500000,
"charged_for": "checked",
"enabled": true,
"add_ons": []
}
]
}Webhook events
Pass a public HTTPS callback_url when you create an order and we'll POST a JSON event to it whenever the order changes. Reply with any 2xx within 10 seconds.
Events
- order.processingevent
Our team started preparing your file.
- order.deliveredevent
The CSV is ready. download_url is included.
- order.cancelledevent
The order was cancelled and its credits refunded.
Headers
- X-ApolloScraper-Eventstring
The event name.
- X-ApolloScraper-Signaturestring
sha256= followed by the HMAC-SHA256 of the raw body, keyed with your callback_signing_secret.
Failed deliveries are retried up to 5 times with exponential backoff (30s, 2m, 8m, 32m).
{
"id": "whd_7c2e9a41f0b84d16a3c5",
"event": "order.delivered",
"created_at": "2026-09-10T13:45:01.000Z",
"data": {
"order_id": "ord_8f2c41d9a7b34e01",
"order_number": 1042,
"service": "people",
"status": "completed",
"delivered_count": 1970,
"credits": {
"deducted": 2600,
"refunded": 39,
"charged": 2561
},
"status_url": "https://api.apolloscrapers.com/api/v1/orders/ord_8f2c41d9a7b34e01",
"download_url": "https://api.apolloscrapers.com/api/orders/ord_8f2c41d9a7b34e01/download?file=0&t=8kq2XvR1mW",
"cancel_reason": null
}
}Verify signatures
Every webhook is signed so you can be sure it came from us. Compute the HMAC-SHA256 of the raw request body with the callback_signing_secret you received when creating the order, and compare it to X-ApolloScraper-Signature using a constant-time check.
import crypto from "node:crypto";
// Use the raw request body exactly as received (before JSON parsing).
export function isValidSignature(rawBody, signatureHeader, secret) {
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected);
const b = Buffer.from(signatureHeader ?? "");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}