Skip to main content
Batch search runs one query asynchronously and delivers the entire result set as a single file. Where Person Search returns one cursor page per call, a batch job walks every page for you. This page covers two batch endpoints:
  • Batch search — results served from the indexed database, with higher caps and faster turnaround.
  • Batch live search — results retrieved from the web in real time, fresher but with lower caps and slower.

Batch search runs one query asynchronously and delivers the entire result set as a single file. Where Person Search returns one cursor page per call, a batch job walks every page for you. For fresher results retrieved from the web in real time, see Batch live search below.
  • One query, whole result set. You submit a single query; the job paginates server-side until max_results is reached or the matches run out.
  • max_results is the only volume control. It clamps to 10,000 and defaults to that cap when omitted. Values above the cap are silently clamped; zero or negative values return 400. The non-batch paging knobs — limit, page, preview — are silently ignored.
  • Flat records. Each line in the results file has exactly the non-batch search record shape. No envelope.
  • Exact field projection. When you pass fields, each record contains exactly those fields — nothing more. Omit fields to get every field your account can read.
POST /batch/person/search takes the same filter fields and operators as Person Search, with one extra rule: the top level of filters must be an {op, conditions} group — a bare {field, type, value} condition is rejected with 400.
Search jobs always report identifier_count: 1 — the one query. When the job completes, the downloaded file contains flat records with exactly the requested fields:
The results file (all records)

Nest groups for or-logic

Groups nest inside conditions. This finds engineers in either the United States or Canada:
Exact-match values must match the indexed value — both "United States" and "United States of America" exist as basic_profile.location.country values. Use an or group or Person Autocomplete to discover indexed values first.

Two warnings before you submit large jobs

Unknown filter field names are not rejected at submit time the way non-batch search rejects them — a typo in field simply produces a job that completes with 0 results. Double-check field names against the search reference first.
Do not pass a non-empty sorts array — the job will complete with 0 results. Sort the downloaded file instead, for example jq -s 'sort_by(.basic_profile.name) | .[]' results.jsonl.

Errors

400 — no filters
400 — bare condition instead of a group
400 — search URL on a database search

Batch live search is available to accounts with the live entitlement. The Batch search endpoint above is generally available.
Batch live search runs one query asynchronously and delivers the entire result set as a single file, with results retrieved from the web in real time. Where Person Live Search returns one cursor page per call, a batch job walks every page for you. For results served from the indexed database — higher caps and faster — see Batch search above.
  • One query, whole result set. You submit a single query; the job paginates server-side until max_results is reached or the matches run out.
  • max_results is the only volume control. It clamps to 1,000 and defaults to that cap when omitted. Values above the cap are silently clamped; zero or negative values return 400. The non-batch paging knobs — limit, page, preview — are silently ignored.
  • Flat records. Each line in the results file has exactly the non-batch search record shape. No envelope.
  • Exact field projection. When you pass fields, each record contains exactly those fields — nothing more. Omit fields to get every field your account can read.
POST /batch/person/professional_network/search/live retrieves results from the web in real time — fresher than the database, capped at 1,000 records per job, fetched internally in pages of 25, and slower. Live jobs are the most likely to end failed with an error_message. Live filters use a flat list of {field, type, value} objects — not the {op, conditions} group — and field takes an uppercase filter type instead of a dotted path:
The results file (all records)
Valid filter types: CURRENT_COMPANY, PAST_COMPANY, CURRENT_TITLE, PAST_TITLE, SCHOOL, COMPANY_HEADQUARTERS, COMPANY_HEADCOUNT, COMPANY_TYPE, FUNCTION, INDUSTRY, NUM_OF_FOLLOWERS, REGION, SENIORITY_LEVEL, YEARS_AT_CURRENT_COMPANY, YEARS_IN_CURRENT_POSITION, YEARS_OF_EXPERIENCE, FOLLOWER_OF, CONNECTION_OF, KEYWORD_COMPANY, KEYWORD_FIRST_NAME, KEYWORD_LAST_NAME, KEYWORD_SCHOOL, KEYWORD_TITLE, NETWORK_DEGREE, PROFILE_LANGUAGE, SERVICE_CATEGORY, CONTACT_INTEREST — the same filters as the non-batch Person Live Search, which documents per-filter value formats. An unknown filter type returns 400 listing the valid values. Instead of filters, you can replay a saved people search URL:
Request body
Provide either filters or professional_network_search_url — omitting both returns 400.

Errors

400 — neither filters nor a search URL
400 — group instead of a flat list


What to do next