Batch Contact Enrich
Enrich contact information — business email, personal emails, and phone numbers — for up to
300 people in a single asynchronous job. Provide professional_network_profile_urls (the
only identifier type accepted) and a required fields list naming which contact kinds to
retrieve for each profile.
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
resolved contact information — business_email plus a nested personal_contact_info object —
in the same shape as the non-batch /person/contact/enrich response. Profiles for which no
requested contact kind could be found are still listed with empty values (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
A list of person profile URLs plus the required contact fields to retrieve, with optional webhook and chunking options.
Request body for a batch person contact enrichment job. professional_network_profile_urls
is the only identifier type accepted, and fields is required — it names which contact kinds
to retrieve for each profile.
Person profile URLs to enrich. Maximum 300 identifiers per job — larger submissions are rejected with 400. Also accepted as a single comma-separated string.
["https://www.linkedin.com/in/dvdhsu/"]
Required, non-empty list naming which contact kinds to retrieve for each profile (also
accepted as a single comma-separated string). An empty value returns 400; any value
outside the supported set returns 400 with the full list in metadata.available_fields.
personal_contact_info is shorthand for both personal_contact_info.personal_emails and
personal_contact_info.phone_numbers.
["business_email", "personal_contact_info"]
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; the person contact enrichment endpoint reports contact_enrich.
enrich, enrich_live, contact_enrich, 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"

