Facebook Pixel
APILinkedIn Search

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 via LinkedIn's RSC endpoint and returns more accurate results. Rate Limit: 300 searches per account per month (resets on the 1st of each month). Maximum 1000 results per search.

POST/search/people
Authentication requiredSearch

Code 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.

  1. POST /search/geo with { "keywords": "Ohio" } returns { "geoId": "106981407", "name": "Ohio, United States" }.
  2. POST /search/people with that id:
{
  "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 via LinkedIn's RSC endpoint and returns more accurate results.

Rate Limit: 300 searches per account per month (resets on the 1st of each month). Maximum 1000 results per search.

Parameters

No parameters.

Request Body

FieldTypeRequiredDescription
accountIdstringNoLinkedIn account ID to use for the search. If not provided, uses the default account.
keywordsstringNoSearch keywords for name, title, company, or skills
countnumberNoNumber of results to return per page
startnumberNoPagination offset (0-indexed)
urlstringNoSales 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=...).
filtersobjectNoOptional 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

StatusDescription
200People retrieved successfully
400Bad Request - Invalid request parameters
401Unauthorized - Invalid or missing API key
500Internal Server Error - Failed to get LinkedIn credentials or search failed

200 Response Parameters

NameTypeDescription
successboolean
peoplearray
paginationany
hasMorebooleanWhether 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

NameTypeDescription
successboolean
errorobject

400 Example

{
  "success": false,
  "error": {
    "issues": [
      {
        "code": "invalid_type",
        "expected": "string",
        "received": "undefined",
        "path": [
          "keywords"
        ],
        "message": "Required"
      }
    ],
    "name": "ZodError"
  }
}

401 Response Parameters

NameTypeDescription
errorstring

401 Example

{
  "error": "Unauthorized - Invalid credentials"
}

500 Response Parameters

NameTypeDescription
errorstring

500 Example

{
  "error": "Failed to search people",
  "success": false
}