# Linkedin Employees Scraper (`caprolok/linkedin-employees-scraper`) Actor

Effortlessly gather LinkedIn URLs and names of employees in bulk. Ideal for HR and recruitment, this tool quickly provides essential contact information, simplifying talent search and networking opportunities.

- **URL**: https://apify.com/caprolok/linkedin-employees-scraper.md
- **Developed by:** [Caprolok](https://apify.com/caprolok) (community)
- **Categories:** Lead generation, Jobs, SEO tools
- **Stats:** 3,968 total users, 49 monthly users, 100.0% runs succeeded, 149 bookmarks
- **User rating**: 1.07 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Employees Scraper](https://caprolok-assets.s3.us-east-1.amazonaws.com/Linkedin+Employees+Scraper/linkedin-employees-banner.png)

## LinkedIn Employees Scraper

[![Apify Actor](https://apify.com/actor-badge?actor=caprolok/linkedin-employees-scraper)](https://apify.com/caprolok/linkedin-employees-scraper)
[![Try on Apify](https://img.shields.io/badge/try-on%20Apify-7e57c2)](https://console.apify.com/actors/caprolok~linkedin-employees-scraper)
[![MCP-ready](https://img.shields.io/badge/MCP-ready-1f6feb)](https://apify.com/caprolok/linkedin-employees-scraper/api/mcp)
[![Pricing: Pay-Per-Event](https://img.shields.io/badge/pricing-pay--per--event-2ea043)](https://apify.com/caprolok/linkedin-employees-scraper)

Extract employees, past employees, and alumni from any LinkedIn **company** or **school** URL. Get clean, structured profiles (name, title, location, education, experience, profile link, and more) ready for CRMs, recruiting workflows, and AI agents.

***

### What it does

Paste one or more LinkedIn company or school URLs. The actor returns a structured list of people associated with those pages. Optionally filter by job title or country.

No LinkedIn login, cookies, or browser setup required.

### When to use it

- Recruiters building targeted candidate lists
- Sales teams finding decision-makers at target accounts
- Researchers mapping organizations or alumni networks
- AI agents that need a typed dataset of LinkedIn profiles

### Highlights

- **Fast**: large result sets in about a minute for typical runs
- **Multi-language**: works across major languages for names, titles, education, location, and follower counts
- **Tenure labels**: each person is tagged `current`, `past`, or `unknown` so you can split alumni from current staff in your own tools
- **Extra coverage**: a secondary people directory back-fills missing titles/locations and surfaces people LinkedIn may have missed (employees mode only)
- **Clean output**: schema-validated records for CRMs, spreadsheets, and agents

### How to use it

1. Open the [actor on Apify](https://apify.com/caprolok/linkedin-employees-scraper).
2. Paste one or more company or school URLs.
3. (Optional) Choose a mode, job titles, and/or country.
4. Click **Start**. Download results as JSON, CSV, or Excel from the **Storage** tab.

#### Supported URL formats

- ✅ `https://www.linkedin.com/company/microsoft/`
- ✅ `https://www.linkedin.com/school/harvard-university/`
- ✅ Scheme-less or without `www` (e.g. `linkedin.com/company/microsoft`): these are normalized automatically
- ❌ Numeric company IDs (e.g. `/company/154XXX/`): use the public slug URL instead

### Inputs

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `companyUrls` | `string[]` | yes | | LinkedIn company or school URLs. |
| `maxResultsPerCompany` | `integer` | yes | `20` | Maximum people returned per URL. |
| `designation` | `string[]` | no | `[]` | Only include people whose title matches one of these roles. Leave empty for no title filter. |
| `onlyVerified` | `boolean` | no | `true` | Only return people whose profile clearly matches the company/school (including brand variants). Turn off to include lower-confidence matches. |
| `mode` | `"auto"` | `"employees"` | `"alumni"` | no | `"auto"` | Usually leave on Auto. Auto uses employees for company URLs and alumni for school URLs. Every result still includes a `tenure` label so you can filter further yourself. |
| `alumniDeepScan` | `integer` (0–250) | no | `25` | In alumni mode, spend extra effort finding more long-tail profiles. Higher = more coverage and cost. `0` turns this off. |
| `country` | `string` (ISO-2) | no | | Prefer people based in this country. |

#### Sample input

```json
{
    "companyUrls": [
        "https://www.linkedin.com/company/microsoft/",
        "https://www.linkedin.com/school/harvard-university/"
    ],
    "designation": ["CEO", "CTO", "Engineering Manager"],
    "maxResultsPerCompany": 200,
    "mode": "auto",
    "country": "US"
}
```

### Outputs

| Field | Type | Description |
| --- | --- | --- |
| `thumbnail` | string (URL) | Profile picture when available. |
| `name` | string | Full name. |
| `first_name` / `last_name` | string | First and last name. |
| `company` | string | Company associated with the profile. |
| `designation` | string | Job title. `-` when unknown. |
| `experience` / `education` / `location` | string | Profile snippets. `-` when unknown. |
| `followers` | string | Follower / connection count when available. |
| `link` | string (URL) | LinkedIn profile URL. |
| `verified` | string | `✅` when the profile looks like a match for the company you requested; `❌` otherwise. |
| `tenure` | `"current"` | `"past"` | `"unknown"` | Whether they appear to be current staff, alumni/past, or unclear. Use this in your own filters if you need current-only or past-only lists. |
| `source` | string | `linkedin`, `directory`, or `linkedin+directory`: where the record came from. |

#### Sample output

```json
[
    {
        "thumbnail": "https://media.licdn.com/...jpg",
        "name": "Amy Doe",
        "first_name": "Amy",
        "last_name": "Doe",
        "company": "Microsoft",
        "designation": "Chief Product Officer",
        "education": "Stanford University",
        "experience": "Microsoft, Google",
        "location": "San Francisco, California",
        "followers": "5,200",
        "link": "https://www.linkedin.com/in/amy-doe-...",
        "verified": "✅",
        "tenure": "current",
        "source": "linkedin"
    }
]
```

### Pricing & limits

Pay-per-event. Mark **`data_request` as the primary event** in Console > Publication > Monetization (required for Store quality / monetization readiness).

| Event | Price | When |
| --- | --- | --- |
| `data_request` (primary) | $0.02 | Per real person written to your dataset. Free-plan sample / upgrade-hint rows are not billed. |
| `platform_usage` | $0.001 | Small top-up that tracks the run’s actual Apify platform cost. |

You can cap spend per run with Apify’s `actorMaxPaidDatasetItems` setting.

- **Free Apify plan**: a short sample of real results per company; further rows show an upgrade hint. Free users only use monthly free credit.
- **Paid plans**: full results up to `maxResultsPerCompany`.

### Programmatic usage

Node.js:

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('caprolok/linkedin-employees-scraper').call({
    companyUrls: ['https://www.linkedin.com/company/microsoft'],
    maxResultsPerCompany: 50,
    mode: 'employees',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("caprolok/linkedin-employees-scraper").call(run_input={
    "companyUrls": ["https://www.linkedin.com/school/harvard-university"],
    "maxResultsPerCompany": 100,
    "mode": "alumni",
    "alumniDeepScan": 25,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

cURL:

```bash
curl -X POST "https://api.apify.com/v2/acts/caprolok~linkedin-employees-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"companyUrls":["https://www.linkedin.com/company/microsoft"],"maxResultsPerCompany":20}'
```

### MCP (Model Context Protocol)

Use this actor from AI agents via the [Apify MCP server](https://apify.com/caprolok/linkedin-employees-scraper/api/mcp) (stdio or `https://mcp.apify.com` with your Apify token). Input and output schemas are published with the actor so agents can call it with typed arguments.

### Integrations

Works with Make, Zapier, Airbyte, Slack, Google Sheets, GitHub, cloud storage, webhooks, and anything that can call the Apify API.

### Troubleshooting

| Symptom | What to try |
| --- | --- |
| Company not found | Use a public `/company/<slug>` or `/school/<slug>` URL (not a numeric ID). |
| Zero results | Relax `country` / `designation`, or try again later. |
| Many `❌` verified rows | Turn on **Only verified matches**, or narrow with job titles. |
| Alumni results look thin | Raise `maxResultsPerCompany` and/or `alumniDeepScan`. |

Questions or bugs: use the [actor Issues tab](https://apify.com/caprolok/linkedin-employees-scraper/issues/open).

### Related actors

| | |
| --- | --- |
| [LinkedIn Company URL Retriever](https://apify.com/caprolok/linkedin-company-url-retriever) | Build lists of company URLs. |
| [LinkedIn People URL Retriever](https://apify.com/caprolok/linkedin-people-url-retriever) | Resolve names to profile URLs. |

# Actor input Schema

## `companyUrls` (type: `array`):

One or more LinkedIn company or school pages. Example: linkedin.com/company/microsoft

## `maxResultsPerCompany` (type: `integer`):

How many people to return for each URL. Higher means more results and higher cost.

## `onlyVerified` (type: `boolean`):

When on (recommended), only return people whose profile clearly matches the company/school, including brand variants like @vuala for vualapp.com. Turn off to also include lower-confidence matches.

## `designation` (type: `array`):

Optional. Leave empty to get all roles. Add titles (e.g. CEO, Manager) to narrow results.

## `mode` (type: `string`):

Usually leave on Auto. Auto picks employees for company URLs and alumni for school URLs.

## `alumniDeepScan` (type: `integer`):

In alumni mode only. Spend extra effort finding more long-tail profiles. Higher = more coverage and cost. 0 turns this off.

## `country` (type: `string`):

Optional. Prefer people based in this country.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.linkedin.com/company/microsoft"
  ],
  "maxResultsPerCompany": 20,
  "onlyVerified": true,
  "mode": "auto",
  "alumniDeepScan": 25
}
```

# Actor output Schema

## `results` (type: `string`):

Full dataset of people (names, titles, locations, education, experience, profile URLs, tenure, and source).

# 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 = {
    "companyUrls": [
        "https://www.linkedin.com/company/microsoft"
    ],
    "maxResultsPerCompany": 20,
    "onlyVerified": true,
    "mode": "auto",
    "alumniDeepScan": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("caprolok/linkedin-employees-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 = {
    "companyUrls": ["https://www.linkedin.com/company/microsoft"],
    "maxResultsPerCompany": 20,
    "onlyVerified": True,
    "mode": "auto",
    "alumniDeepScan": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("caprolok/linkedin-employees-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 '{
  "companyUrls": [
    "https://www.linkedin.com/company/microsoft"
  ],
  "maxResultsPerCompany": 20,
  "onlyVerified": true,
  "mode": "auto",
  "alumniDeepScan": 25
}' |
apify call caprolok/linkedin-employees-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9Qmr7CUJ3fVH6bAmC/builds/117i4HhgiAUJz8aiU/openapi.json
