Search LinkedIn people
Search for LinkedIn members/professionals with extensive filtering options. Ideal for recruiting, sales prospecting, and networking. Filter by name, job title, company, location, connection degree, and more. Supports Sales Navigator search URLs — pass a Sales Navigator search URL in the `url` field to use Sales Navigator Lead Search instead of regular LinkedIn search. ### Filtering by location Two steps: look the location up with `POST /search/geo`, then pass the returned `geoId` as `filters.locationId`. 1. `POST /search/geo` with `{ "keywords": "Ohio" }` returns `{ "geoId": "106981407", "name": "Ohio, United States" }`. 2. `POST /search/people` with that id: ```json { "accountId": "<your-account-id>", "keywords": "Mechanical", "count": 10, "filters": { "locationId": "106981407" } } ``` Notes: - Use `filters.locationId` (or its alias `filters.geoUrn`) — there is no `filters.location` key. Unknown filter keys are silently ignored and the search runs unfiltered (global results). - Pass the plain numeric `geoId`. The `urn:li:fsd_geo:<id>` form is also accepted and normalized. - Any geo level works: country, state, metro area, county, or city. A narrower id gives a narrower result set. - Location filtering composes with `title`, `industry`, `connectionDegree` and pagination (`start`). Recommended: For `connectionOf` or `followerOf` filters, prefer `search-people-v2` which natively supports these filters and returns more accurate results. Rate limit: 1,000 search calls per account per day (resets at midnight UTC), and 30 calls per minute. Pagination is billed per page walked, so a `count` of 25 spends about 3 calls. Separately, LinkedIn applies its own commercial use limit to people search: roughly 100 searches a month on a free account, ~300 on Premium Career, ~500 on Premium Business, and effectively unlimited with Sales Navigator. That ceiling belongs to LinkedIn, is computed from search and browsing history rather than published, resets on the 1st of the month, and is not enforced or reported by this API. Maximum 1000 results per search.
/search/peopleCode Examples
curl -X POST 'https://api.connectsafely.ai/linkedin/search/people' \ -H 'Authorization: Bearer <your_api_key>' \ -H 'Content-Type: application/json' \ -d '{"accountId":"acc_12345","keywords":"","count":25,"start":0,"url":"https://www.linkedin.com/sales/search/people?query=(filters:List(...))","filters":{"firstName":"example_value","lastName":"example_value","title":"Senior Developer","company":"Acme Inc","school":"example_value","locationId":"106981407","geoUrn":"106981407","industry":["Technology"],"connectionDegree":["example_value"],"currentCompanyIds":["Acme Inc"],"pastCompanyIds":["Acme Inc"],"schoolIds":["12345"],"profileLanguage":["example_value"],"serviceCategories":["example_value"],"openToVolunteer":false,"connectionOf":["example_value"],"followerOf":["example_value"]}}'Search for LinkedIn members/professionals with extensive filtering options. Ideal for recruiting, sales prospecting, and networking. Filter by name, job title, company, location, connection degree, and more.
Supports Sales Navigator search URLs — pass a Sales Navigator search URL in the url field to use Sales Navigator Lead Search instead of regular LinkedIn search.
Filtering by location
Two steps: look the location up with POST /search/geo, then pass the returned geoId as filters.locationId.
POST /search/geowith{ "keywords": "Ohio" }returns{ "geoId": "106981407", "name": "Ohio, United States" }.POST /search/peoplewith that id:
{
"accountId": "<your-account-id>",
"keywords": "Mechanical",
"count": 10,
"filters": { "locationId": "106981407" }
}Notes:
- Use
filters.locationId(or its aliasfilters.geoUrn) — there is nofilters.locationkey. Unknown filter keys are silently ignored and the search runs unfiltered (global results). - Pass the plain numeric
geoId. Theurn:li:fsd_geo:<id>form is also accepted and normalized. - Any geo level works: country, state, metro area, county, or city. A narrower id gives a narrower result set.
- Location filtering composes with
title,industry,connectionDegreeand pagination (start).
Recommended: For connectionOf or followerOf filters, prefer search-people-v2 which natively supports these filters and returns more accurate results.
Rate limit: 1,000 search calls per account per day (resets at midnight UTC), and 30 calls per minute. Pagination is billed per page walked, so a count of 25 spends about 3 calls.
Separately, LinkedIn applies its own commercial use limit to people search: roughly 100 searches a month on a free account, ~300 on Premium Career, ~500 on Premium Business, and effectively unlimited with Sales Navigator. That ceiling belongs to LinkedIn, is computed from search and browsing history rather than published, resets on the 1st of the month, and is not enforced or reported by this API. Maximum 1000 results per search.
Parameters
No parameters.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | No | LinkedIn account ID to use for the search. If not provided, uses the default account. |
keywords | string | No | Search keywords for name, title, company, or skills |
count | number | No | Number of results to return per page |
start | number | No | Pagination offset (0-indexed) |
url | string | No | Sales Navigator search URL. When provided, the search will use Sales Navigator Lead Search instead of regular LinkedIn search. The URL should contain /sales/search/ path (e.g., https://www.linkedin.com/sales/search/people?query=...). |
filters | object | No | Optional filters to narrow down search results |
Example
{
"accountId": "acc_12345",
"keywords": "",
"count": 25,
"start": 0,
"url": "https://www.linkedin.com/sales/search/people?query=(filters:List(...))",
"filters": {
"firstName": "example_value",
"lastName": "example_value",
"title": "Senior Developer",
"company": "Acme Inc",
"school": "example_value",
"locationId": "106981407",
"geoUrn": "106981407",
"industry": [
"Technology"
],
"connectionDegree": [
"example_value"
],
"currentCompanyIds": [
"Acme Inc"
],
"pastCompanyIds": [
"Acme Inc"
],
"schoolIds": [
"12345"
],
"profileLanguage": [
"example_value"
],
"serviceCategories": [
"example_value"
],
"openToVolunteer": false,
"connectionOf": [
"example_value"
],
"followerOf": [
"example_value"
]
}
}Responses
| Status | Description |
|---|---|
| 200 | People retrieved successfully |
| 400 | Bad Request - Invalid request parameters |
| 401 | Unauthorized - Invalid or missing API key |
| 500 | Internal Server Error - Failed to get LinkedIn credentials or search failed |
200 Response Parameters
| Name | Type | Description |
|---|---|---|
success | boolean | |
people | array | |
pagination | any | |
hasMore | boolean | Whether more results are available past this batch. Derived by fetching one row beyond the requested count, so it is exact — not a guess from the page being full. |
200 Example
{
"success": true,
"people": [
{
"profileId": "abhishek-onkar",
"profileUrn": "urn:li:fsd_profile:ACoAABdttMcBYTOrkGpTYrhL6waE6Tu8UhpZdeo",
"firstName": "Abhishek",
"lastName": "Onkar",
"headline": "Software Engineer @ Google",
"profilePicture": "https://media.licdn.com/dms/image/.../profile-displayphoto",
"location": "Bengaluru",
"connectionDegree": "2nd",
"currentPosition": "Software Engineer @ Google",
"profileUrl": "https://www.linkedin.com/in/abhishek-onkar/",
"isPremium": false,
"isOpenToWork": false
},
{
"profileId": "sheetal-lalwani-0601",
"profileUrn": "urn:li:fsd_profile:ACoAAC11JdABZvl_riyT7he7WnF3OXXr6THQ274",
"firstName": "Sheetal",
"lastName": "Lalwani",
"headline": "Software Engineer at Microsoft",
"profilePicture": "https://media.licdn.com/dms/image/.../profile-displayphoto",
"location": "India",
"connectionDegree": "2nd",
"currentPosition": "Software Engineer at Microsoft",
"profileUrl": "https://www.linkedin.com/in/sheetal-lalwani-0601/",
"isPremium": false,
"isOpenToWork": false
}
],
"pagination": {
"count": 25,
"start": 0
},
"hasMore": true
}400 Response Parameters
| Name | Type | Description |
|---|---|---|
success | boolean | |
error | object |
400 Example
{
"success": false,
"error": {
"issues": [
{
"code": "invalid_type",
"expected": "string",
"received": "undefined",
"path": [
"keywords"
],
"message": "Required"
}
],
"name": "ZodError"
}
}401 Response Parameters
| Name | Type | Description |
|---|---|---|
error | string |
401 Example
{
"error": "Unauthorized - Invalid credentials"
}500 Response Parameters
| Name | Type | Description |
|---|---|---|
error | string |
500 Example
{
"error": "Failed to search people",
"success": false
}Search Filters Guide
Comprehensive guide to all available filters for LinkedIn search APIs. Learn how to filter by location, industry, company size, and more.
Search LinkedIn people (V2 - with auto-pagination)
Search for LinkedIn members with enhanced filtering options and automatic pagination. Supports additional filters like connectionOf, followerOf, and schoolIds. Automatically handles LinkedIn page-based pagination internally - specify the total count you want and the API will fetch multiple pages as needed (max 10 pages, ~10 results per page). Better for finding people connected to specific profiles or following specific accounts. Important: This V2 endpoint uses LinkedIn's newer search, which is rolling out gradually by region. If this endpoint does not return results for your account, use the V1 `/search/people` endpoint instead. Rate limit: 1,000 search calls per account per day (resets at midnight UTC), and 30 calls per minute. Pagination is billed per page walked, so a `count` of 25 spends about 3 calls. Separately, LinkedIn applies its own commercial use limit to people search: roughly 100 searches a month on a free account, ~300 on Premium Career, ~500 on Premium Business, and effectively unlimited with Sales Navigator. That ceiling belongs to LinkedIn, is computed from search and browsing history rather than published, resets on the 1st of the month, and is not enforced or reported by this API. Maximum 1000 results per search.
