Batch Enrich Companies
Enrich up to 10,000 companies in a single asynchronous job instead of one request per
company. Provide exactly one identifier type — names, domains,
professional_network_profile_urls, or crustdata_company_ids — and optionally the fields
to include in each record.
An account may have at most 5 active (pending or processing) batch jobs at a time;
submitting a sixth returns 429.
The job responds immediately with a batch_id. Poll GET /batch/{batch_id} (or provide a
webhook_url) and download the gzipped JSONL results file when the job completes. Each record
is wrapped in an {original_identifier, internal_id, data} envelope, where data holds the
company record in the same shape as the non-batch /company/enrich response. Identifiers that
cannot be resolved are silently dropped from the results file (compare entities_requested
with entities_fulfilled).
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
Exactly one company identifier type, plus optional field selection, webhook, and chunking options.
Request body for a batch company enrichment job. Provide exactly one identifier type —
names, domains, professional_network_profile_urls, or crustdata_company_ids. Providing
none, or more than one, returns 400. Each identifier list may also be sent as a single
comma-separated string.
Company names to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
["Stripe", "OpenAI"]
Company website domains to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
["stripe.com", "openai.com"]
Company profile URLs to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
["https://www.linkedin.com/company/stripe"]
Crustdata company IDs to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
[631394, 631466]
Optional list of dotted field paths to include in each company record (also accepted as a
single comma-separated string). When omitted, the default basic_info field set is
returned; requested fields are returned in addition to the defaults. An unsupported value
returns 400 with the full list of selectable fields in metadata.available_fields. The
selectable fields are the same as the non-batch /company/enrich endpoint.
[
"basic_info.name",
"basic_info.primary_domain",
"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"
Optional internal processing chunk size (number of identifiers per processing unit). Values outside 10-1000 return 400.
10 <= x <= 1000100
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"

