Skip to main content
This page collects filter recipes for Person Search. Each example is a full working request you can copy, paste, and adapt. For the core walkthrough (first search, combining filters with and), see Person Search. For the operator list and the full field table, see Search reference.
Replace YOUR_API_KEY in each example with your actual API key. All requests require the x-api-version: 2025-11-01 header.

Search by employer and title

This is the most common pattern for sales and recruiting: find people with a specific title at a specific company. This search finds VPs, Directors, and Heads of department at Retool.
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": {
      "op": "and",
      "conditions": [
        {
          "field": "experience.employment_details.company_name",
          "type": "in",
          "value": ["Retool"]
        },
        {
          "field": "experience.employment_details.title",
          "type": "(.)",
          "value": "VP|Director|Head of"
        }
      ]
    },
    "limit": 1
  }'
Response trimmed for clarity.

How the operators work

There are two different operators at play here:
  • in on experience.employment_details.company_name checks 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, use experience.employment_details.current.company_name instead.
  • (.) on experience.employment_details.title does a regex match. The pipe | means “or”, so VP|Director|Head of matches any title containing “VP”, “Director”, or “Head of”. To search only current titles, use experience.employment_details.current.title instead.
The 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.

Exclude specific titles

Sometimes you want everyone at a company except certain roles. Use the not_in operator to exclude titles. This search finds people at OpenAI or Retool but excludes interns and students.
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": {
      "op": "and",
      "conditions": [
        {
          "field": "experience.employment_details.company_name",
          "type": "in",
          "value": ["OpenAI", "Retool"]
        },
        {
          "field": "experience.employment_details.title",
          "type": "not_in",
          "value": ["Intern", "Student"]
        }
      ]
    },
    "limit": 2
  }'
The 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

The 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.
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": {
      "op": "and",
      "conditions": [
        {
          "field": "professional_network.location.raw",
          "type": "geo_distance",
          "value": {
            "location": "San Francisco",
            "distance": 10,
            "unit": "mi"
          }
        },
        {
          "field": "experience.employment_details.current.title",
          "type": "(.)",
          "value": "CTO|Chief Technology"
        }
      ]
    },
    "limit": 1
  }'
Response trimmed for clarity.

How geo_distance works

The geo_distance filter uses the professional_network.location.raw field. The value is an object with three fields:
FieldRequiredDescription
locationYesCity name or region (e.g., “San Francisco”, “London”, “New York”)
distanceYesRadius from the center point
unitNoDistance unit: mi, km, m, ft. Defaults to km

Search by country

For broader geographic targeting, filter by country directly.
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": "basic_profile.location.country",
      "type": "=",
      "value": "United States"
    },
    "limit": 2
  }'
This returns all people located in the United States. With 125M+ matching profiles, you will want to combine this with title or employer filters to narrow results.

Exclude specific people from results

Use 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.
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"
    },
    "limit": 5,
    "post_processing": {
      "exclude_names": ["Ali Kashani"],
      "exclude_profiles": ["https://www.linkedin.com/in/alikashani"]
    }
  }'
You can exclude by name, by profile URL, or both.

Next steps