Adamlead API
The verified contact and company directory over a simple JSON API. Search contacts (emails masked, free), reveal the full email and phone for one credit each, and enrich a domain with firmographics.
Base URL
https://adamlead.com/api/v1Authentication
Create a key in Settings → API (shown once, so store it somewhere safe). Pass it as a bearer token on every request:
curl "https://adamlead.com/api/v1/contacts?q=marketing" \
-H "Authorization: Bearer sk_live_your_key_here"Rate limits
Each key has a per-minute request budget. Every response includes X-RateLimit-Limit and X-RateLimit-Remaining headers; exceeding the budget returns 429 with a Retry-After.
GET /contacts
Search the contact directory. Searching is free, so emails come back masked (e.g. j***@acme.com); use each contact's id with POST /contacts/reveal to get the full address. Results are paginated 25 per page.
qKeyword across name, title, and company.titleMatch a job title (contains).seniorityComma-separated seniority levels.departmentComma-separated departments.industryComma-separated company industries.employeeRangeComma-separated company size bands.emailStatusverified, probable, or unverified (comma-separated).country / state / cityLocation filters.hasPhone1 to only return contacts with a phone.sort / dirsort = name | company; dir = asc | desc.p1-indexed page number.curl "https://adamlead.com/api/v1/contacts?department=Marketing&emailStatus=verified&p=1" \
-H "Authorization: Bearer sk_live_your_key_here"Response
{
"data": [
{
"id": "…",
"full_name": "Sarah Chen",
"title": "VP of Marketing",
"seniority": "VP",
"department": "Marketing",
"email_masked": "s***@northwind.io",
"has_email": true,
"email_status": "verified",
"email_confidence": 96,
"location": { "city": "Austin", "state": "TX", "country": "US" },
"company": {
"name": "Northwind",
"domain": "northwind.io",
"industry": "SaaS",
"employee_range": "51-200"
}
}
],
"pagination": { "page": 1, "page_size": 25, "total": 128, "total_pages": 6 }
}POST /contacts/reveal
The full email and phone for up to 25 contacts per request, one credit each, exactly like “Access email” in the app. A contact you've already revealed (in the app, an export, or the API) comes back free, and a contact with no email on file costs nothing. If your credits run out partway, the rest are listed in errors and nothing more is charged.
idsArray of 1 to 25 contact ids from GET /contacts.only_verifiedOptional, default false. When true, contacts whose email isn't verified are skipped instead of charged.curl -X POST "https://adamlead.com/api/v1/contacts/reveal" \
-H "Authorization: Bearer sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"ids": ["3f2c…", "9a71…"], "only_verified": true}'Response
{
"data": [
{
"id": "3f2c…",
"full_name": "Sarah Chen",
"title": "VP of Marketing",
"email": "sarah@northwind.io",
"phone": null,
"email_status": "verified",
"email_confidence": 96,
"charged": true,
"company": { "name": "Northwind", "domain": "northwind.io" }
}
],
"errors": [
{ "id": "9a71…", "code": "not_verified", "message": "Skipped: the email is probable, not verified. Nothing was charged." }
],
"credits": { "spent": 1, "remaining": 1999 }
}Each item in data has the same fields as GET /contacts, plus email, phone and charged (false when it was already yours). Error codes per contact: contact_not_found, no_email, not_verified, insufficient_credits. When no contact could be revealed for lack of credits, the response is 402.
GET /enrich
Resolve a company domain (or an email's domain) to its firmographics.
domainCompany domain, e.g. acme.com.emailAlternatively an email, its domain is used.curl "https://adamlead.com/api/v1/enrich?domain=northwind.io" \
-H "Authorization: Bearer sk_live_your_key_here"Errors
Errors return a JSON envelope with an HTTP status:
{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Try again shortly." } }401Missing, invalid, or revoked API key.402Out of credits (reveal), or the free trial has ended.404No record matched (e.g. unknown domain).429Rate limit exceeded. Retry after the delay.400Missing or malformed parameter.Ready to start? Create an API key →