crustdata_person_id, basic profile, and profile URL. Submit a job, then poll
or receive a webhook when it finishes. You pay only for the emails that resolve
to a person.
Identify is enabled per account. If your plan does not include it, contact
your Crustdata account team.
Identify vs Enrich. Identify answers “who is this email?”. It returns
the matched person’s
crustdata_person_id, basic_profile (name, headline,
title), and social_handles (profile URL). If you also need contact data,
full employment history, or company IDs per role, use
Person Enrich
(which also supports reverse lookup by business email).How it works
Reverse identify is an asynchronous, two-call flow — you submit a job, then fetch the results once it finishes:1
Submit your emails
POST /batch/person/identify with your list of emails (or
professional_network_profile_urls). You get a batch_id back
immediately.2
Poll, or wait for a webhook
GET /batch/{batch_id} to check the job status — or pass a webhook_url
on submit and we call you when it finishes.3
Download the results
Once
status is completed, the status response includes a
download_url: a gzipped JSONL file with one record per input, valid for
5 days.Emails already known to Crustdata resolve in seconds. Emails that require
real-time retrieval take longer, which is why this endpoint is asynchronous.
Replace
YOUR_API_KEY in each example with your actual API key. All requests
require the x-api-version: 2025-11-01 header.Pricing: 1 credit per email that resolves to a person —
unmatched emails are free. See Pricing for details.
Limits: up to 300 identifiers per submission. Active jobs
are capped per account across the live endpoints (5 on default limits) - see
Rate limits.
1. Submit your emails
Send your emails inemails — business or personal addresses both work. The
response returns a batch_id immediately — the job runs asynchronously.
You can submit
professional_network_profile_urls instead of
emails to resolve profile URLs to their crustdata_person_id.
Submit exactly one identifier type per job. To be notified when the job
finishes instead of polling, include a webhook_url in the request body.2. Get the results
Poll thestatus_url (or GET /batch/{batch_id}). While the job runs, status
is pending or processing. When it is completed, the response includes a
download_url.
download_url points to gzipped JSONL (.jsonl.gz) with one record per
submitted identifier. The link is valid for 5 days. download_urls lists the
same data split into parts. Both links are pre-signed, and the example trims
their query string to ?....
Result format
Each line is one record for an input identifier:social_handles.professional_network_identifier.profile_url. Submit that URL
to Person Enrich for the full profile,
or to Batch Contact Enrich for emails and phone
numbers.
The same object holds urn_url, the permanent form of the profile URL. The
profile_url can change when the person edits it. The urn_url does not
change, so you can use it as a stable key for the person.
The example leaves some basic_profile fields out. A match returns the same
basic_profile fields that the
Person Enrich reference
lists.
An email with no match returns an empty matches array (and is not billed):
Invalid emails
An invalid email does not fail the job. Its row has an emptymatches array
and an error_message that gives the reason:
You do not pay for an invalid email, and the job’s
result_count leaves it
out. If every email in the request is invalid, the submit returns 400
instead. See Errors.
Personal emails resolve too
Reverse lookup is not limited to business addresses — a personal email (for example a Gmail address) resolves the same way when it can be matched to a person. Submit it inemails like any other address:
matches array and are not billed.
Request parameters
Submit exactly one identifier type per job:
emails, business_emails, or
professional_network_profile_urls. This endpoint does not accept fields.
Every match returns the same sections.Response fields
Job lifecycle
Errors
An invalid request body returns400 with error.type of invalid_request
and one of these messages:
400 - no identifier
403 with
error.type of permission_error.
API reference summary
For credit pricing, see Pricing. For throughput guidance, see
Rate limits.
What to do next
- Need contact data? Use Contact Enrich.
- Need full employment history? Use Person Enrich with the
profile_urlfrom the match. - Enrich contact info in bulk — Batch Contact Enrich returns emails and phone numbers for a list of profile URLs.
- Find people first — use Person Search to build the list to identify.

