Skip to main content
A Person Discovery Watcher re-runs a Person Search on a schedule and delivers new matches to your channel.
POST https://api.crustdata.com/watch/person/search
Pricing: first run is a free baseline (up to 5 matches), then 0.5 credits per new person delivered.

Request body

FieldRequiredDescription
filtersYesA filter tree, identical to Person Search. { "op": "and"|"or", "conditions": [ { "field", "type", "value" } ] }.
config.triggerYes{ "type": "interval", "every_hours": N } — how often the watch runs (e.g. 1, 6, 24, 168).
config.max_results_per_runNoMax records delivered per run. Default 25. The first (baseline) run is always capped at 5.
config.expires_atNoISO date ("2027-01-01"). The watch auto-stops after this date.
notificationsYesOne or more delivery channels (see below).
The response returns the watch id:
{ "id": 46849 }
All examples require the headers authorization: Bearer YOUR_API_KEY, content-type: application/json, and x-api-version: 2025-11-01. For the full list of field values and operators, see the Person Search reference.

Recipes

Persona: title + location

Alert daily when new ML engineers in Paris appear:
curl --request POST \
  --url https://api.crustdata.com/watch/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.current.title", "type": "(.)", "value": "Machine Learning Engineer" },
        { "field": "professional_network.location.raw", "type": "(.)", "value": "Paris" }
      ]
    },
    "config": { "trigger": { "type": "interval", "every_hours": 24 }, "max_results_per_run": 25 },
    "notifications": [ { "type": "webhook", "url": "https://your-app.com/webhooks/crustdata" } ]
  }'

Persona at a company-size band

New VPs of Finance at 51–500-employee companies:
curl --request POST \
  --url https://api.crustdata.com/watch/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.current.title", "type": "in", "value": ["Chief Financial Officer", "VP Finance", "Vice President Finance"] },
        { "field": "experience.employment_details.current.company_headcount_latest", "type": "=>", "value": 51 },
        { "field": "experience.employment_details.current.company_headcount_latest", "type": "=<", "value": 500 }
      ]
    },
    "config": { "trigger": { "type": "interval", "every_hours": 24 } },
    "notifications": [ { "type": "webhook", "url": "https://your-app.com/webhooks/crustdata" } ]
  }'

Seniority + skills

New CXO-level people with machine-learning skills:
curl --request POST \
  --url https://api.crustdata.com/watch/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.current.seniority_level", "type": "=", "value": "CXO" },
        { "field": "skills.professional_network_skills", "type": "(.)", "value": "machine learning" }
      ]
    },
    "config": { "trigger": { "type": "interval", "every_hours": 24 } },
    "notifications": [ { "type": "slack", "webhook_url": "https://hooks.slack.com/services/T000/B000/XXXX" } ]
  }'

Movement signal: recently changed jobs

People who recently changed jobs (a new decision-maker signal — best for sales/GTM):
curl --request POST \
  --url https://api.crustdata.com/watch/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.current.title", "type": "(.)", "value": "VP of Sales" },
        { "field": "recently_changed_jobs", "type": "=", "value": true }
      ]
    },
    "config": { "trigger": { "type": "interval", "every_hours": 24 } },
    "notifications": [ { "type": "webhook", "url": "https://your-app.com/webhooks/crustdata" } ]
  }'

Education filter, excluding companies

Stanford alumni who are not currently at the big three:
curl --request POST \
  --url https://api.crustdata.com/watch/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": "education.schools.school", "type": "(.)", "value": "Stanford" },
        { "field": "experience.employment_details.current.company_name", "type": "not_in", "value": ["Google", "Meta", "Amazon"] }
      ]
    },
    "config": { "trigger": { "type": "interval", "every_hours": 168 } },
    "notifications": [ { "type": "email", "to": ["sourcing@yourcompany.com"] } ]
  }'

Delivery channels

Add one or more channels; matches fan out to all of them.
{ "type": "webhook", "url": "https://your-app.com/webhooks/crustdata", "headers": { "X-Watch-Name": "ml-engineers-paris" } }
{ "type": "slack", "webhook_url": "https://hooks.slack.com/services/T000/B000/XXXX" }
{ "type": "email", "to": ["sourcing@yourcompany.com", "recruiter@yourcompany.com"] }
[
  { "type": "webhook", "url": "https://your-app.com/webhooks/crustdata" },
  { "type": "slack", "webhook_url": "https://hooks.slack.com/services/T000/B000/XXXX" }
]
A Slack channel must be a genuine Slack incoming webhook (https://hooks.slack.com/services/…). Any other URL will fail delivery.

Manage a watch

curl --request GET \
  --url 'https://api.crustdata.com/watcher/watches/46849/runs?limit=20' \
  --header 'authorization: Bearer YOUR_API_KEY'
curl --request GET \
  --url https://api.crustdata.com/watcher/watches/46849/runs/54811/summary \
  --header 'authorization: Bearer YOUR_API_KEY'
curl --request DELETE \
  --url https://api.crustdata.com/watcher/watches/46849 \
  --header 'authorization: Bearer YOUR_API_KEY'

Pricing

Credits
First run (baseline, up to 5 matches)Free
Each new person delivered on later runs0.5
You’re charged only for records actually delivered — never for a run that finds nothing new.