Use case
Discover professional or personal email addresses for leads for sales outreach, CRM enrichment, or lead qualification.Endpoint
API Reference
See the full request/response schema and parameters in the API Reference.
Pricing
See Credits & Pricing Guide for credit costs.Errors
For error responses (400, 403, 422, etc.), see Handling Errors.Email modes
Themode parameter controls which type of email the API returns. Defaults to Professional if omitted.
| Mode | Description | Returned in |
|---|---|---|
Professional (default) | Discovers company emails tied to the lead’s employer domain. | email field |
Personal | Discovers personal emails (e.g., Gmail, Yahoo). The email field still returns the company email when found. | personal_email field |
lead already includes an email field, the API returns it unchanged with appropriate status and type. In Personal mode, if the existing email is a personal email, the API returns immediately without additional processing or cost.
Response format
Theemail and personal_email fields contain a list of tuples. Each tuple consists of:
- Email address (string)
- Validation status (string, always uppercase):
OK— The email address has been validated and is likely deliverable.UNKNOWN— Validation was inconclusive — typically because the domain is a catch-all.NOT_FOUND— No email could be discovered for this lead.
- Email type (string, always uppercase):
COMPANY— Tied to the company domain.PERSONAL— A personal email address (e.g., Gmail, Yahoo).
Sync usage
Async pattern
For production workflows, use/find-email-async to submit a job and poll for results. This avoids long-lived HTTP connections and lets you parallelize many lookups without blocking your client.
The flow is:
- Submit —
POST /find-email-asyncwith the same body as the sync endpoint. Response includes atask_id. - Poll —
GET /job-status/{task_id}untilstatusiscompleted,failed, orcancelled. - Read result — When
completed, the discovered emails are in theresultfield, in the same shape as the sync response.
The async start endpoint returns uppercase
RUNNING. Subsequent /job-status/{task_id} calls return lowercase statuses. charge_amount is returned in cents, not credits.Polling example
Webhook callback
Pass awebhook_url to receive the result via HTTP POST instead of polling. The signed payload, retry behavior, and verification steps are documented in Outgoing Webhooks.
Bulk processing
Use/find-email-bulk (sync) or /find-email-bulk-async (async) to process up to 100 leads in a single call. Both accept a leads array and the same mode, verify_emails, providers, and webhook_url fields as the single-lead endpoints.
Bulk sync
Returns 200 OK with results once every lead is processed. Best for small batches where you want a single round-trip.Bulk async
Submit a batch, get back atask_id, then poll /job-status/{task_id} (or set webhook_url to receive a callback). Recommended for batches of more than a handful of leads, or when you don’t want to hold a long-lived HTTP connection.