Search leads by filters
Run a lead search with the full set of structured filters and stream enriched leads to your webhook.
Search, and streams enriched leads to your webhook_url.
Overview
Use this endpoint when you want to extract leads matching a precise persona definition (titles + seniority + function + tenure + company filters + signals). Pronto:- Validates and translates your filters into a search URL.
- Estimates the number of matching profiles.
- Enqueues the search and returns immediately with a
Searchrecord. - Streams leads to your webhook.
Requirements
- A valid Sales Navigator integration must be connected on the authenticated user — unless you pass
live: false, which serves the search from Pronto’s people database and needs no integration. webhook_urlis required.- At least one filter or
keywordmust be provided.
Live vs. database mode
By default (live: true) the search runs in real time through LinkedIn Sales Navigator. Set live: false to serve the count, preview, and streamed results entirely from Pronto’s people database (Elasticsearch) instead — no Sales Navigator integration required.
Relationship and signal filters only exist in LinkedIn’s graph, so they are rejected with 422 when live: false: connections_of_profile, relationship, follows_your_company, viewed_your_profile, with_shared_experiences, posted_on_linkedin, and past_colleague. Every other filter works in both modes.
The same live flag is accepted by the preview endpoint.
Rate Limits
- 1 request per second per user.
Request body
Top-level options
| Field | Type | Description |
|---|---|---|
webhook_url | string (HTTPS URL) | Required. Where Pronto sends the enriched leads. |
live | boolean | Data source. true (default) searches LinkedIn Sales Navigator; false searches Pronto’s people database with no integration required (see Live vs. database mode). |
name | string | Friendly name. Defaults to Lead search - API - <DD/MM/YYYY HH:MM>. |
keyword | string | Free-text keyword. Spell correction is automatically enabled when set. |
limit | integer | Cap on enriched leads. Effective value is min(limit, MAX_RESULTS_COUNT). |
streaming | boolean | If true, leads are pushed to the webhook as they are scraped. Default false. |
scale | boolean | If true, skips some data retrieval, for higher volume. Default false. |
custom | object | Arbitrary JSON stored on the search and echoed back in every webhook payload. |
Title filters
| Field | Type | Notes |
|---|---|---|
job_titles | array of strings | Current titles to include (CURRENT_TITLE INCLUDED). |
excluded_job_titles | array of strings | Current titles to exclude (CURRENT_TITLE EXCLUDED). |
past_titles | array of strings | Past titles to include (PAST_TITLE INCLUDED). |
excluded_past_titles | array of strings | Past titles to exclude (PAST_TITLE EXCLUDED). |
Location filters
| Field | Type |
|---|---|
included_locations | array of LinkedIn geoRegion IDs |
excluded_locations | array of LinkedIn geoRegion IDs |
Industry filters
| Field | Type |
|---|---|
included_industries | array of LinkedIn industry IDs |
excluded_industries | array of LinkedIn industry IDs |
4Automotive6Technology, Information and Internet12Education43Financial Services96Software Development
Company filters
| Field | Type | Notes |
|---|---|---|
included_companies | array of ids or { id } objects | Current company (CURRENT_COMPANY INCLUDED). id is the numeric LinkedIn organization id (the integer in urn:li:organization:<id>). |
excluded_companies | array of ids or { id } objects | Current company to exclude (CURRENT_COMPANY EXCLUDED). |
past_companies | array of ids or { id } objects | Past company (PAST_COMPANY INCLUDED). |
company_headquarters | array of geoRegion IDs | Filters by the lead’s company HQ region (COMPANY_HEADQUARTERS). |
id key (e.g. "1441", 1441, or { "id": "1441" }). Other shapes return 422.
Function & seniority
| Field | Maps to | Valid IDs |
|---|---|---|
functions | FUNCTION | 1 Accounting · 2 Administrative · 3 Arts and Design · 4 Business Development · 5 Community and Social Services · 6 Consulting · 7 Education · 8 Engineering · 9 Entrepreneurship · 10 Finance · 11 Healthcare Services · 12 Human Resources · 13 Information Technology · 14 Legal · 15 Marketing · 16 Media and Communication · 17 Military and Protective Services · 18 Operations · 19 Product Management · 20 Program and Project Management · 21 Purchasing · 22 Quality Assurance · 23 Real Estate · 24 Research · 25 Sales · 26 Customer Success and Support |
seniority_levels | SENIORITY_LEVEL | 100 In Training · 110 Entry Level · 120 Senior · 130 Strategic · 200 Entry Level Manager · 210 Experienced Manager · 220 Director · 300 Vice President · 310 CXO · 320 Owner / Partner |
Tenure filters
LinkedIn uses bucketed IDs"1"–"8" for these filters:
| Field | Maps to |
|---|---|
years_of_experience | YEARS_OF_EXPERIENCE |
years_at_current_company | YEARS_AT_CURRENT_COMPANY |
years_in_current_position | YEARS_IN_CURRENT_POSITION |
"1" Less than 1 year · "2" 1 to 2 years · "3" 3 to 5 years · "4" 6 to 10 years · "5" More than 10 years. Buckets "6"–"8" are reserved by LinkedIn.
Company size & type
| Field | Maps to | Valid values (same strings as account search) |
|---|---|---|
company_size | COMPANY_HEADCOUNT | 1-10 · 11-50 · 51-200 · 201-500 · 501-1000 · 1001-5000 · 5001-10000 · 10001+ (en-dashes in requests are normalized to hyphens on the server) |
company_type | COMPANY_TYPE | C Public Company · E Educational Institution · G Government Agency · N Non-Profit · P Privately Held · S Self-Employed · X Self-Owned |
Lists & relationship
| Field | Maps to | Value type |
|---|---|---|
included_account_lists | ACCOUNT_LIST (INCLUDED) | array of account list IDs |
excluded_account_lists | ACCOUNT_LIST (EXCLUDED) | array of account list IDs |
included_lead_lists | LEAD_LIST (INCLUDED) | array of lead list IDs |
excluded_lead_lists | LEAD_LIST (EXCLUDED) | array of lead list IDs |
relationship | RELATIONSHIP | array of IDs: F 1st degree · S 2nd degree · O 3rd degree and beyond · A Group members |
recently_changed_jobs | RECENTLY_CHANGED_JOBS | pass ["RPC"] to enable |
connections_of_profile | CONNECTION_OF (INCLUDED) | single LinkedIn profile URL — returns 1st-degree connections of that profile |
connections_of_profile accepts any recognized LinkedIn profile URL:
https://www.linkedin.com/in/<handle>https://www.linkedin.com/in/<internal-urn>https://www.linkedin.com/sales/lead/<id>
422 if the URL is malformed or can’t be resolved.
Boolean signal filters
These send a single fixed value when truthy. Passtrue to apply.
| Field | Maps to |
|---|---|
follows_your_company | FOLLOWS_YOUR_COMPANY (id CF) |
viewed_your_profile | VIEW_YOUR_PROFILE (id VYP) |
with_shared_experiences | WITH_SHARED_EXPERIENCES (id COMM) |
posted_on_linkedin | POSTED_ON_LINKEDIN (id RPOL) |
past_colleague | PAST_COLLEAGUE (id CL) |
Response
201 Created — returns immediately with the created Search:
webhook_url (one-shot at the end of the search, or per-batch when streaming: true).
Errors
| Status | When |
|---|---|
400 Bad Request | Missing webhook_url, invalid webhook URL format, or no filter/keyword provided. |
401 Unauthorized | Invalid API key, or credentials missing/expired. |
403 Forbidden | API key does not have access to this endpoint. |
422 Unprocessable Entity | Invalid filter shape, or enum ID outside the authorized list (e.g. unknown functions, seniority_levels, company_size, etc.). |
429 Too Many Requests | Per-user rate limit (1 req/s) or upstream LinkedIn rate limit. |
Examples
EU SaaS VPs of Sales
Engineering leaders at specific companies who recently changed jobs
Target an account list while excluding an existing lead list
Past colleagues who posted on LinkedIn recently
Keyword + tenure filter, scale mode
1st-degree connections of a target profile
Authorizations
Your API key
Body
Lead advanced search parameters
HTTPS URL that will receive the enriched leads. Required.
"https://hooks.example.com/leads"
Data source toggle. true (default) runs the search live through LinkedIn Sales Navigator and requires a connected Sales Navigator integration. false serves the count, preview, and streamed results from Pronto's people database (Elasticsearch) instead, with no integration required. Relationship/signal filters that only exist in LinkedIn's graph are not supported with live: false and return 422: connections_of_profile, relationship, follows_your_company, viewed_your_profile, with_shared_experiences, posted_on_linkedin, and past_colleague. A non-boolean value returns 422.
true
Friendly name for the search. Defaults to Lead search - API - <DD/MM/YYYY HH:MM> if omitted.
"EU SaaS VPs of Sales"
Free-text keyword applied to the LinkedIn keywords query parameter. Spell correction is automatically enabled when a keyword is provided.
"cybersecurity"
Cap on the number of leads to enrich. The effective limit is min(limit, MAX_RESULTS_COUNT). If omitted, the estimated search size is used.
x >= 1500
When true, leads are POSTed to webhook_url as they are scraped/enriched. When false, you receive them once the search completes.
true
When set to true, increases request volume by omitting the following fields: connections_count, headline, and vanity LinkedIn profile URL. You will still receive a LinkedIn profile URL, but it will use the user ID instead of the vanity URL (e.g., https://www.linkedin.com/in/mathieu-brun-picard/)
false
Arbitrary JSON stored on the search and echoed back in every webhook payload (useful for CRM correlation IDs, etc.).
{ "hubspot_id": "134567" }Current job titles to include (CURRENT_TITLE INCLUDED). Free text matched against the lead's current title.
["VP of Sales", "Chief Revenue Officer"]Current job titles to exclude (CURRENT_TITLE EXCLUDED).
["Intern", "Contractor"]Past job titles to include (PAST_TITLE INCLUDED).
["Account Executive"]Past job titles to exclude (PAST_TITLE EXCLUDED).
["SDR"]LinkedIn geoRegion IDs to include (REGION INCLUDED). Resolve names to IDs with the Location IDs endpoint.
["101452733", "105015875"]LinkedIn geoRegion IDs to exclude (REGION EXCLUDED).
["103644278"]LinkedIn industry IDs to include (INDUSTRY INCLUDED). See the LinkedIn Industry List for the full mapping. Examples: "6" Technology, Information and Internet · "96" Software Development · "43" Financial Services.
["6", "96"]LinkedIn industry IDs to exclude (INDUSTRY EXCLUDED).
["12"]Companies the lead currently works at (CURRENT_COMPANY INCLUDED). Each entry can be a plain LinkedIn organization id (string or integer) or an object with an id key.
Numeric LinkedIn organization id (the integer in urn:li:organization:<id>).
["1441", { "id": "162479" }]Companies to exclude as a current employer (CURRENT_COMPANY EXCLUDED). Same shape as included_companies.
["162479"]Companies the lead worked at in the past (PAST_COMPANY INCLUDED). Same shape as included_companies.
[{ "id": "1441" }]LinkedIn geoRegion IDs for the lead's company headquarters (COMPANY_HEADQUARTERS).
["103644278"]Account list IDs to include (ACCOUNT_LIST INCLUDED).
["12345678"]Account list IDs to exclude (ACCOUNT_LIST EXCLUDED).
["12345678"]Lead list IDs to include (LEAD_LIST INCLUDED).
["87654321"]Lead list IDs to exclude (LEAD_LIST EXCLUDED).
["87654321"]LinkedIn function (department) IDs (FUNCTION). Multiple IDs are combined with OR logic.
ID → value: 1 Accounting; 2 Administrative; 3 Arts and Design; 4 Business Development; 5 Community and Social Services; 6 Consulting; 7 Education; 8 Engineering; 9 Entrepreneurship; 10 Finance; 11 Healthcare Services; 12 Human Resources; 13 Information Technology; 14 Legal; 15 Marketing; 16 Media and Communication; 17 Military and Protective Services; 18 Operations; 19 Product Management; 20 Program and Project Management; 21 Purchasing; 22 Quality Assurance; 23 Real Estate; 24 Research; 25 Sales; 26 Customer Success and Support.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ["25"]LinkedIn seniority level IDs (SENIORITY_LEVEL).
ID → value: 100 In Training; 110 Entry Level; 120 Senior; 130 Strategic; 200 Entry Level Manager; 210 Experienced Manager; 220 Director; 300 Vice President; 310 CXO; 320 Owner / Partner.
100, 110, 120, 130, 200, 210, 220, 300, 310, 320 ["300", "310"]Bucketed total years of experience (YEARS_OF_EXPERIENCE). LinkedIn buckets: "1" Less than 1 year, "2" 1 to 2 years, "3" 3 to 5 years, "4" 6 to 10 years, "5" More than 10 years (additional buckets "6"–"8" are reserved by LinkedIn).
1, 2, 3, 4, 5, 6, 7, 8 ["3", "4"]Bucketed years at the current company (YEARS_AT_CURRENT_COMPANY). Same bucket scale as years_of_experience.
1, 2, 3, 4, 5, 6, 7, 8 ["2", "3"]Bucketed years in the current position (YEARS_IN_CURRENT_POSITION). Same bucket scale as years_of_experience.
1, 2, 3, 4, 5, 6, 7, 8 ["3"]Company size ranges to include.
1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ ["51-200", "201-500", "501-1000"]LinkedIn company type (COMPANY_TYPE).
ID → value: C Public Company; E Educational Institution; G Government Agency; N Non-Profit; P Privately Held; S Self-Employed; X Self-Owned.
C, E, G, N, P, S, X ["P", "C"]Connection relationship to the authenticated LinkedIn account (RELATIONSHIP).
ID → value: F 1st degree; S 2nd degree; O 3rd degree and beyond; A Group members.
F, S, O, A ["S"]Restrict to leads who recently changed jobs (RECENTLY_CHANGED_JOBS). Pass ["RPC"] to enable.
RPC ["RPC"]When true, only include leads who follow your company (FOLLOWS_YOUR_COMPANY, id CF).
false
When true, only include leads who viewed your profile (VIEW_YOUR_PROFILE, id VYP).
false
When true, only include leads sharing experiences with you (WITH_SHARED_EXPERIENCES, id COMM).
false
When true, only include leads who recently posted on LinkedIn (POSTED_ON_LINKEDIN, id RPOL).
true
When true, only include past colleagues (PAST_COLLEAGUE, id CL).
false
Response
Search created. Results will be delivered to webhook_url.