YOUR_API_KEY in each example with your actual API key. All
requests require the x-api-version: 2025-11-01 header.0.03 credits per result returned.Examples
Pagination & sorting
Reference
Your first search: find a person by name
The simplest search finds a person by their exact name. You pass a single filter with the= operator.
Understanding the response
Every search response has three fields:profiles— an array of matching people. Each profile contains identity fields, education, profile handles, and contact availability flags for the fields you requested.total_count— how many people match your filters across the full database. Here, 8 people named “Abhilash Chowdhary” exist.next_cursor— a pagination token. Pass it in the next request to get the next page of results.nullmeans there are no more pages.
Combine filters with and
Real searches need more than one criterion. Wrap multiple conditions inside an op: "and" group to require all of them.
This search finds Co-Founders located in San Francisco. The (.) operator does a fuzzy token match instead of an exact match. This makes it tolerant to typos.
filters object, you now have a group with op: "and" and a conditions array. Every condition must match for a profile to be included.
For more filter patterns (employer + title, geo radius, excludes), see the
example requests below. To walk through large result
sets, see Pagination and sorting.
Read normalized titles and education details
Each profile also returns a normalized title classification and structured education — including school location and a Crustdata-hosted institution logo. Request the sections you need withfields, and filter by crustdata_person_id to fetch a single person.
basic_profile.normalized_title and education.schools.location are
filterable but not sortable. professional_network.followers and
professional_network.connections are filterable and sortable, but they
are not returned in the search response — use them to narrow or rank
results, not to read counts. School description and
institute_logo_permalink are returned for display only.Example Requests
Common filter patterns for Person Search. Each is a full, tested request againstPOST /person/search that you can copy, paste, and adapt. Click any
row to expand it.
1. Basic filter examples
1. Basic filter examples
2. Filter with comparison operators
2. Filter with comparison operators
3. Filter with NOT operators
3. Filter with NOT operators
4. Complex nested filter example
4. Complex nested filter example
5. Filter by date ranges
5. Filter by date ranges
6. Filter by education and skills
6. Filter by education and skills
Semantic search (natural language)
Instead of hand-building filters, pass a natural-languagesearch.query to rank
people by overall profile meaning. search.mode controls how matching works —
including a keyword (lexical) mode and a semantic mode:
fit tier (strong, possible, or weak).
Responses use the standard Person Search shape plus fit and
total_count_relation:
sorts — results are already
rank-ordered by relevance. For recall modes (managed vs exact) and the
full behavior, see the
Person Semantic Search guide.Natural-language query (hybrid: keyword + semantic)
Natural-language query (hybrid: keyword + semantic)
hybrid blends keyword and
semantic matching for the best general-purpose recall.Keyword search (lexical mode)
Keyword search (lexical mode)
lexical when exact terms, acronyms, tools, or names should dominate —
keyword matching only, no vector similarity.Boolean keyword operators (query_syntax: boolean)
Boolean keyword operators (query_syntax: boolean)
search.query_syntax: "boolean" to turn the
query into a boolean expression: a space means AND, | means OR, +
requires a term, - excludes a term, "…" matches an exact phrase, * matches
a prefix, and () groups operators. Honored only with search.mode: "lexical"
and the top-level recall mode: "exact".Concept search (semantic mode)
Concept search (semantic mode)
semantic to match the meaning of a query even when profiles use different
words — vector similarity only.Semantic ranking inside hard filters (mode: exact)
Semantic ranking inside hard filters (mode: exact)
filters as hard constraints, then rank inside that set with
the query using the top-level mode: "exact".More recipes
Each recipe below is a full walkthrough with a tested request. Expand any one to see the pattern, the response, and how the operators work.Search by employer and title
Search by employer and title
How the operators work
There are two different operators at play here:inonexperience.employment_details.company_namechecks if the person has worked at any of the listed companies (current or past). Pass an array even for a single company. To search only current employers, useexperience.employment_details.current.company_nameinstead.(.)onexperience.employment_details.titledoes a regex match. The pipe|means “or”, soVP|Director|Head ofmatches any title containing “VP”, “Director”, or “Head of”. To search only current titles, useexperience.employment_details.current.titleinstead.
experience.employment_details.company_name field includes all employers (current and past). If you see someone whose current role is at a different company, it means they previously worked at your target company.Find people at a company by its profile URL
Find people at a company by its profile URL
Current, former, or either
- Current employees —
experience.employment_details.current.company_professional_network_profile_url - Former employees —
experience.employment_details.past.company_professional_network_profile_url - Anyone who has ever worked there — combine both with an
orgroup:
in operator with an array of profile URLs.experience.employment_details.company_professional_network_profile_url
path (all employers) is not filterable — use the current. or past.
variants above. The accepted alias ...company_linkedin_profile_url
resolves to the same data.Exclude specific titles
Exclude specific titles
not_in operator to exclude titles.This search finds people at OpenAI or Retool but excludes interns and students.not_in operator removes any profile where one of the listed values appears in their title history. This is useful for cleaning up results in recruiting or sales workflows.Search within a geographic radius
Search within a geographic radius
geo_distance filter finds people within a specific distance of a city. This is powerful for territory-based sales or local recruiting.This search finds CTOs within 10 miles of San Francisco.How geo_distance works
Thegeo_distance filter uses the professional_network.location.raw field.
The value is an object whose centre is given as either a location
string (geocoded server-side) or an explicit lat_lng pair (which skips
geocoding). If both are supplied, lat_lng wins.Search by explicit coordinates
Uselat_lng when you already have coordinates (for example, from a map
picker) or you want to skip the geocoding step. The example below finds
people within 5 km of latitude 37.7749, longitude -122.4194 (downtown San
Francisco).Exclude a geographic radius
Exclude a geographic radius
geo_exclude filter is the inverse of geo_distance — it removes people
inside the radius and keeps everyone else. Use it to carve out a metro you
already cover, or to find candidates outside a relocation zone.This search finds engineers in the United States who are not within 50 km of
San Francisco.geo_exclude accepts the same value object as geo_distance (location or
lat_lng, a required distance, and an optional unit), so you can also
exclude a radius around explicit coordinates.Exclude profiles matching a substring
Exclude profiles matching a substring
(!) when you want to drop profiles whose value contains a particular
phrase — useful when not_in is too rigid (it requires exact values) and
you want a substring-style exclusion instead.This search finds VP-level people at Retool, then drops anyone whose
headline mentions “Investor” or “Advisor”.(!) matches a multi-word value as a literal phrase. (!) "New York"
excludes only profiles that literally contain "New York" — it does not
exclude "New Yorker". To exclude on each word independently, send a
separate (!) condition for each word inside an and group, as shown
above.Search by country
Search by country
basic_profile.location.country uses full country names, such as "United States" or "India".Search by employer headquarters country
Search by employer headquarters country
company_headquarters_country when you want to filter by where a person’s
current or past employer is headquartered.company_headquarters_country uses ISO-3 codes (USA, IND, GBR),
unlike basic_profile.location.country which uses full names. Use ISO
3166-1 alpha-3 codes for the current, past, and all-role headquarters
country fields. See the ISO 3166-1 alpha-3 country code
list for accepted codes.Exclude specific people from results
Exclude specific people from results
post_processing to remove known profiles from results. This is useful when re-running searches and you want to skip people you have already contacted.Build a profile card with company and school logos
Build a profile card with company and school logos
company_profile_picture_permalink) and schools (institute_logo_permalink), so you can render a profile card without resolving image URLs yourself. Request the experience and education sections for the person you want.Find everyone at a company by its website domain
Find everyone at a company by its website domain
company_website — the company_website_domain paths are
filter-side names and do not appear in search responses.in operator with an array of domains. For current employees use the current. field above; for former employees use experience.employment_details.past.company_website_domain; for anyone who has ever worked there, use the all-roles field experience.employment_details.company_website_domain.Find people who recently changed jobs at a company
Find people who recently changed jobs at a company
recently_changed_jobs flag with a current-employer filter to surface people who recently started at a target company — a strong signal for sales and recruiting outreach.recently_changed_jobs is a boolean — pair it with a current. employer or title filter to scope the signal to the population you care about. It is both filterable and sortable.Exclude anyone who ever held a senior title
Exclude anyone who ever held a senior title
not_in on the all-roles career-history paths (experience.employment_details.seniority_level and experience.employment_details.title). On these all-employers fields, not_in drops anyone who has ever held that seniority or title at any point in their career — not just in their current role.Exclude people who ever worked at a competitor
Exclude people who ever worked at a competitor
not_in on the all-roles experience.employment_details.company_name path to remove anyone who has ever worked at a named company — current or past. This is the cleanest way to screen out competitor alumni from a candidate or prospect list.company_name path covers current and past employers, so this excludes a profile if Google or Meta appears anywhere in their work history. For exact-company precision, prefer the company profile-URL paths (...company_professional_network_profile_url) over names.VC sourcing: founders from top schools at new companies
VC sourcing: founders from top schools at new companies
basic_profile.location.country uses full country names; current.start_date accepts ISO date strings with the => (greater-than-or-equal) operator.Cross-border talent: from one country's companies to another's
Cross-border talent: from one country's companies to another's
IND, USA).Filter by continent
Filter by continent
basic_profile.location.continent. It takes a full continent name such as "Europe", "Asia", or "North America".basic_profile.location.continent is filterable but not sortable.People who worked at two specific companies
People who worked at two specific companies
experience.employment_details.current.company_name and experience.employment_details.past.company_name.Find people with a verified business email
Find people with a verified business email
experience.employment_details.current.business_email_verified to keep only profiles where a business email on the current role has been verified — useful when you plan to enrich and reach out by email.business_email_verified is filterable on the current, past, and all-roles paths but is not returned in standard search results — retrieve the actual email with Contact Enrich.Sort a company's people by follower count
Sort a company's people by follower count
sorts array to order results. This finds everyone associated with Retool and ranks them by professional-network followers, highest first. Request the fields you want to read alongside the sort key.professional_network.followers is filterable and sortable, but it is not returned in results — the sort ranks profiles by follower count without exposing the count itself. Always include a sorts array when paginating so ordering stays stable across pages — see Pagination and sorting.Preview a search before running it in full
Preview a search before running it in full
total_count before committing to a full search. Set preview: true alongside your normal filters.400 invalid_request with the message PersonDB preview feature is not available for your account.profiles, next_cursor, and total_count — but each profile carries a reduced field set. See Preview mode in the search reference.What to do next
- Try more filter patterns — see the example requests above for employer + title, geo radius, and exclude patterns.
- Paginate and sort — see Pagination and sorting to walk through every matching profile in a stable order.
- Look up operators and fields — see Search reference for operators, searchable fields, response fields, request parameters, and errors.
- Enrich a profile — once you have a profile URL from search, use Person Enrich to get the full cached profile.
- Discover filter values — use Person Autocomplete to find exact indexed values for search filters before building a filter.
- Check the API reference — see the OpenAPI spec for the full schema.

