# LinkedIn People Search Scraper (`khadinakbar/linkedin-people-search-scraper`) Actor

Find public LinkedIn people by keyword, job title, company, school and location. Cookieless, no login. Optional deep profile enrichment. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/linkedin-people-search-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, MCP servers, Social media
- **Stats:** 3 total users, 2 monthly users, 49.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 person founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Scraper

Find **public LinkedIn people** by job title, company, school, location, or free-text keywords — then optionally pull each person's full public profile. Cookieless, no login, no LinkedIn account required. Built for recruiters, sales teams, founders, and AI agents that need people data on demand.

### What it does

Give it a search (e.g. *"Head of Growth" in San Francisco at a fintech*) and it returns a clean list of matching public LinkedIn people. Turn on **deep enrichment** and every person is expanded with their about section, experience, education, skills, and follower/connection counts — all from publicly visible profile data.

You can also skip search entirely and paste a list of profile URLs to enrich directly.

### When to use it

- **Recruiters** sourcing candidates by role + location + company.
- **Sales / SDRs** building targeted prospect lists by title and industry.
- **Founders / marketers** finding alumni, community members, or niche experts.
- **AI agents** that need a single tool: people-in → structured JSON out.

When NOT to use it: this returns **public** profile data only — no emails, no private work history, no LinkedIn connections graph. For email enrichment see `linkedin-profile-email-scraper`. For a single profile by URL the same data is available here in direct-URL mode.

### Output

One record per person:

| Field | Description |
|---|---|
| `fullName`, `firstName`, `lastName` | Person's name |
| `headline` | Public headline / role line |
| `currentCompany` | Best-effort current company |
| `location` | City / region / country |
| `profileUrl` | Canonical `linkedin.com/in/<slug>` URL |
| `publicIdentifier` | Profile slug |
| `about` | Profile summary *(enriched)* |
| `experience[]`, `education[]`, `skills[]` | Public sections *(enriched)* |
| `connectionsCount`, `followerCount` | Public counts *(enriched)* |
| `isEnriched`, `enrichmentSource` | Whether deep data was fetched, and from which provider |
| `rank`, `snippet`, `scrapedAt` | Search position, raw snippet, ISO timestamp |

### Pricing (Pay-Per-Event)

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Person found | $0.01 each |
| Person enriched (optional) | $0.02 each |

A 50-person enriched search costs about **$1.50**. Disable enrichment to pay only the $0.01 per-person find fee. `maxResults` hard-caps your spend.

### Example input

```json
{
  "jobTitle": "Head of Growth",
  "location": "San Francisco",
  "enrichProfiles": true,
  "maxResults": 50,
  "resultsRegion": "US"
}
```

Direct-URL mode:

```json
{
  "profileUrls": ["https://www.linkedin.com/in/williamhgates"],
  "enrichProfiles": true
}
```

### How it works

Discovery runs a `site:linkedin.com/in` Google search through the ScrapeCreators API and parses public profile cards from the results. Enrichment calls the ScrapeCreators LinkedIn profile endpoint per person, with SociaVault as an automatic fallback. No cookies or credentials are ever required from you.

### FAQ

**Do I need a LinkedIn login or cookies?** No. Everything is cookieless public data.

**Will I get emails or phone numbers?** No — this is public profile data only.

**Why are some people not enriched?** LinkedIn hides some profiles from public/incognito view. Those still return search-level fields with `isEnriched: false` and are not charged the enrichment fee.

**How do I control cost?** Set `maxResults` and toggle `enrichProfiles`. The run logs an upfront cost cap and a final billed amount.

### Legal

This actor collects only publicly available data and does not log into LinkedIn or bypass any access controls. You are responsible for using the output in compliance with LinkedIn's Terms of Service, GDPR/CCPA, and any applicable laws. Do not use scraped personal data for unlawful purposes.

# Actor input Schema

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

Job title to search for, quoted as a phrase on Google (e.g. 'Head of Growth'). Use this when sourcing people by role. Combine with location/company/school to narrow. NOT a free-text bio search — for that use the keywords field.

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

City, region, or country to filter people by (e.g. 'San Francisco' or 'Germany'). Matched against the public profile's location text in Google results. Leave empty for worldwide. NOT a postal code.

## `currentCompany` (type: `string`):

Company name to filter people by (e.g. 'Stripe'). Quoted as a phrase so Google matches it exactly. Best-effort — LinkedIn public pages do not always expose the current employer. NOT a company LinkedIn URL.

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

School or university name to filter alumni (e.g. 'Stanford University'). Quoted as a phrase on Google. Useful for alumni sourcing. NOT a degree or field of study.

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

Extra free-text keywords added to the Google query (e.g. 'fintech founder'). Supports Google operators. Use alongside or instead of the structured filters. NOT a LinkedIn profile URL.

## `profileUrls` (type: `array`):

Optional list of LinkedIn personal-profile URLs (https://www.linkedin.com/in/<slug>). When provided, search is skipped and these profiles are enriched directly. Use this when you already have URLs and just want full public data. NOT company or post URLs.

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

When true (default), each found profile is fetched for full public data: about, experience, education, skills, follower/connection counts. When false, only the fast search-level fields (name, headline, location, URL) are returned at the lower price. Enrichment is billed per profile.

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

Maximum number of people to return (1-500). Caps both search depth and total cost. Defaults to 50. In direct-URL mode it caps how many of the supplied URLs are processed.

## `resultsRegion` (type: `string`):

Two-letter country code for the Google search region (e.g. 'US', 'GB', 'DE'). Affects which localized results surface. Defaults to 'US'. NOT the person's location filter — use the location field for that.

## Actor input object example

```json
{
  "jobTitle": "Software Engineer",
  "location": "London",
  "currentCompany": "Stripe",
  "school": "Stanford University",
  "keywords": "fintech founder",
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates"
  ],
  "enrichProfiles": true,
  "maxResults": 50,
  "resultsRegion": "GB"
}
```

# Actor output Schema

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

Public LinkedIn people found by this run.

# 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 = {
    "jobTitle": "Head of Growth",
    "location": "San Francisco"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/linkedin-people-search-scraper").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 = {
    "jobTitle": "Head of Growth",
    "location": "San Francisco",
}

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

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

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

```

## CLI example

```bash
echo '{
  "jobTitle": "Head of Growth",
  "location": "San Francisco"
}' |
apify call khadinakbar/linkedin-people-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/linkedin-people-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/S6dSWuZpECzcBhWIc/builds/Ul1hEtuk5n98GDG1L/openapi.json
