Skip to main content
A Company Discovery Watcher turns a Company Search filter into a recurring feed. Each run re-evaluates your filters against Crustdata’s database and delivers only the new matches to a webhook or Slack — a continuous, deduplicated feed, with no manual re-running.
Pricing: the first run is a free baseline (a sample of up to 5 matches), then 2 credits per new company delivered.
Common uses:
  • Sales / GTM — new accounts entering your ICP (e.g. Brazilian fintechs that crossed 30% headcount growth).
  • Market intelligence — companies that newly match a segment, funding stage, or growth band.
  • Sourcing — a fresh pipeline of recently founded or fast-growing companies in your target market.
A Discovery Watcher tracks companies that newly match a filter. To watch a known list of companies for profile changes instead, use the Company Entity Watcher.

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)

The first run happens within seconds, delivering a free baseline sample of up to 5 matches so you can confirm the setup and payload shape. No credits charged.
3

Recurring runs

On the schedule you set (every_hours), the watcher re-runs your filters and delivers companies that are new or refreshed since the previous run, up to max_results_per_run. You’re charged per delivered company.
Each run delivers companies added or updated since the last run — a feed of movement within your filter set, not a one-time export. For the full current match set, use Company Search.

Request body

The response returns the watch id:
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 Company Search reference.

Company filter format

Watcher filters use the exact same syntax and fields as Company Search — no new filter language to learn. Each filter is a tree of leaf conditions combined with and / or operator groups:
  • Leaf condition{ "field": "...", "type": "...", "value": ... }, where field is a company attribute (e.g. headcount.total), type is the operator (e.g. =>, in, >), and value is what to match.
  • Operator group{ "op": "and" | "or", "conditions": [ ... ] }, where conditions is a list of leaf conditions or nested groups. and requires every condition, or any one; nest groups for compound logic.
Baseline limit: 500,000 companies. The baseline run only delivers 5, but it reads your entire match set to record what already exists. That read is capped at 500,000, and we check it when you create the watch, so a broader filter comes back 400 and you narrow it before anything runs. The cap applies to the baseline alone. Later runs deliver whatever newly matches, bounded by config.max_results_per_run.

Filters from other datasets

A company watch is not limited to company fields. Drop a job field or a person field into the same flat conditions list and the watch filters on the roles a company is hiring for, or the people it employs:
Companies running Snowflake that are hiring a data engineer. Technology stack is not carried on job records and open roles are not carried on company records, so neither half of that is reachable from a single-dataset watch. You still receive companies, and you’re still charged 2 credits per company. Reading the other dataset is free, and nothing from it appears in your payload: to see the posting or the person that put a company in the feed, call POST /job/search or POST /person/search yourself with the delivered crustdata_company_id. See Cross-dataset filters for the join rules, the lookup fields for that follow-up call, the limits, and why negation (!=, not_in, (!)) is rejected on a filter from another dataset.

Recipes

Segment + headcount growth

New Brazilian software companies (50–500 employees) that grew headcount 30%+:

Well-funded companies in a country

New US companies that have raised more than $10M:

Recently founded companies

New companies founded after 2020:

High-growth mid-market

Software companies growing fast in the 200–2,000 range:

Delivery channels

Every watch needs at least one channel in notifications. Add one or more; matches fan out to all of them.
A Slack channel must be a genuine Slack incoming webhook (https://hooks.slack.com/services/…). Any other URL will fail delivery.

Where the records travel

By default a run’s companies arrive inside the notification, under results. Set config.payload_delivery_type to "link" and the body carries no records at all. It carries metadata.payload_delivery.url instead, a pre-signed S3 URL for one NDJSON file holding every record of that run. Switch when a run can outgrow what your receiver accepts. An AWS Lambda proxy integration caps a request at 6 MB and an ALB target at 1 MB, and an oversize body is refused whole.
Every channel on the watch gets the same link, and the run-summary endpoint serves the same file. Read metadata.payload_delivery.type rather than testing for results: a link watch falls back to an inline body if the file cannot be written. See Payload delivery for the file format, the link lifetime, the run-summary shape, and the errors.

Manage a watch

Pricing

You’re charged only for companies actually delivered — never for a run that finds nothing new. See Pricing for full details.

Company entity watchers

Watch a known list of companies for profile changes.

Company Search

Pull the full current set of matches in one call.

Company Search reference

Every filter field, operator, and value.

Pricing

Credit costs across all Crustdata endpoints.