Skip to main content
A Discovery Watcher is a saved Person or Company search that runs on a schedule. Each run re-evaluates your filters against Crustdata’s database and pushes any new matches to your delivery channel — a webhook, Slack, or email. Instead of re-running a search yourself, you get a continuous, deduplicated feed of new people or companies that match your criteria. Common uses:
  • Recruiting — a fresh feed of candidates matching a role (e.g. ML engineers in Paris who previously worked at a top AI lab).
  • Sales / GTM — new decision-makers entering your ICP.
  • Market intelligence — companies that newly match a segment (e.g. Brazilian fintechs that crossed 30% headcount growth).
There are two create endpoints, one per dataset: Watch for people:
POST https://api.crustdata.com/watch/person/search
Watch for companies:
POST https://api.crustdata.com/watch/company/search
Every request requires the x-api-version: 2025-11-01 header and a Bearer token. Replace YOUR_API_KEY in each example with your API key.
Pricing: the first run is a free baseline (a sample of up to 5 matches). After that you’re charged only for records delivered — 0.5 credits per new person or 2 credits per new company. See Person pricing and Company pricing.

How a watcher runs

1

Create the watch

POST your filters, a config (schedule + result cap), and one or more notifications channels. The response returns a watch id.
2

Baseline run (free)

Within seconds, the watcher does its first run and delivers a free baseline sample of up to 5 matches so you can confirm the setup and payload shape. No credits are charged.
3

Recurring runs

On the schedule you set (every_hours), the watcher re-runs your filters and delivers records that are new or refreshed since the previous run, up to max_results_per_run. You’re charged per delivered record.
Each run delivers matches whose profile was added or updated since the last run — so a watcher is a feed of movement within your filter set, not a one-time export. To pull the full current set of matches instead, use Person Search or Company Search.

Filters

Watcher filters use the exact same syntax and fields as the search APIs — the { "op": "and" | "or", "conditions": [...] } tree with field / type / value leaves. You don’t need to learn a new filter language:

Delivery channels

Every watch needs at least one channel in notifications. You can add several and matches fan out to all of them.
ChannelShape
Webhook{ "type": "webhook", "url": "https://…", "headers": { … } }
Slack{ "type": "slack", "webhook_url": "https://hooks.slack.com/services/…" }
Email{ "type": "email", "to": ["you@company.com"] }
A Slack channel must be a real Slack incoming webhook (https://hooks.slack.com/services/…). Pasting any other URL will fail delivery.

Quick start

Create a person watcher that alerts a webhook daily when new heads of data at mid-size US companies 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": "Head of Data" },
        { "field": "professional_network.location.raw", "type": "(.)", "value": "United States" }
      ]
    },
    "config": {
      "trigger": { "type": "interval", "every_hours": 24 },
      "max_results_per_run": 25
    },
    "notifications": [
      { "type": "webhook", "url": "https://your-app.com/webhooks/crustdata" }
    ]
  }'
{ "id": 46849 }

Person watchers

Watch for people — recipes, delivery options, and pricing.

Company watchers

Watch for companies — segment, growth, and funding recipes.

Entity watchers

Watch a known list for profile changes. Coming soon.