Person Enrichment Bettercontact API
Run one contact through BetterContact's email waterfall from a name plus company domain or a LinkedIn URL, and get the winning address with its deliverability verdict, the provider that found it, and the employer record. Only a matched contact is billable.
- Category enrichmentRequests / mo 3Routing 1 lane · no failover
Pricing
One price, in dollars
pay per request · no subscription · fallbacks added as the catalog growsCall it
Make your first request
POST /v1/run/person_enrichment.bettercontact · same shape for every APIimport os, requests res = requests.post( "https://api.getanyapi.com/v1/run/person_enrichment.bettercontact", headers={"Authorization": f"Bearer {os.environ['ANYAPI_KEY']}"}, json={ "firstName": "", "lastName": "" }, ) print(res.json())
{
"data": {
"city": "San Francisco",
"company": {
"about": "A short example description of this item.",
"addressCity": "San Francisco",
"addressCountry": "US",
"addressState": "CA",
"addressStreet": "123 Main St",
"addressZipcode": "123 Main St",
"companyId": "Acme Inc",
"countryCode": "US",
"crunchbaseUrl": "https://example.com/page",
"description": "A short example description of this item.",
"directionsUrl": "https://example.com/page",
"domain": "example.com",
"employees": 42,
"employeesOnLinkedin": 42,
"followers": 12500,
"founded": 42,
"headquarters": "example",
"headquartersAddress": "123 Main St",
"headquartersCity": "San Francisco",
"headquartersCountry": "US",
"image": "https://example.com/image.jpg",
"industryCode": "general",
"legalId": "a1b2c3d4",
"legalName": "Example title",
"linkedinId": "https://example.com/page",
"linkedinUrl": "https://example.com/page",
"name": "Example title",
"organizationType": "Acme Inc",
"phone": "+1 555-0142",
"size": "example",
"website": "https://example.com/page"
},
"connections": 42,
"contactId": "a1b2c3d4",
"country": "US",
"countryCode": "US",
"currentCompany": "Acme Inc",
"doNotContact": true,
"email": "alex@example.com",
"emailProvider": "alex@example.com",
"emailStatus": "alex@example.com",
"enriched": true,
"firstName": "Alex",
"followers": 12500,
"fullName": "Alex Rivera",
"gender": "example",
"image": "https://example.com/image.jpg",
"jobTitle": "Example title",
"lastName": "Rivera",
"linkedinId": "https://example.com/page",
"linkedinUrl": "https://example.com/page",
"location": "example",
"postalCode": "94107",
"provider": "a1b2c3d4"
},
"found": true
}interface PersonEnrichmentBettercontactResponse {
data: {
city?: string;
company?: {
about?: string;
addressCity?: string;
addressCountry?: string;
addressState?: string;
addressStreet?: string;
addressZipcode?: string;
companyId?: string;
countryCode?: string;
crunchbaseUrl?: string;
description?: string;
directionsUrl?: string;
domain?: string;
employees?: number;
employeesOnLinkedin?: number;
followers?: number;
founded?: number;
headquarters?: string;
headquartersAddress?: string;
headquartersCity?: string;
headquartersCountry?: string;
image?: string;
industryCode?: string;
legalId?: string;
legalName?: string;
linkedinId?: string;
linkedinUrl?: string;
name?: string;
organizationType?: string;
phone?: string;
size?: string;
website?: string;
};
connections?: number;
contactId?: string;
country?: string;
countryCode?: string;
currentCompany?: string;
doNotContact?: boolean;
email?: string;
emailProvider?: string;
emailStatus?: string;
enriched: boolean;
firstName?: string;
followers?: number;
fullName?: string;
gender?: string;
image?: string;
jobTitle?: string;
lastName?: string;
linkedinId?: string;
linkedinUrl?: string;
location?: string;
postalCode?: string;
provider?: string;
} | null;
found: boolean;
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
Request, response, and price
Last verified 2026-09-03 · uptime and latency measured over 30dcurl -X POST https://api.getanyapi.com/v1/run/person_enrichment.bettercontact \
-H "Authorization: Bearer $ANYAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"companyDomain":"stripe.com","firstName":"Patrick","lastName":"Collison","linkedinUrl":"https://www.linkedin.com/in/patrickcollison"}'| Field | Type | Example value |
|---|---|---|
| Request body | ||
| firstName | string | "Patrick"Contact's first name. |
| lastName | string | "Collison"Contact's last name. |
| company | string | Employer name, for when you have no domain. |
| companyDomain | string | "stripe.com"Employer domain, e.g. stripe.com. The strongest company signal for the waterfall. |
| customFields | string | Arbitrary identifiers echoed back on the result, for joining the answer to your own records. |
| linkedinUrl | string | "https://www.linkedin.com/in/patrickcollison"Contact's LinkedIn profile URL, which raises the match rate. |
| Response | ||
| data | object | The matched contact, or null when the waterfall found none. |
| data.city | string | City. |
| data.company | object | The contact's employer. |
| data.company.about | string | Company about text. |
| data.company.addressCity | string | Address city. |
| data.company.addressCountry | string | Address country. |
| data.company.addressState | string | Address state or region. |
| data.company.addressStreet | string | Street address. |
| data.company.addressZipcode | string | Address postal code. |
| data.company.companyId | string | BetterContact's own company identifier. |
| data.company.countryCode | string | ISO 3166-1 alpha-2 country code. |
| data.company.crunchbaseUrl | string | Company Crunchbase profile URL. |
| data.company.description | string | Company description. |
| data.company.directionsUrl | string | Map directions URL for the office. |
| data.company.domain | string | Company domain. |
| data.company.employees | integer | Employees BetterContact counts. |
| data.company.employeesOnLinkedin | integer | Employees LinkedIn shows for the company. |
| data.company.followers | integer | LinkedIn follower count. |
| data.company.founded | integer | Year the company was founded. |
| data.company.headquarters | string | Headquarters as one display string. |
| data.company.headquartersAddress | string | Headquarters street address. |
| data.company.headquartersCity | string | Headquarters city. |
| data.company.headquartersCountry | string | Headquarters country. |
| data.company.image | string | Company logo URL. |
| data.company.industryCode | string | Industry classification code. |
| data.company.legalId | string | Company registration number. |
| data.company.legalName | string | Registered legal name. |
| data.company.linkedinId | string | Company LinkedIn numeric id. |
| data.company.linkedinUrl | string | Company LinkedIn page URL. |
| data.company.name | string | Company name. |
| data.company.organizationType | string | Organization type. |
| data.company.phone | string | Company switchboard number. |
| data.company.size | string | Employee headcount band. |
| data.company.website | string | Company website URL. |
| data.connections | integer | LinkedIn connection count. |
| data.contactId | string | BetterContact's own contact identifier. |
| data.country | string | Country. |
| data.countryCode | string | ISO 3166-1 alpha-2 country code. |
| data.currentCompany | string | Current employer as BetterContact names it. |
| data.doNotContact | boolean | True when the contact is on a do-not-contact list. |
| data.email | string | The email address the waterfall settled on. |
| data.emailProvider | string | Mailbox provider behind the address, e.g. Google. |
| data.emailStatus | string | Deliverability verdict for the address, e.g. valid, catch_all_safe, catch_all_not_safe, undeliverable, not_found. |
| data.enriched | boolean | True when the waterfall matched a contact. A false answer is a legitimate miss and is not billed. |
| data.firstName | string | First name. |
| data.followers | integer | LinkedIn follower count. |
| data.fullName | string | Contact's full name. |
| data.gender | string | Gender recorded for the contact. |
| data.image | string | Contact's profile picture URL. |
| data.jobTitle | string | Current job title. |
| data.lastName | string | Last name. |
| data.linkedinId | string | Contact's LinkedIn numeric id. |
| data.linkedinUrl | string | Contact's LinkedIn profile URL. |
| data.location | string | Location as one display string. |
| data.postalCode | string | Postal code. |
| data.provider | string | Which data source in the waterfall produced the address. |
| found | boolean | False when the waterfall matched no contact. |
| Price | ||
| Price per request | USD | $0.0828 |
| Price /1k req | USD | $82.80 |
FAQ
About the Person Enrichment Bettercontact API
The AnyAPI Person Enrichment Bettercontact API returns Person Enrichment bettercontact data as normalized JSON from one POST call to /v1/run/person_enrichment.bettercontact. Run one contact through BetterContact's email waterfall from a name plus company domain or a LinkedIn URL, and get the winning address with its deliverability verdict, the provider that found it, and the employer record. Only a matched contact is billable. AnyAPI returns one normalized schema whichever source serves it. It costs from $82.80 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Person Enrichment bettercontact calls through AnyAPI succeeded, with a median response time of 110.1 seconds across 3 measured calls.
Get started
Two ways to start on AnyAPI
Humans fund a USD wallet and pay per request. Agents point a coding agent at one URL and onboard themselves.