Endpoint essentials
- Your first search.
- The shape of the response.
- How to combine filters.
- Example requests and recipes that you can copy and change.
YOUR_API_KEY with your API key. Every request
must include the x-api-version: 2025-11-01 header.0.03 credits per
result. Each premium group that you filter on or receive adds a
per-result charge:- Experience, education, and skills:
0.1. - Certifications, honors, professional network signals, languages, and
summary:
0.2. - Dev platform profile filters:
0.8(profile) or2.5(repositories). - Research profiles (enabled on request):
0.4.
fields returns experience and education, so it costs
0.23 per result on the standard plan. For the full table, see
Premium fields in search. For
your own prices, open the Pricing tab in the
dashboard or call /account/endpoints.Examples
Pagination and sorting
Reference
Your first search: find a person by name
The simplest search finds a person by their exact name. Send one 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 that you requested.total_count: The number of people in the full database that match your filters. In this example, 8 people have the name “Abhilash Chowdhary”.next_cursor: A pagination token. To get the next page of results, send this token in the next request. Anullvalue means that there are no more pages.
Combine filters with and
Most searches need more than one condition. To require all of the conditions, put them in a group with op: "and".
This search finds co-founders in San Francisco. The (.) operator matches when every word in the value appears, in any order. It does not match the whole string exactly. On some fields (.) also matches close misspellings. When you need the exact words, use [.] or in instead. See Choose a text operator.
filters. This example sends a group with op: "and" and a conditions array. A profile is in the results only when every condition matches.
For more filter patterns, such as employer and title, geo radius, and
exclusions, see the example requests below. To get every
page of a large result set, see Pagination and sorting.
Read normalized titles and education details
Each profile also includes a normalized title classification and structured education data. The education data includes the school location and an institution logo that Crustdata hosts. Usefields to request the sections that you need. To get one person, filter by crustdata_person_id.
basic_profile.normalized_title and
education.schools.location, but you cannot sort on them.You can filter and sort on professional_network.followers and
professional_network.connections, but the search response does not
include them. Use them to narrow or rank the results, not to read the
counts.The response includes the school description and
institute_logo_permalink fields for display only.Example requests
These examples show common filter patterns for Person Search. Each example is a full, tested request toPOST /person/search. You can copy a request and
change it. Click a 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)
You can send a natural-language query insearch.query instead of building
filters by hand. The API ranks people by the meaning of their full profile.
search.mode sets how the matching works:
fit tier: strong, possible, or weak. Profiles after the
head have fit: null. The response uses the standard Person Search shape, plus
the fit and total_count_relation fields:
sorts, because the results are
already in relevance order. A query never removes a profile that your
filters selected. In the default mode: "managed", a query can add
profiles, so total_count can be much larger than the count for your
filters alone. For the recall modes (managed and exact) and the full
behavior, see the
Person Semantic Search guide.Natural-language query (hybrid: keyword + semantic)
Natural-language query (hybrid: keyword + semantic)
hybrid is the default mode. Describe the people that you want in plain
language. hybrid combines keyword and semantic matching, which gives the best
general-purpose recall.Keyword search (lexical mode)
Keyword search (lexical mode)
lexical when exact terms, acronyms, tools, or names are the most
important. This mode uses keyword matching only, with no vector similarity.Boolean keyword operators (query_syntax: boolean)
Boolean keyword operators (query_syntax: boolean)
search.query_syntax: "boolean". The API
then reads the query as a boolean expression:- A space means AND.
|means OR.+requires a term.-excludes a term."…"matches an exact phrase.*matches a prefix.()groups operators.
query_syntax only when you also send 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. This mode uses vector similarity only.Semantic ranking inside hard filters (mode: exact)
Semantic ranking inside hard filters (mode: exact)
mode: "exact", every result must match your filters.
The query then ranks the profiles inside that set.More recipes
Each recipe below is a full walkthrough with a tested request. Expand a recipe 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
This search uses two operators:inonexperience.employment_details.company_namechecks if the person worked at any of the listed companies, now or in the past. Send an array, even for one company. To search only current employers, useexperience.employment_details.current.company_name.(.)onexperience.employment_details.current.titlematches when every word in the value appears in the current title, in any order. Theorgroup holds one(.)condition for each title, so a profile matches when any one of them matches. To also match past titles, useexperience.employment_details.title.
experience.employment_details.company_name field includes all employers, current and past. A result can have a current role at a different company. That person worked at your target company in the past.Find people at a company by its profile URL
Find people at a company by its profile URL
https://www.linkedin.com/company/stripe. Search also accepts the URL with
a trailing slash (.../stripe/), with no scheme
(linkedin.com/company/stripe), or with no www.. Each form returns the
same profiles.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 ever worked there: combine both fields in an
orgroup.
in operator with an array of profile URLs.experience.employment_details.company_professional_network_profile_url
path (all employers). Use the current. or past. path above. The API
also accepts the alias ...company_linkedin_profile_url, which points to
the same data.400, because Crustdata stores no
employer under these URLs. For the URL shapes that search accepts, see
Employer profile URL values.Keep only employers resolved to a live company record
Keep only employers resolved to a live company record
company_status field. It shows the lifecycle
state of the employer in the Crustdata entity graph. It has three values:active: The employer is a live company record.deleted: Crustdata retired the company record.null: Crustdata never resolved the employer to a company record. The role has only the free-text company name.
company_status when a later step needs a real company behind the
role. For example, use it before you enrich the employer or send the person to
an account owner. This search finds directors at Stripe. It keeps only roles
whose employer is a live record.current. to past.. To match any role
that the person held, remove the prefix:
experience.employment_details.company_status.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 every profile where one of the listed values appears in the title history. Use it to clean 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. Use it for territory-based sales or local recruiting.This search finds people within 10 miles of San Francisco whose current title contains “CTO” or “Chief Technology Officer”.How geo_distance works
Thegeo_distance filter uses the professional_network.location.raw field.
The value is an object that sets the center point in one of two ways:- A
locationstring. The server geocodes it. - An explicit
lat_lngpair. This skips geocoding.
lat_lng.Search by explicit coordinates
Uselat_lng when you already have coordinates, for example from a map
picker. You can also use it 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 remove a metro area that
you already cover. You can also use it to find candidates outside a relocation
zone.This search finds engineers who are not within 50 km of San Francisco.geo_exclude takes 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.Search inside a polygon
Search inside a polygon
geo_polygon filter finds people located inside a polygon you describe
with coordinates. Reach for it when a circle is the wrong shape for the area
you care about, such as a sales territory or a commute zone traced on a map.This search finds engineers located inside a box over the San Francisco
peninsula.value is an object with a single points key: a list of [lat, lng]
pairs, at least 3 distinct points and at most 1,000. The polygon closes itself,
so you do not need to repeat the first point. Coordinates are used as given and
are not geocoded. See the
geo_polygon reference
for the value-object table and the 400 cases.Exclude profiles matching a substring
Exclude profiles matching a substring
(!) to remove profiles whose value contains a specific phrase. not_in
needs exact values. Use (!) when you need a substring exclusion instead.This search finds VP-level people at Retool. Then it removes anyone whose
headline contains “Investor” or “Advisor”.(!) matches a multi-word value as a literal phrase. (!) "New York"
excludes only profiles that contain the literal phrase "New York". It
does not exclude "New Yorker". To exclude each word on its own, send a
separate (!) condition for each word in an and group, as in the
example 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 to filter by the headquarters country of a
person’s current or past employer.company_headquarters_country accepts a full country name, such as
United States, or an ISO 3166-1 alpha-3 code, such as USA. Both forms
return the same people on the current, past, and all-roles headquarters
country fields. The response returns the full country name.
basic_profile.location.country accepts full names only.Exclude specific people from results
Exclude specific people from results
post_processing to remove known profiles from the results. For example, when you run a search again, use it to skip people that you 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 have institute_logo_permalink. You can show a profile card with these links, and you do not have to find the image URLs yourself. Request the experience and education sections for the person that 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 names only. They do not appear in search responses.in operator with an array of domains. Pick the field for the people that you want:- Current employees: the
current.field above. - Former employees:
experience.employment_details.past.company_website_domain. - Anyone who ever worked there: 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. This limits the job-change signal to one target company. It is a good start for sales and recruiting outreach.recently_changed_jobs is a boolean. Combine it with a current. employer or title filter to limit the signal to the people that you want. You can filter and sort on it, but the response does not include it.The flag marks a past role that ended within 90 days of the last index rebuild. It does not mark a new role that started. To find people who recently started a role, filter experience.employment_details.current.start_date on a date range.Exclude anyone who ever held a senior title
Exclude anyone who ever held a senior title
not_in on the all-roles paths: experience.employment_details.seniority_level and experience.employment_details.title. On these paths, not_in removes anyone who ever held that seniority or title, in any role. It does not check only the current role.Exclude people who ever worked at a competitor
Exclude people who ever worked at a competitor
not_in on the all-roles path experience.employment_details.company_name to remove anyone who ever worked at a named company, now or in the past. This is the most direct way to remove competitor alumni from a candidate or prospect list.company_name path covers current and past employers. So this search excludes a profile if Google or Meta appears anywhere in the work history. To match one exact company, use the company profile URL paths (...company_professional_network_profile_url), not names.VC sourcing: founders from top schools at new companies
VC sourcing: founders from top schools at new companies
- A founder or CEO title.
- A target school.
- A recent start date for the current role. This is a proxy for a recently founded company.
- A country.
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, or a full country name, such as India.Filter by continent
Filter by continent
basic_profile.location.continent. It takes a full continent name, such as "Europe", "Asia", or "North America".total_count was 1,055,157. To narrow a large result set, combine the continent filter with a title, employer, or country filter. You can filter on basic_profile.location.continent, but you cannot sort on it.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 that have a verified business email on the current role. Use it when you plan to enrich the profiles and contact people by email.business_email_verified on the current, past, and all-roles paths. The response also includes it in the current role, as in the example above. The response does not include the email address. To get the email address, use Contact Enrich.Sort a company's people by follower count
Sort a company's people by follower count
sorts array to sort the results. This search finds everyone who worked at Retool, now or in the past, and sorts them by professional network followers, highest first. In fields, request the fields that you want to read with the sort key.professional_network.followers, but the results do not include it. The sort orders profiles by follower count, but it does not show the count. When you paginate, always send a sorts array so that the order stays the same across pages. See Pagination and sorting.Find the most-cited researchers (research_profiles, enabled on request)
Find the most-cited researchers (research_profiles, enabled on request)
research_profiles.h_index.all to keep people whose matched
academic author profile has an h-index above 100, sort by lifetime citations,
and read the name and citation count back in fields. The group is enabled per
account. Without the grant, the request returns 403 with
Access denied to fields: research_profiles.research_profiles is an array because a person can hold more than one author
profile. A filter matches when any of them matches. Search returns a smaller
copy of each profile than enrich does. See
Research profiles for the
filterable and sortable paths, and
Person Enrich
for the full article and co-author lists.Preview a search before running it in full
Preview a search before running it in full
total_count before you run a full search. To use it, set preview: true with your normal filters.403 permission_error. For the full error, see
Preview mode in the search
reference.profiles, next_cursor, and total_count. But each profile has fewer fields. For details, see Preview mode in the search reference.What to do next
- To try more filter patterns, see the example requests above. They cover employer and title, geo radius, and exclusion patterns.
- To get every matching profile in a stable order, see Pagination and sorting.
- To look up operators, searchable fields, response fields, request parameters, and errors, see Search reference.
- To get the full cached profile for a profile URL from search, use Person Enrich.
- To find the exact indexed values for a filter before you build it, use Person Autocomplete.
- For the full schema, see the OpenAPI spec.

