Batch Search Companies
Run one company database search query and receive up to 10,000 matching companies as a
single results file. Where the non-batch /company/search returns one cursor page per call,
the batch job walks every page for you and delivers the entire result set at once.
An account may have at most 5 active (pending or processing) batch jobs at a time;
submitting a sixth returns 429.
Provide one filters group ({op, conditions}) plus optional sorts and max_results. The
non-batch paging parameters (limit, page, preview) are ignored by batch jobs — result
volume is controlled by max_results alone. Records in the downloaded results file are flat,
identical to the non-batch /company/search record shape.
Authorizations
API key passed as a Bearer token in the Authorization header.
Headers
API version to use. Batch job submission requires 2025-11-01; requests without this header are rejected with 400.
2025-11-01 "2025-11-01"
Body
One search query (filters plus optional sorts), result-volume controls, and optional field selection.
Request body for a batch company database search job. Provide one filters group; the job
walks the paginated result set server-side until max_results is reached or the results are
exhausted. The non-batch paging parameters (limit, page, preview) are ignored.
Boolean group of database search conditions. Unlike the non-batch search endpoints, batch
search requires the top level of filters to be a group — sending a bare condition returns
400. Groups can be nested inside conditions for complex queries.
{
"op": "and",
"conditions": [
{
"field": "experience.employment_details.current.title",
"type": "(.)",
"value": "engineer"
}
]
}Optional sort directives applied to matched companies in order, identical to the non-batch /company/search sorts parameter.
[
{
"field": "headcount.total",
"order": "desc"
}
]Total number of records the job will produce. Clamped to the cap of 10,000 — asking
for more is silently reduced to the cap, not rejected. Defaults to the cap when omitted.
Zero or negative values return 400.
x >= 1500
Optional internal page-size hint controlling how many records are fetched per page while the job paginates. It does not limit how many records you get back — use max_results for that.
100
Optional list of dotted field paths to include in each record (also accepted as a single
comma-separated string). When omitted, all fields permitted for your account are returned.
Records in the results file contain exactly the requested fields. The selectable fields are
the same as the non-batch /company/search endpoint.
["basic_info.name", "headcount.total"]Optional URL that receives a POST notification when the job finishes, so you do not have to poll.
"https://example.com/webhooks/crustdata-batch"
Response
Batch job accepted for processing
Returned immediately when a batch job is accepted. No data is returned at submit time — poll status_url for progress and download links.
Unique ID of the batch job. Use it to poll GET /batch/{batch_id}.
"53ab686b-c054-496b-8baf-baff5ecc85cf"
Initial job status. Always pending at submit time.
pending "pending"
Entity type the job operates on.
company, person "company"
Internal action name for the job. Live endpoints report enrich_live / search_live.
enrich, enrich_live, search, search_live "enrich"
Number of identifiers submitted. Search jobs always report 1 (the query).
2
Number of entities the job was asked to produce. For enrich jobs this equals identifier_count; for search jobs it is 1 until results are known.
2
Relative URL to poll for the job status (GET /batch/{batch_id}).
"/batch/53ab686b-c054-496b-8baf-baff5ecc85cf"

