Skip to main content
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.
OperatorValue shapeMeaningExample use
=scalarExact matchbasic_profile.name = “David Hsu”
!=scalarNot equalExclude a specific country
<scalar (number or date string)Less thanProfiles updated before a timestamp
=<scalar (number or date string)Less than or equalprofessional_network.connections at or below a threshold
>scalar (number or date string)Greater thanyears_of_experience_raw above a threshold
=>scalar (number or date string)Greater than or equalprofessional_network.followers at or above a threshold
inarrayValue is in listexperience.employment_details.company_name in [“Retool”, “OpenAI”]
not_inarrayValue is not in listExclude titles like “Intern”
(.)stringRegex/contains match (case-insensitive)Title contains “VP|Director”
(!)stringFuzzy negation — exclude substring matchesExclude titles containing “Intern” (see notes below)
[.]stringSubstring matchTitle contains literal “SDR”
geo_distanceobjectWithin radius of a location or explicit coordinatePeople 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.
FieldTypeRequiredNotes
locationstringOne ofGeocoded server-side. Ignored when lat_lng is also set.
lat_lngnumber[]One ofTwo-element [lat, lng]. Lat in [-90, 90], lng in [-180, 180].
distancenumberYesRadius around the centre. Must be positive.
unitstringNoOne 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.

Country and region value formats

FieldValue formatExamples
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.

Identity & metadata

FieldTypeSortableDescription
crustdata_person_idintegerYesCrustdata person ID
metadata.updated_atdatetimeYesLast profile update timestamp
metadata.last_scraped_sourcestringNoLast profile refresh source

Basic profile

FieldTypeSortableDescription
basic_profile.namestringYesFull name
basic_profile.first_namestringNoFirst name
basic_profile.last_namestringNoLast name
basic_profile.headlinestringNoProfile headline
basic_profile.summarystringNoProfile summary / about
basic_profile.languagesstring[]NoSpoken languages
basic_profile.last_updateddatetimeNoLast update timestamp on the basic profile
basic_profile.locationstringYesLocation summary
basic_profile.location.full_locationstringYesFull location string
basic_profile.location.citystringYesCity
basic_profile.location.statestringYesState / region as a full name
basic_profile.location.countrystringYesCountry as a full name
basic_profile.location.continentstringNoContinent as a full name
basic_profile.normalized_title.departmentstringNoJob Title Normalization (beta) — high-level department.
basic_profile.normalized_title.sub_departmentstringNoJob Title Normalization (beta) — sub-department / category.
basic_profile.normalized_title.matched_titlestringNoJob Title Normalization (beta) — standardized canonical title.
basic_profile.normalized_title.similarityfloatNoJob Title Normalization (beta) — similarity score between raw and matched title.
basic_profile.normalized_title.confidentbooleanNoJob Title Normalization (beta) — whether the mapping is high-confidence.
basic_profile.professional_network_namestringNoDisplay name on the professional-network profile

Professional network

FieldTypeSortableDescription
professional_network.location.rawstringNoRaw location string from profile
professional_network.locationstringNoNetwork location summary
professional_network.location.citystringNoNetwork location city
professional_network.location.statestringNoNetwork location state / region
professional_network.location.countrystringNoNetwork location country
professional_network.location.continentstringNoNetwork location continent
professional_network.connectionsintegerYesConnection count
professional_network.followersintegerYesFollower count (requires API key access)
professional_network.open_to_cardsstring[]NoOpen-to signal codes. See Open-to signal values
professional_network.metadata.last_scraped_sourcestringNoLast profile refresh source

Skills

FieldTypeSortableDescription
skills.professional_network_skillsstring[]NoListed skills

Experience — all employers

FieldTypeSortableDescription
experience.employment_details.company_namestringNoCompany name across all roles
experience.employment_details.titlestringNoJob title across all roles
experience.employment_details.descriptionstringNoRole description across all roles
experience.employment_details.seniority_levelstringNoSeniority level across all roles
experience.employment_details.function_categorystringNoFunction category across all roles
experience.employment_details.start_datedateYesRole start date across all roles
experience.employment_details.end_datedateNoRole end date across all roles
experience.employment_details.locationstringNoRole location across all roles
experience.employment_details.company_idintegerYesCompany ID across all roles
experience.employment_details.company_website_domainstringNoEmployer website domain
experience.employment_details.company_headcount_latestintegerNoEmployer latest headcount
experience.employment_details.company_headcount_rangestringNoEmployer headcount range
experience.employment_details.company_industriesstring[]NoEmployer industries
experience.employment_details.company_professional_network_industrystringNoEmployer primary industry label
experience.employment_details.company_typestringNoEmployer company type
experience.employment_details.company_headquarters_countrystringNoEmployer HQ country as ISO-3 code
experience.employment_details.company_hq_locationstringNoEmployer HQ location string
experience.employment_details.company_websitestringNoEmployer website across all roles
experience.employment_details.employment_typestringNoEmployment type across all roles
experience.employment_details.years_at_company_rawnumberNoYears at company across all roles
experience.employment_details.business_email_verifiedbooleanNoVerified business email across all roles

Experience — current employer

FieldTypeSortableDescription
experience.employment_details.current.company_namestringNoCurrent company name (filter alias of current.name)
experience.employment_details.current.titlestringNoCurrent job title
experience.employment_details.current.seniority_levelstringNoCurrent seniority level
experience.employment_details.current.function_categorystringNoCurrent function category
experience.employment_details.current.start_datedateNoCurrent role start date
experience.employment_details.current.namestringNoCurrent company name (returned response field)
experience.employment_details.current.years_at_company_rawnumberNoYears at current company
experience.employment_details.current.company_headquarters_countrystringNoCurrent employer HQ country as ISO-3 code
experience.employment_details.current.company_idintegerNoCurrent employer company ID
experience.employment_details.current.position_idstringNoPer-role identifier for the current position (one per role, distinct from company ID)
experience.employment_details.current.company_industriesstring[]NoCurrent employer industries
experience.employment_details.current.company_typestringNoCurrent employer company type
experience.employment_details.current.company_headcount_latestintegerNoCurrent employer latest headcount
experience.employment_details.current.company_headcount_rangestringNoCurrent employer headcount range
experience.employment_details.current.company_hq_locationstringNoCurrent employer HQ location string
experience.employment_details.current.company_website_domainstringNoCurrent employer website domain
experience.employment_details.current.company_professional_network_industrystringNoCurrent employer primary industry label
experience.employment_details.current.company_professional_network_profile_urlstringNoCurrent employer profile URL. Exact full URL — see Find people at a company
experience.employment_details.current.company_linkedin_profile_urlstringNoCurrent employer profile URL (accepted alias)
experience.employment_details.current.employment_typestringNoCurrent employment type
experience.employment_details.current.business_email_verifiedbooleanNoVerified business email on current role

Experience — past employer

FieldTypeSortableDescription
experience.employment_details.past.company_namestringNoPast company name (filter alias of past.name)
experience.employment_details.past.titlestringNoPast job title
experience.employment_details.past.seniority_levelstringNoPast seniority level
experience.employment_details.past.function_categorystringNoPast function category
experience.employment_details.past.start_datedateNoPast role start date
experience.employment_details.past.namestringNoPast company name (returned response field)
experience.employment_details.past.years_at_company_rawnumberNoYears at past company
experience.employment_details.past.company_headquarters_countrystringNoPast employer HQ country as ISO-3 code
experience.employment_details.past.company_idintegerNoPast employer company ID
experience.employment_details.past.position_idstringNoPer-role identifier for the past position (one per role, distinct from company ID)
experience.employment_details.past.company_industriesstring[]NoPast employer industries
experience.employment_details.past.company_typestringNoPast employer company type
experience.employment_details.past.company_headcount_latestintegerNoPast employer latest headcount
experience.employment_details.past.company_headcount_rangestringNoPast employer headcount range
experience.employment_details.past.company_hq_locationstringNoPast employer HQ location string
experience.employment_details.past.company_website_domainstringNoPast employer website domain
experience.employment_details.past.company_professional_network_industrystringNoPast employer primary industry label
experience.employment_details.past.company_professional_network_profile_urlstringNoPast employer profile URL. Exact full URL — see Find people at a company
experience.employment_details.past.company_linkedin_profile_urlstringNoPast employer profile URL (accepted alias)
experience.employment_details.past.employment_typestringNoPast employment type
experience.employment_details.past.business_email_verifiedbooleanNoVerified business email on past role

Education

FieldTypeSortableDescription
education.schools.schoolstringNoSchool name
education.schools.degreestringNoDegree
education.schools.field_of_studystringNoField of study
education.schools.locationstringNoSchool location summary
education.schools.location.citystringNoSchool location city
education.schools.location.statestringNoSchool location state / region
education.schools.location.countrystringNoSchool location country
education.schools.location.continentstringNoSchool location continent
education.schools.location.full_locationstringNoSchool full location string

Certifications & honors

FieldTypeSortableDescription
certifications.namestringNoCertification name
certifications.issuing_organizationstringNoCertification issuer
certifications.issue_datedateNoCertification issue date
certifications.expiration_datedateNoCertification expiration date
certifications.credential_idstringNoCertification credential ID
certifications.credential_urlstringNoCertification credential URL
honors.titlestringNoHonor or award title

Social handles

FieldTypeSortableDescription
social_handles.twitter_handlestringNoTwitter/X handle

Other

FieldTypeSortableDescription
recently_changed_jobsbooleanNoTrue if the profile recently changed jobs
years_of_experience_rawnumberNoTotal years of experience (precise)
years_of_experiencenumberNoTotal 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:
CodeMeaning
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.
Filter example
{
    "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.
SectionKey fieldsDescription
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

ParameterTypeRequiredDefaultDescription
filtersobjectYesFilter condition or condition group. See operators above.
fieldsstring[]NoDefault setDot-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.
sortsarrayNo[]Sort specifications as an array of { field, order } objects. Use asc or desc for order. Required for stable pagination.
limitintegerNo20Max profiles per page (1–1000).
countintegerNoAlias for limit.
cursorstringNonullPagination cursor from previous response’s next_cursor.
post_processingobjectNoexclude_profiles (URL array) and exclude_names (name array).
previewbooleanNofalsePremium feature — see Preview mode.
return_querybooleanNofalseDebug 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

StatusMeaning
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

DetailValue
EndpointPOST /person/search
AuthBearer token + x-api-version: 2025-11-01
Response{ "profiles": [...], "next_cursor": "...", "total_count": N }
PaginationCursor-based. Pass next_cursor as cursor. Stop when next_cursor is null.
Errors400, 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.
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