POST

Person Enrichment Bettercontact API

/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.

Category enrichmentRequests / mo 3Routing 1 lane · no failover
Get ~100 free requests

Pricing

One price, in dollars

pay per request · no subscription · fallbacks added as the catalog grows
Request
Gateway request
discovered operation
↓
Router
↓
Providers · 1
↳ One lane serves this endpoint today, so a failed call has nowhere to fail over to. Failed attempts are never billed. Uptime, latency and traffic are measured through the gateway, last 30 days.

Call it

Make your first request

POST /v1/run/person_enrichment.bettercontact · same shape for every API
import 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())
Open in
Get a free key
Sample response
{
  "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
}
Response interface
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 30d
POST /v1/run/person_enrichment.bettercontact
curl -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"}'
FieldTypeExample value
Request body
firstNamestring"Patrick"Contact's first name.
lastNamestring"Collison"Contact's last name.
companystringEmployer name, for when you have no domain.
companyDomainstring"stripe.com"Employer domain, e.g. stripe.com. The strongest company signal for the waterfall.
customFieldsstringArbitrary identifiers echoed back on the result, for joining the answer to your own records.
linkedinUrlstring"https://www.linkedin.com/in/patrickcollison"Contact's LinkedIn profile URL, which raises the match rate.
Response
dataobjectThe matched contact, or null when the waterfall found none.
data.citystringCity.
data.companyobjectThe contact's employer.
data.company.aboutstringCompany about text.
data.company.addressCitystringAddress city.
data.company.addressCountrystringAddress country.
data.company.addressStatestringAddress state or region.
data.company.addressStreetstringStreet address.
data.company.addressZipcodestringAddress postal code.
data.company.companyIdstringBetterContact's own company identifier.
data.company.countryCodestringISO 3166-1 alpha-2 country code.
data.company.crunchbaseUrlstringCompany Crunchbase profile URL.
data.company.descriptionstringCompany description.
data.company.directionsUrlstringMap directions URL for the office.
data.company.domainstringCompany domain.
data.company.employeesintegerEmployees BetterContact counts.
data.company.employeesOnLinkedinintegerEmployees LinkedIn shows for the company.
data.company.followersintegerLinkedIn follower count.
data.company.foundedintegerYear the company was founded.
data.company.headquartersstringHeadquarters as one display string.
data.company.headquartersAddressstringHeadquarters street address.
data.company.headquartersCitystringHeadquarters city.
data.company.headquartersCountrystringHeadquarters country.
data.company.imagestringCompany logo URL.
data.company.industryCodestringIndustry classification code.
data.company.legalIdstringCompany registration number.
data.company.legalNamestringRegistered legal name.
data.company.linkedinIdstringCompany LinkedIn numeric id.
data.company.linkedinUrlstringCompany LinkedIn page URL.
data.company.namestringCompany name.
data.company.organizationTypestringOrganization type.
data.company.phonestringCompany switchboard number.
data.company.sizestringEmployee headcount band.
data.company.websitestringCompany website URL.
data.connectionsintegerLinkedIn connection count.
data.contactIdstringBetterContact's own contact identifier.
data.countrystringCountry.
data.countryCodestringISO 3166-1 alpha-2 country code.
data.currentCompanystringCurrent employer as BetterContact names it.
data.doNotContactbooleanTrue when the contact is on a do-not-contact list.
data.emailstringThe email address the waterfall settled on.
data.emailProviderstringMailbox provider behind the address, e.g. Google.
data.emailStatusstringDeliverability verdict for the address, e.g. valid, catch_all_safe, catch_all_not_safe, undeliverable, not_found.
data.enrichedbooleanTrue when the waterfall matched a contact. A false answer is a legitimate miss and is not billed.
data.firstNamestringFirst name.
data.followersintegerLinkedIn follower count.
data.fullNamestringContact's full name.
data.genderstringGender recorded for the contact.
data.imagestringContact's profile picture URL.
data.jobTitlestringCurrent job title.
data.lastNamestringLast name.
data.linkedinIdstringContact's LinkedIn numeric id.
data.linkedinUrlstringContact's LinkedIn profile URL.
data.locationstringLocation as one display string.
data.postalCodestringPostal code.
data.providerstringWhich data source in the waterfall produced the address.
foundbooleanFalse when the waterfall matched no contact.
Price
Price per requestUSD$0.0828
Price /1k reqUSD$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.

It costs from $82.80 per 1,000 requests, in US dollars with no subscription and no monthly minimum. You fund one USD wallet, each call draws it down, and a failed request costs $0.

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. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

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. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.

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.

Get ~100 free requests
Works with
Terminal agentsClaude CodeCursorCodexMCP clients