Batch Enrich People
Enrich up to 10,000 people in a single asynchronous job. Provide exactly one identifier
type — professional_network_profile_urls or business_emails — 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
person record in the same shape as the non-batch /person/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 person identifier type, plus optional field selection, webhook, and chunking options.
Request body for a batch person enrichment job. Provide exactly one identifier type —
professional_network_profile_urls or business_emails. Providing none, or more than one,
returns 400. Each identifier list may also be sent as a single comma-separated string.
Person profile URLs to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
["https://www.linkedin.com/in/dvdhsu/"]
Business email addresses to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.
["jane.doe@example.com"]
Optional list of dotted field paths to include in each person record (also accepted as a
single comma-separated string). When omitted, the default basic_profile and
social_handles field sets are 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
/person/enrich endpoint.
[
"basic_profile.name",
"basic_profile.headline"
]
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"

