LinkedIn people search
From the Leads API reference. Requests use the base URL https://app.warmerly.com/api/v1 and an API key, see Authentication.
GET /linkedin/search
GET /linkedin/search/parametersA different database to the company search above: this queries LinkedIn through your own connected LinkedIn account, so it needs a paid LinkedIn slot and a connected account (400 no_linkedin_account otherwise).
| Query param | Type | Description |
|---|---|---|
query | string | Required. Keywords. A missing query returns 400 bad_request. |
cursor | string | Next page, from the previous response's cursor. |
locationIds | comma-separated | Location facet values. |
industryIds | comma-separated | Industry facet values. |
companyIds | comma-separated | Current company facet values. |
networkDistance | comma-separated integers | 1st / 2nd / 3rd degree. |
profileLanguage | comma-separated strings | Profile language codes. |
Each page holds up to 15 people. What the facet filters take depends on how your LinkedIn account is connected. On an account connected through Unipile they are LinkedIn's own numeric IDs. On an account connected through LinkupAPI they are plain text names (for example London), only the first value of each of locationIds, industryIds and companyIds is used, and profileLanguage is not applied. GET /linkedin/search/parameters?type=LOCATION|INDUSTRY|COMPANY&keywords=… is the typeahead that returns { "items": [{ "id": "…", "title": "…" }] }. A missing or invalid type returns 400 bad_request (invalid_type); an empty keywords returns an empty items list. On a LinkupAPI account the single suggestion is the text you typed.
{
"items": [
{
"id": "ACoAAA…",
"public_identifier": "samexample",
"name": "Sam Example",
"headline": "Head of Growth at Example Ltd",
"location": "London, United Kingdom",
"company_name": "Example Ltd",
"profile_url": "https://www.linkedin.com/in/samexample",
"network_distance": "DISTANCE_2"
}
],
"cursor": "15"
}Fields a profile does not have (headline, location, company_name, email, phone and so on) are omitted rather than set to null. cursor is omitted on the last page.
One LinkedIn lookup is charged per search page, not per profile returned, paging with cursor issues a fresh upstream call, which is the unit of real cost. A search that fails or is rejected costs nothing: the allowance is debited only after results come back. Out of allowance returns 402 payment_required with used, limit, remaining, label and upgradeUrl in details; this check runs before the query check. If the search itself fails you get 400 bad_request (search_failed), and 400 no_linkedin_account also covers a session that has expired.
email and phone are present only when the profile lists them publicly and they are visible to your account, usually they are absent, which is what POST /campaigns/{id}/leads/find-emails and the Email Finder are for.