Skip to main content
POST

ICP People Search

Cost: 10 credits per page. Search for people using Datamagnet’s ICP Search. Pass filter values as plain strings — the API handles all resolution internally.
Use GET /api/v1/people-search/filters to see all valid values for any filter. No credits consumed.

Request body

integer
default:1
Page number. Minimum value is 1.
string
Free-text query, matched across the whole profile (headline, summary, positions) rather than one attribute. Applied alongside the structured filters, so it narrows them rather than replacing them. Maximum 500 characters.Example: "Representative Director"
boolean
default:false
What to do when a filter value cannot be resolved (a title LinkedIn’s typeahead has no entry for, a company name that matches nothing). By default the search is refused with 422 and nothing is charged. With true, the search runs on everything that did resolve: only the refused values are dropped, never a whole field that resolved in part, and each dropped value is listed in filter_errors.A field whose values all fail is dropped entirely, so a company_name that matches nothing would search every company. Check filter_errors before trusting a partial result.
string | string[]
Job title(s) to filter by.Example: "CTO" or ["CTO", "Chief Technology Officer"]
string | string[]
Company name(s). Resolved via Sales Navigator suggest API.Example: "Stripe" or ["Stripe", "Plaid"]
string | string[] | object[]
LinkedIn company page URL(s). The API scrapes each URL to extract the company’s LinkedIn ID and name — no manual lookup needed. Supports include/exclude.
integer | integer[] | object[]
Raw LinkedIn company numeric ID(s). Builds the filter with the ID directly — no text resolution needed. Must be integers; strings will return a validation error. Supports include/exclude.
string | string[]
City, region, or country.Example: "San Francisco" or ["San Francisco", "New York"]
string | string[]
Seniority level(s). See Filter Reference for all valid values.Example: ["CXO", "Vice President"]
string | string[]
Company size range(s). Valid values: 1-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000, 10,001+.Example: ["501-1,000", "1,001-5,000"]
string | string[]
Industry name(s). Over 300 industries supported. See Filter Reference.Example: "Software Development"
string | string[]
Company type(s). Valid values: Public, Private, Non Profit, Educational, Government.Example: "Public"
string | string[]
Department/function. Valid values include: Engineering, Marketing, Sales, Finance, Operations, Product Management, and more.Example: "Engineering"
string | string[]
University or school name(s).Example: "MIT"
string | string[]
Technologies used by the person’s company.Example: "Salesforce"
string | string[]
Years in current role. Valid values: Less than 1 year, 1 to 2 years, 3 to 5 years, 6 to 10 years, More than 10 years.Example: "1 to 2 years"
string | boolean
People who recently started a new position — Sales Navigator’s Changed jobs spotlight. One value, so a boolean works: send true, or the string "Changed Jobs".false is the same as omitting the field — it does not ask for people who have not changed jobs. See Filter Reference.Example: true
string | boolean
People who have recently posted on LinkedIn — Sales Navigator’s Posted on LinkedIn spotlight. One value, so a boolean works: send true, or the string "Posted on LinkedIn".false is the same as omitting the field — it does not ask for people who have not posted. See Filter Reference.Example: true
string | string[]
LinkedIn follower count range. Valid values: 1-50, 51-100, 101-1000, 1001-5000, 5001+.Example: "1001-5000"
string | string[]
Language the profile is written in. Valid values include English, Spanish, French, German, and more.Example: "English"

Company filter options

Three ways to filter by company — use whichever fits your data:
All three fields can be combined in the same request.

Include / exclude

Every filter supports negative matching. Wrap a value in an object with "exclude": true to exclude it:

Refused values

A value that cannot be resolved refuses that value, not the search as a whole. Unless partial is true, the response is 422, costs nothing, and names every refused value, one entry each:
Titles resolve against LinkedIn’s own typeahead, so write them the way LinkedIn lists them: full words, in English, no abbreviations ("Customer Success Manager", not "CSM"). A phrase LinkedIn does not standardise belongs in keywords. An unknown field name is reported in filter_errors but does not refuse the search.

Response

Response fields

boolean
true on success.
array
List of matching people profiles.
object
integer
Number of filters applied to this search.
array
Every value that was dropped from this search, one entry each with field, value and error, plus any unknown field names. Only non-empty on a partial: true request or when an unknown field name was sent; otherwise a refused value is a 422 (see Refused values above).
integer
Credits actually charged for this request. A request that returns no results, or that fails before reaching the search, is charged 0.