People Search API

People Search Crustdata API

Find up to 100 professional profiles by company domain and title keywords.

POST/v1/run/people_search.crustdata
Requests
-
30d

Try it

Make your first request

Open in
Get a free key
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.
{
  "data": {
    "hasMore": true,
    "profiles": [
      {
        "city": "San Francisco",
        "continent": "example",
        "country": "US",
        "currentEmployers": [
          {
            "businessEmailVerified": true,
            "companyDomain": "example.com",
            "companyHeadcount": 12500,
            "companyHeadcountRange": "Acme Inc",
            "companyHeadquartersCountry": "Acme Inc",
            "companyHqLocation": "Acme Inc",
            "companyHqLocationAddressComponents": [
              null
            ],
            "companyId": "Acme Inc",
            "companyIndustries": [
              null
            ],
            "companyIndustry": "Acme Inc",
            "companyLinkedinId": "https://example.com/page",
            "companyLinkedinUrl": "https://example.com/page",
            "companyName": "Acme Inc",
            "companyType": "Acme Inc",
            "companyWebsite": "https://example.com/page",
            "employmentType": "general",
            "functionCategory": "general",
            "linkedinId": "https://example.com/page",
            "location": "example",
            "positionId": "a1b2c3d4",
            "primaryEmployer": true,
            "seniority": "example",
            "startUtc": 42,
            "title": "Example title",
            "yearsAtCompany": 2024,
            "yearsAtCompanyRange": "Acme Inc"
          }
        ],
        "educationBackground": null,
        "flagshipProfileUrl": "https://example.com/page",
        "headline": "Example title",
        "image": "https://example.com/image.jpg",
        "linkedinUrl": "https://example.com/page",
        "name": "Example title",
        "pastEmployers": [
          {
            "businessEmailVerified": true,
            "companyDomain": "example.com",
            "companyHeadcount": 12500,
            "companyHeadcountRange": "Acme Inc",
            "companyHeadquartersCountry": "Acme Inc",
            "companyHqLocation": "Acme Inc",
            "companyHqLocationAddressComponents": [
              null
            ],
            "companyId": "Acme Inc",
            "companyIndustries": [
              null
            ],
            "companyIndustry": "Acme Inc",
            "companyLinkedinId": "https://example.com/page",
            "companyLinkedinUrl": "https://example.com/page",
            "companyName": "Acme Inc",
            "companyType": "Acme Inc",
            "companyWebsite": "https://example.com/page",
            "employmentType": "general",
            "endUtc": 42,
            "functionCategory": "general",
            "linkedinId": "https://example.com/page",
            "location": "example",
            "positionId": "a1b2c3d4",
            "primaryEmployer": true,
            "seniority": "example",
            "startUtc": 42,
            "title": "Example title",
            "yearsAtCompany": 2024,
            "yearsAtCompanyRange": "Acme Inc"
          }
        ],
        "personId": "a1b2c3d4",
        "recordUpdatedUtc": 42,
        "region": "CA",
        "state": "CA",
        "twitterHandle": "alex_rivera"
      }
    ],
    "totalCount": 12500
  },
  "found": true,
  "reason": "not_found"
}
Response interface
interface PeopleSearchCrustdataResponse {
  data: {
    hasMore?: boolean;
    profiles: {
      city?: string;
      continent?: string;
      country?: string;
      currentEmployers?: {
        businessEmailVerified?: boolean;
        companyDomain?: string;
        companyHeadcount?: number;
        companyHeadcountRange?: string;
        companyHeadquartersCountry?: string;
        companyHqLocation?: string;
        companyHqLocationAddressComponents?: string[];
        companyId?: string;
        companyIndustries?: string[];
        companyIndustry?: string;
        companyLinkedinId?: string;
        companyLinkedinUrl?: string;
        companyName?: string;
        companyType?: string;
        companyWebsite?: string;
        employmentType?: string;
        functionCategory?: string;
        linkedinId?: string;
        location?: string;
        positionId?: string;
        primaryEmployer?: boolean;
        seniority?: string;
        startUtc?: number;
        title?: string;
        yearsAtCompany?: number;
        yearsAtCompanyRange?: string;
      }[];
      educationBackground?: any;
      flagshipProfileUrl?: string;
      headline?: string;
      image?: string;
      linkedinUrl?: string;
      name: string;
      pastEmployers?: {
        businessEmailVerified?: boolean;
        companyDomain?: string;
        companyHeadcount?: number;
        companyHeadcountRange?: string;
        companyHeadquartersCountry?: string;
        companyHqLocation?: string;
        companyHqLocationAddressComponents?: string[];
        companyId?: string;
        companyIndustries?: string[];
        companyIndustry?: string;
        companyLinkedinId?: string;
        companyLinkedinUrl?: string;
        companyName?: string;
        companyType?: string;
        companyWebsite?: string;
        employmentType?: string;
        endUtc?: number;
        functionCategory?: string;
        linkedinId?: string;
        location?: string;
        positionId?: string;
        primaryEmployer?: boolean;
        seniority?: string;
        startUtc?: number;
        title?: string;
        yearsAtCompany?: number;
        yearsAtCompanyRange?: string;
      }[];
      personId?: string;
      recordUpdatedUtc?: number;
      region?: string;
      state?: string;
      twitterHandle?: string;
    }[];
    totalCount?: number;
  } | null;
  found: boolean;
  reason?: "not_found";
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

Request, response, and price

Last verified 2026-09-24 · uptime and latency measured over 30d
POST /v1/run/people_search.crustdata
curl -X POST https://api.getanyapi.com/v1/run/people_search.crustdata \
  -H "Authorization: Bearer $ANYAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"companyDomain":"posthog.com","limit":1,"titleKeywords":"engineer"}'
FieldTypeExample value
Request body
companyDomainstring"posthog.com"Company domain without a path.
titleKeywordsstring"engineer"
countrystring
fuzzyTitleboolean
limitinteger1
profileKeywordsstring
requireVerifiedEmailboolean
senioritystring
Response
dataobject
data.hasMorebooleanTrue when more profiles exist beyond this page.
data.profilesobject[]Matching professional profiles.
data.profiles[].citystringCity of residence.
data.profiles[].continentstringContinent of residence.
data.profiles[].countrystringCountry of residence.
data.profiles[].currentEmployersobject[]Positions the person currently holds.
data.profiles[].currentEmployers[].businessEmailVerifiedbooleanTrue when a business email at this employer has been verified.
data.profiles[].currentEmployers[].companyDomainstringEmployer website domain.
data.profiles[].currentEmployers[].companyHeadcountintegerLatest observed employee count at the employer.
data.profiles[].currentEmployers[].companyHeadcountRangestringEmployer headcount band, e.g. 51-200.
data.profiles[].currentEmployers[].companyHeadquartersCountrystringCountry of the employer's headquarters.
data.profiles[].currentEmployers[].companyHqLocationstringFull headquarters location of the employer.
data.profiles[].currentEmployers[].companyHqLocationAddressComponentsstring[]The employer's headquarters location split into address components (city, county, state, country). Restates companyHqLocation in parts.
data.profiles[].currentEmployers[].companyIdstringCrustdata company identifier for this employer, accepted by the Company Enrichment endpoint.
data.profiles[].currentEmployers[].companyIndustriesstring[]All LinkedIn industries listed for the employer.
data.profiles[].currentEmployers[].companyIndustrystringPrimary LinkedIn industry of the employer.
data.profiles[].currentEmployers[].companyLinkedinIdstringLinkedIn's own numeric identifier for the employer company page.
data.profiles[].currentEmployers[].companyLinkedinUrlstringEmployer LinkedIn company page URL.
data.profiles[].currentEmployers[].companyNamestringEmployer name.
data.profiles[].currentEmployers[].companyTypestringEmployer company type, e.g. Privately Held or Public Company.
data.profiles[].currentEmployers[].companyWebsitestringEmployer website URL.
data.profiles[].currentEmployers[].employmentTypestringEmployment type, e.g. Full-time or Contract.
data.profiles[].currentEmployers[].functionCategorystringJob function category, e.g. Engineering or Sales.
data.profiles[].currentEmployers[].linkedinIdstringLinkedIn's own numeric identifier for the employer page. Crustdata returns the same value as companyLinkedinId on this record.
data.profiles[].currentEmployers[].locationstringLocation of the role.
data.profiles[].currentEmployers[].positionIdstringCrustdata identifier for this specific position record.
data.profiles[].currentEmployers[].primaryEmployerbooleanTrue when this is the profile's primary listed position.
data.profiles[].currentEmployers[].senioritystringSeniority level of the role, e.g. Entry Level or Owner / Partner.
data.profiles[].currentEmployers[].startUtcintegerUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Start of the role.
data.profiles[].currentEmployers[].titlestringJob title held at this employer.
data.profiles[].currentEmployers[].yearsAtCompanyintegerWhole years spent at this employer.
data.profiles[].currentEmployers[].yearsAtCompanyRangestringHuman-readable tenure band, e.g. 3 to 5 years.
data.profiles[].educationBackgroundanyEducation history exactly as Crustdata returns it (school, degree, years, location). Untyped passthrough: the structure ships verbatim and is not validated.
data.profiles[].flagshipProfileUrlstringLinkedIn flagship profile URL. Usually the same value as linkedinUrl; Crustdata returns both and they can differ when the profile has a vanity URL.
data.profiles[].headlinestringLinkedIn headline.
data.profiles[].imagestringProfile picture URL.
data.profiles[].linkedinUrlstringLinkedIn profile URL.
data.profiles[].namestringFull name of the person.
data.profiles[].pastEmployersobject[]Positions the person previously held.
data.profiles[].pastEmployers[].businessEmailVerifiedbooleanTrue when a business email at this employer has been verified.
data.profiles[].pastEmployers[].companyDomainstringEmployer website domain.
data.profiles[].pastEmployers[].companyHeadcountintegerLatest observed employee count at the employer.
data.profiles[].pastEmployers[].companyHeadcountRangestringEmployer headcount band, e.g. 51-200.
data.profiles[].pastEmployers[].companyHeadquartersCountrystringCountry of the employer's headquarters.
data.profiles[].pastEmployers[].companyHqLocationstringFull headquarters location of the employer.
data.profiles[].pastEmployers[].companyHqLocationAddressComponentsstring[]The employer's headquarters location split into address components (city, county, state, country). Restates companyHqLocation in parts.
data.profiles[].pastEmployers[].companyIdstringCrustdata company identifier for this employer, accepted by the Company Enrichment endpoint.
data.profiles[].pastEmployers[].companyIndustriesstring[]All LinkedIn industries listed for the employer.
data.profiles[].pastEmployers[].companyIndustrystringPrimary LinkedIn industry of the employer.
data.profiles[].pastEmployers[].companyLinkedinIdstringLinkedIn's own numeric identifier for the employer company page.
data.profiles[].pastEmployers[].companyLinkedinUrlstringEmployer LinkedIn company page URL.
data.profiles[].pastEmployers[].companyNamestringEmployer name.
data.profiles[].pastEmployers[].companyTypestringEmployer company type, e.g. Privately Held or Public Company.
data.profiles[].pastEmployers[].companyWebsitestringEmployer website URL.
data.profiles[].pastEmployers[].employmentTypestringEmployment type, e.g. Full-time or Contract.
data.profiles[].pastEmployers[].endUtcintegerUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. End of the role.
data.profiles[].pastEmployers[].functionCategorystringJob function category, e.g. Engineering or Sales.
data.profiles[].pastEmployers[].linkedinIdstringLinkedIn's own numeric identifier for the employer page. Crustdata returns the same value as companyLinkedinId on this record.
data.profiles[].pastEmployers[].locationstringLocation of the role.
data.profiles[].pastEmployers[].positionIdstringCrustdata identifier for this specific position record.
data.profiles[].pastEmployers[].primaryEmployerbooleanTrue when this is the profile's primary listed position.
data.profiles[].pastEmployers[].senioritystringSeniority level of the role, e.g. Entry Level or Owner / Partner.
data.profiles[].pastEmployers[].startUtcintegerUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Start of the role.
data.profiles[].pastEmployers[].titlestringJob title held at this employer.
data.profiles[].pastEmployers[].yearsAtCompanyintegerWhole years spent at this employer.
data.profiles[].pastEmployers[].yearsAtCompanyRangestringHuman-readable tenure band, e.g. 3 to 5 years.
data.profiles[].personIdstringCrustdata identifier for this person.
data.profiles[].recordUpdatedUtcintegerUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. When Crustdata last wrote the record. Differs from updatedUtc, which reports the profile's own last-updated stamp.
data.profiles[].regionstringRegion string as published on the profile.
data.profiles[].statestringState or province of residence.
data.profiles[].twitterHandlestringX (Twitter) handle listed on the profile.
data.totalCountintegerTotal number of profiles matching the search.
foundbooleanFalse when the search matched no professional profiles.
reason"not_found"Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.
Price
Price per request (ceiling)USD$0.1452
Price /1k resultsUSD$1.45

FAQ

About the People Search Crustdata API

The AnyAPI People Search Crustdata API returns People Search crustdata data as normalized JSON from one POST call to /v1/run/people_search.crustdata. Find up to 100 professional profiles by company domain and title keywords. AnyAPI returns one normalized schema whichever source serves it. It costs $1.45 per 1,000 results, and never more than $0.1452 for a single request, in US dollars with no subscription and no monthly minimum.

It costs $1.45 per 1,000 results, and never more than $0.1452 for a single request, 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.

Find up to 100 professional profiles by company domain and title keywords. 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.