Reference material for Person Search : the full list of
filter operators, searchable fields with sortable flags, response fields,
request parameters, preview mode, and error responses.
For walk-through examples, see Person Search and
Examples .
Filter operator reference
Person Search accepts the following filters.type operators.
Operator Value shape Meaning Example use =scalar Exact match basic_profile.name = “David Hsu”!=scalar Not equal Exclude a specific country <scalar (number or date string) Less than Profiles updated before a timestamp =<scalar (number or date string) Less than or equal professional_network.connections at or below a threshold>scalar (number or date string) Greater than years_of_experience_raw above a threshold=>scalar (number or date string) Greater than or equal professional_network.followers at or above a thresholdinarray Value is in list experience.employment_details.company_name in [“Retool”, “OpenAI”]not_inarray Value is not in list Exclude titles like “Intern” (.)string Regex/contains match (case-insensitive) Title contains “VP|Director” (!)string Fuzzy negation — exclude substring matches Exclude titles containing “Intern” (see notes below) [.]string Substring match Title contains literal “SDR” geo_distanceobject Within radius of a location or explicit coordinate People within 50 km of San Francisco
Use => for greater-than-or-equal and =< for less-than-or-equal.
The operators >= and <= are not supported.
(!) — fuzzy negation
(!) excludes profiles whose value contains the given substring,
case-insensitive. It is the opposite of (.). Multi-word values are matched
as a literal phrase — they are not word-split:
{ "type": "(!)", "value": "New York" } excludes only profiles that
literally contain the phrase "New York". A profile whose location is
"New Yorker" is not excluded by this filter; "New York City" is
excluded because it contains the full phrase.
To exclude on each word independently, wrap multiple (!) conditions in an
and group:
{
" op " : " and " ,
" conditions " : [
{
" field " : " basic_profile.headline " ,
" type " : " (!) " ,
" value " : " Intern "
},
{
" field " : " basic_profile.headline " ,
" type " : " (!) " ,
" value " : " Student "
}
]
}
geo_distance — radius around a point
Supply the centre of the radius using one of:
location — a string that is geocoded server-side (e.g. "San Francisco, CA").
lat_lng — explicit coordinates as [lat, lng]. Skips geocoding.
If both are supplied, lat_lng wins. distance is required; unit defaults
to km.
Field Type Required Notes locationstring One of Geocoded server-side. Ignored when lat_lng is also set. lat_lngnumber[] One of Two-element [lat, lng]. Lat in [-90, 90], lng in [-180, 180]. distancenumber Yes Radius around the centre. Must be positive. unitstring No One of km, mi, miles, m, meters, ft, feet. Defaults to km.
See geo_distance examples
for end-to-end requests using both location and lat_lng.
Searchable fields
Some returned fields use a different filter path. For example, the returned basic_profile.current_title is searched with experience.employment_details.current.title.
Contact availability flags such as contact.has_business_email are response-only convenience fields. For search filters, use experience.employment_details.current.business_email_verified, experience.employment_details.past.business_email_verified, or experience.employment_details.business_email_verified.
social_handles.professional_network_identifier.profile_url is returned in search results but is rejected as a search filter. Use Person Enrich for direct profile URL lookups.
Some searchable fields, such as certifications.* and honors.title, may not appear in the response summary below.
Country filters do not all use the same value format. Use full country names
for person location fields, and use ISO 3166-1 alpha-3 codes for employer
headquarters country fields.
Field Value format Examples basic_profile.location.countryFull country name "United States", "India"basic_profile.location.stateFull state or region name "California", "Ontario"basic_profile.location.continentFull continent name "North America", "Asia"professional_network.location.rawRaw location string "San Francisco Bay Area"experience.employment_details.company_headquarters_countryISO 3166-1 alpha-3 country code "USA", "IND"experience.employment_details.current.company_headquarters_countryISO 3166-1 alpha-3 country code "USA", "GBR"experience.employment_details.past.company_headquarters_countryISO 3166-1 alpha-3 country code "IND", "USA"experience.employment_details.company_hq_locationEmployer HQ location string "San Francisco, California"
For headquarters country filters, use ISO-3 codes such as USA, IND, and
GBR. For the full code list, see the
ISO 3166-1 alpha-3 country code list .
For basic_profile.location.country, use Autocomplete
to discover indexed full-country labels before filtering.
Field Type Sortable Description crustdata_person_idinteger Yes Crustdata person ID metadata.updated_atdatetime Yes Last profile update timestamp metadata.last_scraped_sourcestring No Last profile refresh source
Basic profile
Field Type Sortable Description basic_profile.namestring Yes Full name basic_profile.first_namestring No First name basic_profile.last_namestring No Last name basic_profile.headlinestring No Profile headline basic_profile.summarystring No Profile summary / about basic_profile.languagesstring[] No Spoken languages basic_profile.last_updateddatetime No Last update timestamp on the basic profile basic_profile.locationstring Yes Location summary basic_profile.location.full_locationstring Yes Full location string basic_profile.location.citystring Yes City basic_profile.location.statestring Yes State / region as a full name basic_profile.location.countrystring Yes Country as a full name basic_profile.location.continentstring No Continent as a full name basic_profile.normalized_title.departmentstring No Job Title Normalization (beta) — high-level department.basic_profile.normalized_title.sub_departmentstring No Job Title Normalization (beta) — sub-department / category.basic_profile.normalized_title.matched_titlestring No Job Title Normalization (beta) — standardized canonical title.basic_profile.normalized_title.similarityfloat No Job Title Normalization (beta) — similarity score between raw and matched title.basic_profile.normalized_title.confidentboolean No Job Title Normalization (beta) — whether the mapping is high-confidence.basic_profile.professional_network_namestring No Display name on the professional-network profile
Professional network
Field Type Sortable Description professional_network.location.rawstring No Raw location string from profile professional_network.locationstring No Network location summary professional_network.location.citystring No Network location city professional_network.location.statestring No Network location state / region professional_network.location.countrystring No Network location country professional_network.location.continentstring No Network location continent professional_network.connectionsinteger Yes Connection count professional_network.followersinteger Yes Follower count (requires API key access) professional_network.open_to_cardsstring[] No Open-to signal codes. See Open-to signal values professional_network.metadata.last_scraped_sourcestring No Last profile refresh source
Skills
Field Type Sortable Description skills.professional_network_skillsstring[] No Listed skills
Experience — all employers
Field Type Sortable Description experience.employment_details.company_namestring No Company name across all roles experience.employment_details.titlestring No Job title across all roles experience.employment_details.descriptionstring No Role description across all roles experience.employment_details.seniority_levelstring No Seniority level across all roles experience.employment_details.function_categorystring No Function category across all roles experience.employment_details.start_datedate Yes Role start date across all roles experience.employment_details.end_datedate No Role end date across all roles experience.employment_details.locationstring No Role location across all roles experience.employment_details.company_idinteger Yes Company ID across all roles experience.employment_details.company_website_domainstring No Employer website domain experience.employment_details.company_headcount_latestinteger No Employer latest headcount experience.employment_details.company_headcount_rangestring No Employer headcount range experience.employment_details.company_industriesstring[] No Employer industries experience.employment_details.company_professional_network_industrystring No Employer primary industry label experience.employment_details.company_typestring No Employer company type experience.employment_details.company_headquarters_countrystring No Employer HQ country as ISO-3 code experience.employment_details.company_hq_locationstring No Employer HQ location string experience.employment_details.company_websitestring No Employer website across all roles experience.employment_details.employment_typestring No Employment type across all roles experience.employment_details.years_at_company_rawnumber No Years at company across all roles experience.employment_details.business_email_verifiedboolean No Verified business email across all roles
Experience — current employer
Field Type Sortable Description experience.employment_details.current.company_namestring No Current company name (filter alias of current.name) experience.employment_details.current.titlestring No Current job title experience.employment_details.current.seniority_levelstring No Current seniority level experience.employment_details.current.function_categorystring No Current function category experience.employment_details.current.start_datedate No Current role start date experience.employment_details.current.namestring No Current company name (returned response field) experience.employment_details.current.years_at_company_rawnumber No Years at current company experience.employment_details.current.company_headquarters_countrystring No Current employer HQ country as ISO-3 code experience.employment_details.current.company_idinteger No Current employer company ID experience.employment_details.current.position_idstring No Per-role identifier for the current position (one per role, distinct from company ID) experience.employment_details.current.company_industriesstring[] No Current employer industries experience.employment_details.current.company_typestring No Current employer company type experience.employment_details.current.company_headcount_latestinteger No Current employer latest headcount experience.employment_details.current.company_headcount_rangestring No Current employer headcount range experience.employment_details.current.company_hq_locationstring No Current employer HQ location string experience.employment_details.current.company_website_domainstring No Current employer website domain experience.employment_details.current.company_professional_network_industrystring No Current employer primary industry label experience.employment_details.current.company_professional_network_profile_urlstring No Current employer profile URL. Exact full URL — see Find people at a company experience.employment_details.current.company_linkedin_profile_urlstring No Current employer profile URL (accepted alias) experience.employment_details.current.employment_typestring No Current employment type experience.employment_details.current.business_email_verifiedboolean No Verified business email on current role
Experience — past employer
Field Type Sortable Description experience.employment_details.past.company_namestring No Past company name (filter alias of past.name) experience.employment_details.past.titlestring No Past job title experience.employment_details.past.seniority_levelstring No Past seniority level experience.employment_details.past.function_categorystring No Past function category experience.employment_details.past.start_datedate No Past role start date experience.employment_details.past.namestring No Past company name (returned response field) experience.employment_details.past.years_at_company_rawnumber No Years at past company experience.employment_details.past.company_headquarters_countrystring No Past employer HQ country as ISO-3 code experience.employment_details.past.company_idinteger No Past employer company ID experience.employment_details.past.position_idstring No Per-role identifier for the past position (one per role, distinct from company ID) experience.employment_details.past.company_industriesstring[] No Past employer industries experience.employment_details.past.company_typestring No Past employer company type experience.employment_details.past.company_headcount_latestinteger No Past employer latest headcount experience.employment_details.past.company_headcount_rangestring No Past employer headcount range experience.employment_details.past.company_hq_locationstring No Past employer HQ location string experience.employment_details.past.company_website_domainstring No Past employer website domain experience.employment_details.past.company_professional_network_industrystring No Past employer primary industry label experience.employment_details.past.company_professional_network_profile_urlstring No Past employer profile URL. Exact full URL — see Find people at a company experience.employment_details.past.company_linkedin_profile_urlstring No Past employer profile URL (accepted alias) experience.employment_details.past.employment_typestring No Past employment type experience.employment_details.past.business_email_verifiedboolean No Verified business email on past role
Education
Field Type Sortable Description education.schools.schoolstring No School name education.schools.degreestring No Degree education.schools.field_of_studystring No Field of study education.schools.locationstring No School location summary education.schools.location.citystring No School location city education.schools.location.statestring No School location state / region education.schools.location.countrystring No School location country education.schools.location.continentstring No School location continent education.schools.location.full_locationstring No School full location string
Certifications & honors
Field Type Sortable Description certifications.namestring No Certification name certifications.issuing_organizationstring No Certification issuer certifications.issue_datedate No Certification issue date certifications.expiration_datedate No Certification expiration date certifications.credential_idstring No Certification credential ID certifications.credential_urlstring No Certification credential URL honors.titlestring No Honor or award title
Social handles
Field Type Sortable Description social_handles.twitter_handlestring No Twitter/X handle
Other
Field Type Sortable Description recently_changed_jobsboolean No True if the profile recently changed jobs years_of_experience_rawnumber No Total years of experience (precise) years_of_experiencenumber No Total years of experience (rounded)
Open-to signal values
professional_network.open_to_cards is a closed enum of exactly three code strings. Filter with the in operator using one or more of these values:
Code Meaning CAREER_INTERESTProfile is open to new career opportunities HIRING_MANAGERProfile is actively hiring VOLUNTEERINGProfile is open to volunteer work
Only the three uppercase code strings above are indexed. Human-readable
strings like "open_to_work" or "Open to Work" return zero results .
Always use the codes as-is.
{
" filters " : {
" op " : " and " ,
" conditions " : [
{
" field " : " professional_network.open_to_cards " ,
" type " : " in " ,
" value " : [ " CAREER_INTEREST " ]
}
]
},
" limit " : 5
}
Response fields
Each profile in the response can include these sections, depending on fields. This table summarizes returned sections only. It is not a complete filter reference.
Section Key fields Description basic_profilename, headline, current_title, normalized_title, professional_network_name, location, summaryIdentity and location experienceemployment_details.current, employment_details.past (each role includes company_profile_picture_permalink)Full work history educationschools (each includes school, degree, location, description, institute_logo_permalink)Education background contacthas_business_email, has_personal_email, has_phone_numberContact availability flags social_handlesprofessional_network_identifier.profile_url, dev_platform_identifier.profile_url, twitter_identifier.slugAvailable profile handles professional_networkconnections, followers, profile_picture_permalinkNetwork metadata
skills.professional_network_skills is filterable but is not
returned by Person Search (lightweight discovery). To retrieve skills, use
Person Enrich .
dev_platform_profiles is likewise not returned by search.
Request parameter reference
Parameter Type Required Default Description filtersobject Yes — Filter condition or condition group. See operators above. fieldsstring[] No Default set Dot-path fields or section groups to return (e.g., ["basic_profile.name", "experience.employment_details.current.title"]). When omitted, the default profile sections are returned. skills and dev_platform_profiles are not returned by search. sortsarray No []Sort specifications as an array of { field, order } objects. Use asc or desc for order. Required for stable pagination. limitinteger No 20 Max profiles per page (1–1000). countinteger No — Alias for limit. cursorstring No nullPagination cursor from previous response’s next_cursor. post_processingobject No — exclude_profiles (URL array) and exclude_names (name array).previewboolean No falsePremium feature — see Preview mode . return_queryboolean No falseDebug flag accepted by the API. Current platform behavior: the response does not include a top-level query field.
Preview mode
Preview mode Preview search is a premium feature. Book a demo to enable it for your
account.
If preview access is enabled for your account, use preview: true to get lightweight results before running a full search. Preview responses keep the same top-level shape but may return fewer profile fields.
Current platform behavior: if preview is not enabled for your account,
the API returns 400 invalid_request with the message error: PersonDB preview feature is not available for your account.
curl --request POST \
--url https://api.crustdata.com/person/search \
--header ' authorization: Bearer YOUR_API_KEY ' \
--header ' content-type: application/json ' \
--header ' x-api-version: 2025-11-01 ' \
--data ' {
"filters": {
"field": "experience.employment_details.title",
"type": "(.)",
"value": "Founder"
},
"preview": true,
"limit": 2
} '
Errors
Status Meaning 400Invalid request — unsupported field, wrong operator, malformed filters, or preview not enabled for your account. 401Invalid or missing API key. 403Permission denied or insufficient credits. 500Internal server error. Retry with exponential backoff.
No results
When no people match the filters, the API returns 200 with an empty profiles array:
{
" profiles " : [],
" next_cursor " : null ,
" total_count " : 0
}
Action: Broaden filters or check field values with Autocomplete .
API reference summary
Detail Value Endpoint POST /person/searchAuth Bearer token + x-api-version: 2025-11-01 Response { "profiles": [...], "next_cursor": "...", "total_count": N }Pagination Cursor-based. Pass next_cursor as cursor. Stop when next_cursor is null. Errors 400, 401, 403, 500
Paginate through results
When your search matches more profiles than your limit, use cursor-based pagination to walk through all pages.
First page: send your normal search request.
curl --request POST \
--url https://api.crustdata.com/person/search \
--header ' authorization: Bearer YOUR_API_KEY ' \
--header ' content-type: application/json ' \
--header ' x-api-version: 2025-11-01 ' \
--data ' {
"filters": {
"field": "experience.employment_details.company_name",
"type": "in",
"value": ["Retool"]
},
"limit": 100
} '
Next page: take the next_cursor value from the response and pass it in your next request. Keep the same filters and limit.
curl --request POST \
--url https://api.crustdata.com/person/search \
--header ' authorization: Bearer YOUR_API_KEY ' \
--header ' content-type: application/json ' \
--header ' x-api-version: 2025-11-01 ' \
--data ' {
"filters": {
"field": "experience.employment_details.company_name",
"type": "in",
"value": ["Retool"]
},
"limit": 100,
"cursor": "PASTE_NEXT_CURSOR_VALUE_HERE"
} '
Continue until next_cursor is null, which means you have reached the last page.
Always include sorts when paginating to ensure stable ordering across
pages.
Sort results
Use the sorts parameter to order results by a specific field. This is important for stable pagination.
Sort by connections (descending)
curl --request POST \
--url https://api.crustdata.com/person/search \
--header ' authorization: Bearer YOUR_API_KEY ' \
--header ' content-type: application/json ' \
--header ' x-api-version: 2025-11-01 ' \
--data ' {
"filters": {
"field": "experience.employment_details.current.title",
"type": "=",
"value": "CEO"
},
"sorts": [{"field": "professional_network.connections", "order": "desc"}],
"limit": 5,
"fields": ["basic_profile.name", "professional_network.connections"]
} '
Valid sortable fields include: crustdata_person_id, basic_profile.name, professional_network.connections, professional_network.followers, experience.employment_details.start_date, experience.employment_details.company_id, metadata.updated_at.
For the full list of searchable (and sortable) fields, see
Search reference .
See the full API reference for the complete OpenAPI schema