# LinkedIn People Search API (`johnvc/linkedin-people-search-api`) Actor

Find people on LinkedIn by name, job title, company, school or location and get their public profile data as structured JSON: profile URL, headline, employer, about text, work history, education, follower count and photo. No login, no session cookie, no LinkedIn account.

- **URL**: https://apify.com/johnvc/linkedin-people-search-api.md
- **Developed by:** [John](https://apify.com/johnvc) (community)
- **Categories:** Lead generation, Developer tools, AI
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.29 / 1,000 person founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## LinkedIn People Search API

Search LinkedIn for people by name, job title, company, school or location, and get their public
profile data back as clean JSON. No LinkedIn account, no login, and no session cookie.

Give it a name like "John Smith", or a professional search like "Engineering Manager at Stripe", and
it returns the matching people with their profile URL, headline, employer and location. For every
person whose profile is public, it also returns their about text, full work history, education,
follower count, photo and languages.

### Find people on LinkedIn by name, job title, company or school

Every field is optional, and you combine whichever ones describe the person you want:

| Search by | Field | Example |
|---|---|---|
| Full name | `firstName` + `lastName` | Jane Doe |
| Job title | `jobTitle` | Engineering Manager |
| Company | `company` | Stripe |
| School or university | `school` | Stanford University |
| Location | `location` | San Francisco |
| Anything else | `keywords` | rust, fintech, open source |

Two common shapes:

```json
{ "firstName": "John", "lastName": "Smith", "location": "San Francisco", "maxResults": 25 }
```

```json
{ "jobTitle": "Engineering Manager", "company": "Stripe", "maxResults": 50 }
```

### What the LinkedIn People Search API returns

One row per person. Every row carries the discovery fields; rows for people with a public profile
also carry the enrichment fields.

| Field | Always present | Description |
|---|---|---|
| `profileUrl` | yes | Canonical profile URL, tracking parameters stripped |
| `publicIdentifier` | yes | Profile slug, a stable deduplication key |
| `fullName` | yes | The person's name |
| `headline` | yes | Professional headline, usually role and employer |
| `currentCompany` | yes | Current employer |
| `searchRank` | yes | Position in the results, starting at 1 |
| `isEnriched` | yes | Whether the full profile was read |
| `about` | when public | The person's About text |
| `experience` | when public | Work history: company, company URL, location, role, dates |
| `education` | when public | Schools, with URLs and dates |
| `locationLocality` | when public | City or metro area |
| `locationCountry` | when public | Two-letter country code |
| `followerCount` | when public | Followers on the profile |
| `profilePhotoUrl` | when public | Public profile photo |
| `languages` | when public | Languages listed |
| `awards` | when public | Honours and awards listed |

Example row:

```json
{
  "resultType": "person",
  "profileUrl": "https://www.linkedin.com/in/jkosoy",
  "publicIdentifier": "jkosoy",
  "fullName": "Jamie Kosoy",
  "headline": "Engineering Manager at Stripe",
  "currentCompany": "Stripe",
  "currentCompanyUrl": "https://www.linkedin.com/company/stripe",
  "locationLocality": "Berkeley, California, United States",
  "locationCountry": "US",
  "followerCount": 3027,
  "experience": [
    {
      "organizationName": "Stripe",
      "organizationUrl": "https://www.linkedin.com/company/stripe",
      "organizationLocation": "San Francisco, California, United States"
    }
  ],
  "education": [
    { "organizationName": "Carnegie Mellon University", "startDate": "2001", "endDate": "2005" }
  ],
  "isEnriched": true,
  "searchRank": 1
}
```

#### How much of a profile comes back, honestly

Not every LinkedIn member makes their profile public. People who have not return nothing to any
signed-out visitor, which includes this API and every other tool that does not use your login.

In practice that means coverage depends on who you search for. A targeted professional search
returns full profiles for nearly everyone: a test of "Engineering Manager at Stripe" enriched 10 of
10\. A very common name searched deep into the results falls a long way below that, because those
pages surface dormant accounts.

You are never billed for a profile that would not open. Delivering a person and reading their full
profile are two separate charges, and the second one only applies when the data actually came back.

### LinkedIn people search without a login or session cookie

This API only ever reads pages that are public to anyone on the internet. It does not ask for your
LinkedIn credentials, it has no field to paste a session cookie into, and it stores nothing about
your account. There is no field for `li_at` because the code has no way to use one.

That matters because some scrapers ask you to hand over your own LinkedIn session cookie. Doing that
puts your personal account at risk of restriction, and the risk lands on you rather than on the tool.
This one cannot put you in that position.

What it also means, stated plainly: this API does not return email addresses, phone numbers,
connection degree, or mutual connections. None of those appear on a public profile, so no signed-out
tool can honestly promise them.

### LinkedIn API pricing: pay per person, not per page of results

Billing is per person delivered. There is no per-run fee, no minimum, and no charge for a block of
search results you did not want.

| Event | When you are charged |
|---|---|
| Person found | Once per person delivered, with profile URL, name, headline and employer. Never for a duplicate inside the same run. |
| Person enriched | Only when that person's public profile was opened and actually returned data. |

Two consequences worth knowing. Setting `enrichProfiles` to `false` gives you a fast, cheaper
discovery-only run. And because the second charge is conditional, a search that finds mostly private
profiles costs meaningfully less than one that finds public ones.

Several tools in this category bill per page of 25 results, charged whether or not you wanted all 25
and charged again when you ask for the full profile. This one does not work that way. Current prices
are always on the Store page.

### Use the LinkedIn People Search API from Claude with MCP

Add this API as a tool in [Claude Code](https://claude.ai/referral/uIlpa7nPLg) (free trial),
[Claude Cowork](https://claude.ai/referral/uIlpa7nPLg) (free trial), or any other MCP client through
the hosted Apify MCP server:

```
https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-people-search-api
```

Here `actors` and `docs` are the standard tool categories, and the third entry is this API. Once it
is connected you can ask in plain language, for example "find engineering managers at Stripe and
tell me which ones previously worked at a payments company", and the agent will run the search and
read the results itself.

Apify's MCP integration docs: https://docs.apify.com/platform/integrations/mcp

https://www.youtube.com/watch?v=jREWahDGhJM

### 💸 Pay per run with crypto (x402)

The LinkedIn People Search API supports agentic payments via the [x402 protocol](https://docs.apify.com/platform/integrations/x402).
AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed:
point your agent at the [Apify MCP server](https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-people-search-api) and it can
discover, pay for, and run this Actor autonomously. Read the
[Apify x402 announcement](https://apify.com/change-log/pay-for-apify-actors-with-x402?fpr=9n7kx3) for details.

### LinkedIn Recruiter and Sales Navigator alternative for sourcing

For sourcing work, the useful comparison is not feature-for-feature but cost-per-lookup. Recruiter
and Sales Navigator are seat-based subscriptions built for a person clicking through a UI. This is a
metered API built for a script or an agent, so it suits list building, enrichment pipelines and
scheduled monitoring rather than interactive browsing.

It does not replace InMail, saved projects, or anything that needs to act as your logged-in account.
It replaces the part where you need structured data about a lot of people at once.

### LinkedIn alumni search by school or university

Set `school` to search by education. Combine it with `jobTitle` or `location` to narrow an alumni
list down to the people worth contacting:

```json
{ "school": "Stanford University", "jobTitle": "Product Manager", "maxResults": 100 }
```

### Integrations and API access

Runs can be triggered from the Apify API, the JavaScript and Python clients, or the CLI, and results
can be pushed onward with Apify integrations to Zapier, Make, n8n, Google Sheets, Slack, Airtable and
webhooks. Schedules let you re-run a saved search daily or weekly and only act on the people who are
new since last time, which is the usual way to watch a competitor's team or a school's graduating
cohort.

Every run writes a dataset you can pull as JSON, CSV, or Excel.

### How to get started

1. Open the Actor: [LinkedIn People Search API on Apify Store](https://apify.com/johnvc/linkedin-people-search-api?fpr=9n7kx3)
2. Enter a name, or a job title and company.
3. Set how many people you want with `maxResults`.
4. Leave `enrichProfiles` on for full profiles, or switch it off for a quick, cheaper list.
5. Run it, then download the dataset as JSON, CSV or Excel.

### 🔗 Related Tools

- [LinkedIn Profile API](https://apify.com/johnvc/linkedin-profile-api?fpr=9n7kx3) - when you already have profile URLs and want them scraped in bulk.
- [LinkedIn Company API](https://apify.com/johnvc/linkedin-company-api?fpr=9n7kx3) - firmographics for the companies these people work at.
- [LinkedIn Jobs API](https://apify.com/johnvc/linkedin-jobs-api?fpr=9n7kx3) - open roles and salary data.
- [LinkedIn Posts API](https://apify.com/johnvc/linkedin-posts-api?fpr=9n7kx3) - what a person or company has been posting.
- [Crunchbase Company API](https://apify.com/johnvc/crunchbase-company-api?fpr=9n7kx3) - funding and investor data to qualify an employer.

For contrast, [LinkedIn People Search Scraper by powerai](https://apify.com/powerai/linkedin-peoples-search-scraper?fpr=9n7kx3)
covers similar ground but carries a per-run start fee on top of its per-result price and returns no
about text, work history or education. Worth a look if you want to compare output shapes before you
commit.

### Frequently asked questions

#### Can I search someone on LinkedIn without having an account?

Yes, for the parts of LinkedIn that are public. This API reads only pages that any signed-out visitor
can see, so it needs no account of yours. Members who have made their profile private are not visible
that way, and this API will not show them either.

#### Can someone tell if you search them up on LinkedIn?

No. Profile view notifications come from views made by a logged-in member. This API is never logged
in as you or anyone else, so nothing is attributed to your account and nobody is notified.

#### Does LinkedIn have a people search API?

Not a public one. LinkedIn's official API programs are partner-gated and do not offer people search,
which is why this exists. You get the developer experience of an API, structured input in and
structured rows out, over data that LinkedIn only publishes as web pages.

#### Is this a scraper, and will it get me blocked?

Under the hood it is a scraper, reading public pages the same way a search engine does. Nothing is
attributed to you: it never signs in, never uses your cookies, and never touches your account, so
there is no account of yours to block. Requests are paced and retried on transient failures.

#### Does this work as an MCP server for AI agents?

Yes. Point any MCP client at `https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-people-search-api`
and it becomes a callable tool for your agent. The input fields are documented for agent readers, so a
model can pick sensible arguments without extra prompting.

#### Can I run this on a schedule and only get new people?

Yes. Apify Schedules can re-run a saved search on any cadence you like, hourly through monthly. Each
run writes its own dataset, and `publicIdentifier` is stable per person, so comparing against the
previous run tells you exactly who is new. That is the usual setup for watching a company's hiring or
tracking a school's recent graduates.

#### Can I connect this to my other tools?

Yes. Results can be pushed to Zapier, Make, n8n, Google Sheets, Slack, Airtable or a webhook through
Apify integrations, and you can call the API directly from the Apify JavaScript or Python client if
you would rather pull than push.

#### How do I search LinkedIn by name and company?

Set `firstName` and `lastName` for the person and `company` for the employer. Adding the company is
the single most effective way to cut through a common name, because it filters to people whose public
profile mentions that employer.

#### Why did some people come back without work history?

Their profile is not public. LinkedIn shows nothing to signed-out visitors for those members, so there
is no work history to read. Those rows still include the profile URL, name, headline and employer from
the search results, and you are not charged the enrichment fee for them.

#### How do I search for alumni on LinkedIn?

Use the `school` field with the university name. Combine it with `jobTitle`, `company` or `location`
to narrow a large alumni body down to a workable list.

#### Does this return email addresses or phone numbers?

No. Neither appears on a public LinkedIn profile, so no cookie-free tool can return them truthfully.
Use a dedicated email-finding service on the profile URLs or names this API gives you.

#### I got fewer people than I asked for. Why?

The search ran out of matching public results. Narrow searches genuinely have fewer people in them,
and public results thin out as you page deeper. Loosen a filter, drop the location, or search a
company rather than an exact name to widen the pool.

### Examples

Ready to run task pages built on this API. Each one opens with its own working setup, so you can run it
on your account in one click and then swap in your own search.

- [Find People on LinkedIn in Claude via MCP](https://apify.com/johnvc/linkedin-people-search-api/examples/find-people-on-linkedin-in-claude-via-mcp?fpr=9n7kx3) - wire this Actor into an MCP client such as [Claude Code](https://claude.ai/referral/uIlpa7nPLg) (free trial) and let the agent search by job title and company. No session cookie is handed over, because there is no cookie field to hand over.
- [Find Employees of a Company on LinkedIn](https://apify.com/johnvc/linkedin-people-search-api/examples/find-employees-of-a-company-on-linkedin?fpr=9n7kx3) - give a company and a job title, get one flat row per person with name, headline, current company, location and profile URL, ready for a prospect list.
- [LinkedIn People Search API for Python](https://apify.com/johnvc/linkedin-people-search-api/examples/linkedin-people-search-api-for-python?fpr=9n7kx3) - `pip install apify-client`, no OAuth and no application review. Rows key on `publicIdentifier`, so results deduplicate across runs.
- [Export LinkedIn People Search Results to CSV](https://apify.com/johnvc/linkedin-people-search-api/examples/export-linkedin-people-search-results-to-csv?fpr=9n7kx3) - the flat overview view downloads straight to CSV or Excel with no nested columns to unpick: name, headline, current company, location, followers and profile URL.
- [Track Job Changes on LinkedIn Monthly](https://apify.com/johnvc/linkedin-people-search-api/examples/track-job-changes-on-linkedin-monthly?fpr=9n7kx3) - re-run one saved search on a schedule and diff the results to see who moved. Enrichment is switched off so the recurring run stays light.

Each page has an AI readable `.md` version at the same address with `.md` on the end.

***

### 🌐 About Alpha OSINT

This Actor is part of [Alpha OSINT](https://www.alphaosint.com), toolset of financial and operations data sources and APIs.
For support or requests for this actor, please start a ticket [directly on our support page](https://apify.com/johnvc/linkedin-people-search-api/issues/open?fpr=9n7kx3).

Last Updated: 2026.09.02

# Actor input Schema

## `firstName` (type: `string`):

First name of the person to find, for example Jane. Combined with lastName into an exact-phrase search, so the two together find people by full name. Leave both name fields empty only if you are searching with the keywords field instead.

## `lastName` (type: `string`):

Last name of the person to find, for example Doe. Combined with firstName into an exact-phrase search.

## `keywords` (type: `string`):

Extra search terms to add to the query, for example a skill, an employer or an industry word. Use this on its own to search without a specific name, or alongside a name to narrow the matches.

## `jobTitle` (type: `string`):

Job title to require, for example Software Engineer. Only people whose public profile or search snippet mentions this title are returned.

## `company` (type: `string`):

Employer name to require, for example Microsoft. Matches people whose public profile mentions this company, current or past.

## `school` (type: `string`):

School or university name to require, for example Stanford University.

## `location` (type: `string`):

Place to require, for example San Francisco or United Kingdom. Matched as text against the public profile, so a city, region or country all work.

## `maxResults` (type: `integer`):

Stop after delivering this many people. You are charged only for the people actually returned, so a lower number costs less. Public search results thin out for very narrow queries, so a run can finish with fewer people than requested.

## `enrichProfiles` (type: `boolean`):

When enabled, each person's public LinkedIn profile page is opened to add their about text, work history, education, follower count, photo and languages. Turn this off for a faster, cheaper run that returns only the profile URL, name, headline and current employer.

## `proxyConfiguration` (type: `object`):

Proxy used to open the public profile pages. The default works for almost every run. Apify Proxy is required because LinkedIn and the search engine both refuse direct datacenter traffic.

## Actor input object example

```json
{
  "maxResults": 25,
  "enrichProfiles": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Every dataset item from this run, including any error rows.

## `people` (type: `string`):

The matched people in table form, without error rows.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("johnvc/linkedin-people-search-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("johnvc/linkedin-people-search-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call johnvc/linkedin-people-search-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,johnvc/linkedin-people-search-api"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/K57owi8nOaCWbnGQM/builds/EzistmoiRNZKz9cX4/openapi.json
