Pricing: the first run is a free baseline (a sample of up to 5
matches), then
2 credits per new company delivered.- 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 withand / or operator groups:
- Leaf condition —
{ "field": "...", "type": "...", "value": ... }, wherefieldis a company attribute (e.g.headcount.total),typeis the operator (e.g.=>,in,>), andvalueis what to match. - Operator group —
{ "op": "and" | "or", "conditions": [ ... ] }, whereconditionsis a list of leaf conditions or nested groups.andrequires every condition,orany 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 flatconditions list and the watch filters on the roles a company is hiring for, or the people it employs:
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 innotifications. Add one or more; matches fan out to all of them.
Where the records travel
By default a run’s companies arrive inside the notification, underresults. 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.
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.
Related
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.

