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
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 30dPOST /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"}'| Field | Type | Example value |
|---|---|---|
| Request body | ||
| companyDomain | string | "posthog.com"Company domain without a path. |
| titleKeywords | string | "engineer" |
| country | string | |
| fuzzyTitle | boolean | |
| limit | integer | 1 |
| profileKeywords | string | |
| requireVerifiedEmail | boolean | |
| seniority | string | |
| Response | ||
| data | object | |
| data.hasMore | boolean | True when more profiles exist beyond this page. |
| data.profiles | object[] | Matching professional profiles. |
| data.profiles[].city | string | City of residence. |
| data.profiles[].continent | string | Continent of residence. |
| data.profiles[].country | string | Country of residence. |
| data.profiles[].currentEmployers | object[] | Positions the person currently holds. |
| data.profiles[].currentEmployers[].businessEmailVerified | boolean | True when a business email at this employer has been verified. |
| data.profiles[].currentEmployers[].companyDomain | string | Employer website domain. |
| data.profiles[].currentEmployers[].companyHeadcount | integer | Latest observed employee count at the employer. |
| data.profiles[].currentEmployers[].companyHeadcountRange | string | Employer headcount band, e.g. 51-200. |
| data.profiles[].currentEmployers[].companyHeadquartersCountry | string | Country of the employer's headquarters. |
| data.profiles[].currentEmployers[].companyHqLocation | string | Full headquarters location of the employer. |
| data.profiles[].currentEmployers[].companyHqLocationAddressComponents | string[] | The employer's headquarters location split into address components (city, county, state, country). Restates companyHqLocation in parts. |
| data.profiles[].currentEmployers[].companyId | string | Crustdata company identifier for this employer, accepted by the Company Enrichment endpoint. |
| data.profiles[].currentEmployers[].companyIndustries | string[] | All LinkedIn industries listed for the employer. |
| data.profiles[].currentEmployers[].companyIndustry | string | Primary LinkedIn industry of the employer. |
| data.profiles[].currentEmployers[].companyLinkedinId | string | LinkedIn's own numeric identifier for the employer company page. |
| data.profiles[].currentEmployers[].companyLinkedinUrl | string | Employer LinkedIn company page URL. |
| data.profiles[].currentEmployers[].companyName | string | Employer name. |
| data.profiles[].currentEmployers[].companyType | string | Employer company type, e.g. Privately Held or Public Company. |
| data.profiles[].currentEmployers[].companyWebsite | string | Employer website URL. |
| data.profiles[].currentEmployers[].employmentType | string | Employment type, e.g. Full-time or Contract. |
| data.profiles[].currentEmployers[].functionCategory | string | Job function category, e.g. Engineering or Sales. |
| data.profiles[].currentEmployers[].linkedinId | string | LinkedIn's own numeric identifier for the employer page. Crustdata returns the same value as companyLinkedinId on this record. |
| data.profiles[].currentEmployers[].location | string | Location of the role. |
| data.profiles[].currentEmployers[].positionId | string | Crustdata identifier for this specific position record. |
| data.profiles[].currentEmployers[].primaryEmployer | boolean | True when this is the profile's primary listed position. |
| data.profiles[].currentEmployers[].seniority | string | Seniority level of the role, e.g. Entry Level or Owner / Partner. |
| data.profiles[].currentEmployers[].startUtc | integer | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Start of the role. |
| data.profiles[].currentEmployers[].title | string | Job title held at this employer. |
| data.profiles[].currentEmployers[].yearsAtCompany | integer | Whole years spent at this employer. |
| data.profiles[].currentEmployers[].yearsAtCompanyRange | string | Human-readable tenure band, e.g. 3 to 5 years. |
| data.profiles[].educationBackground | any | Education history exactly as Crustdata returns it (school, degree, years, location). Untyped passthrough: the structure ships verbatim and is not validated. |
| data.profiles[].flagshipProfileUrl | string | LinkedIn 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[].headline | string | LinkedIn headline. |
| data.profiles[].image | string | Profile picture URL. |
| data.profiles[].linkedinUrl | string | LinkedIn profile URL. |
| data.profiles[].name | string | Full name of the person. |
| data.profiles[].pastEmployers | object[] | Positions the person previously held. |
| data.profiles[].pastEmployers[].businessEmailVerified | boolean | True when a business email at this employer has been verified. |
| data.profiles[].pastEmployers[].companyDomain | string | Employer website domain. |
| data.profiles[].pastEmployers[].companyHeadcount | integer | Latest observed employee count at the employer. |
| data.profiles[].pastEmployers[].companyHeadcountRange | string | Employer headcount band, e.g. 51-200. |
| data.profiles[].pastEmployers[].companyHeadquartersCountry | string | Country of the employer's headquarters. |
| data.profiles[].pastEmployers[].companyHqLocation | string | Full headquarters location of the employer. |
| data.profiles[].pastEmployers[].companyHqLocationAddressComponents | string[] | The employer's headquarters location split into address components (city, county, state, country). Restates companyHqLocation in parts. |
| data.profiles[].pastEmployers[].companyId | string | Crustdata company identifier for this employer, accepted by the Company Enrichment endpoint. |
| data.profiles[].pastEmployers[].companyIndustries | string[] | All LinkedIn industries listed for the employer. |
| data.profiles[].pastEmployers[].companyIndustry | string | Primary LinkedIn industry of the employer. |
| data.profiles[].pastEmployers[].companyLinkedinId | string | LinkedIn's own numeric identifier for the employer company page. |
| data.profiles[].pastEmployers[].companyLinkedinUrl | string | Employer LinkedIn company page URL. |
| data.profiles[].pastEmployers[].companyName | string | Employer name. |
| data.profiles[].pastEmployers[].companyType | string | Employer company type, e.g. Privately Held or Public Company. |
| data.profiles[].pastEmployers[].companyWebsite | string | Employer website URL. |
| data.profiles[].pastEmployers[].employmentType | string | Employment type, e.g. Full-time or Contract. |
| data.profiles[].pastEmployers[].endUtc | integer | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. End of the role. |
| data.profiles[].pastEmployers[].functionCategory | string | Job function category, e.g. Engineering or Sales. |
| data.profiles[].pastEmployers[].linkedinId | string | LinkedIn's own numeric identifier for the employer page. Crustdata returns the same value as companyLinkedinId on this record. |
| data.profiles[].pastEmployers[].location | string | Location of the role. |
| data.profiles[].pastEmployers[].positionId | string | Crustdata identifier for this specific position record. |
| data.profiles[].pastEmployers[].primaryEmployer | boolean | True when this is the profile's primary listed position. |
| data.profiles[].pastEmployers[].seniority | string | Seniority level of the role, e.g. Entry Level or Owner / Partner. |
| data.profiles[].pastEmployers[].startUtc | integer | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Start of the role. |
| data.profiles[].pastEmployers[].title | string | Job title held at this employer. |
| data.profiles[].pastEmployers[].yearsAtCompany | integer | Whole years spent at this employer. |
| data.profiles[].pastEmployers[].yearsAtCompanyRange | string | Human-readable tenure band, e.g. 3 to 5 years. |
| data.profiles[].personId | string | Crustdata identifier for this person. |
| data.profiles[].recordUpdatedUtc | integer | UTC 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[].region | string | Region string as published on the profile. |
| data.profiles[].state | string | State or province of residence. |
| data.profiles[].twitterHandle | string | X (Twitter) handle listed on the profile. |
| data.totalCount | integer | Total number of profiles matching the search. |
| found | boolean | False 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 results | USD | $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.