# LinkedIn Company Employees Scraper (`generous_fog/linkedin-company-employees-scraper`) Actor

Extract targeted LinkedIn company employees with names, job titles, locations, profile URLs, and matched roles. Build B2B prospect lists for recruiting, decision-maker discovery, account mapping, and market research. Supports no-cookie discovery and authenticated search.

- **URL**: https://apify.com/generous\_fog/linkedin-company-employees-scraper.md
- **Developed by:** [Cracks API](https://apify.com/generous_fog) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 employee results

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/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 Company Employees Scraper

Build targeted company employee discovery lists for B2B prospecting, recruiting, account mapping, and market research. This Actor returns source-backed names, indexed current-role evidence, profile URLs, company matches, optional locations, and useful search metadata from one or many target companies.

Choose between a **no-cookie public web index mode** for fast discovery of publicly indexed profiles and an **authenticated LinkedIn search mode** for deeper company people search using your own session cookies. Every saved employee is returned as clean JSON and can be exported to CSV, Excel, Google Sheets, a CRM, n8n, Make, Zapier, or any API workflow.

> **Unofficial.** This is an independent Actor and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. “LinkedIn” is a trademark of LinkedIn Corporation.

### What makes this company people scraper useful

- Search multiple LinkedIn company pages in one run
- Find all visible employees or focus on specific roles and decision makers
- Use precise title matching or broader keyword discovery
- Filter by an optional LinkedIn geographic URN
- Remove unwanted profiles with exclusion keywords
- Deduplicate employees across roles, pages, and companies
- Choose no-cookie public discovery or authenticated company people search
- Control pages, employee limits, delays, and proxies
- Export a structured company employee roster instead of raw HTML
- Pay only for employee records that pass the paid quality gate
- Receive an uncharged diagnostic instead of thin results when no candidate is usable

### Two access modes

#### No-cookie public web index

Use this mode when you want to discover publicly indexed LinkedIn profiles without providing a LinkedIn login or cookies. The Actor searches the public web index for exact `/in/` profile URLs whose indexed title or snippet confirms the target company and, when supplied, the target role.

This is a **discovery product, not full profile enrichment**. It is useful for quick prospect research, small lead lists, and profile-URL discovery. Results depend on what public search engines have indexed, so this mode does not represent a complete company roster and will not match the summaries, photos, or section depth of a full profile provider.

#### Authenticated LinkedIn search

Use this mode when you need deeper access to LinkedIn company people search. It sends authenticated requests using your own `li_at` and `JSESSIONID` cookies and does not launch a browser, Selenium, or Puppeteer.

Cookie fields are marked as secrets in the Actor input schema and are never copied into dataset output. LinkedIn can change its internal endpoints and may restrict automated access. Use conservative page limits and delays, and use only an account you are authorized to use.

### Data extracted for every employee

Each paid employee result includes:

- `fullName`, `firstName`, and `lastName`
- `headline` and normalized `jobTitle`
- Indexed `summary` when available
- Evidence-backed `currentPositions`
- `location` when discoverable
- Exact `profileUrl` and `publicIdentifier`
- LinkedIn profile URN, image, and connection degree when exposed
- Target `companyName`, `companyUrl`, and company ID
- `matchedRole` and search mode
- `sourceEvidence`, source mode, and source page
- `qualityScore` and `status`
- ISO scrape timestamp

A candidate is billable only when it has an exact profile URL, a real person name, a meaningful headline and job title, confirmed company evidence, confirmed requested-role evidence, and a quality score of at least 90. Thin candidates are skipped. If nothing passes, the Actor writes one uncharged `insufficient_data` diagnostic.

LinkedIn does not expose every field for every person. Missing values are returned as `null` instead of invented data.

### Common use cases

#### B2B prospect list building

Create a focused list of founders, sales leaders, recruiters, marketing managers, engineering leaders, or other buyer personas working at target accounts. Send the resulting profile URLs to your enrichment, outreach, or CRM workflow.

#### Account mapping

Map visible employees at customers, competitors, partners, or high-value accounts. Search several role families in one run and receive a deduplicated employee list linked back to each source company.

#### Recruiting and candidate sourcing

Find engineers, product managers, designers, finance professionals, HR specialists, and other roles within selected companies. Export a clean sourcing list for review without manually paging through company people search.

#### Decision-maker discovery

Use precise title mode with terms such as `Founder`, `CEO`, `Head of Sales`, `VP Marketing`, or `Talent Acquisition` to identify likely stakeholders. Use exclusion keywords to remove interns, former employees, or irrelevant departments.

#### Market and competitor research

Compare visible team composition across companies, study hiring patterns, find regional staff, or create a company employee roster for further analysis.

### Input fields

| Field | Description |
|---|---|
| `dryRun` | Preview the search plan without using cookies or charging for employee results |
| `accessMode` | Choose no-cookie public web index or authenticated LinkedIn search |
| `companyUrls` | One or more LinkedIn company page URLs |
| `roles` | Job titles, departments, functions, or keywords; leave empty for all visible employees |
| `excludeKeywords` | Skip results containing unwanted terms |
| `liAt` | Secret LinkedIn `li_at` cookie for authenticated mode |
| `jsessionId` | Secret LinkedIn `JSESSIONID` cookie for authenticated mode |
| `searchMode` | Precise title match or broader keyword search |
| `geoUrn` | Optional LinkedIn location filter |
| `maxPagesPerRole` | Maximum search pages for each company and role combination |
| `maxResultsPerCompany` | Safety limit for unique employees saved per company; `0` means no added limit |
| `delayMs` | Delay between requests to reduce rate pressure |
| `includeProfileImages` | Include profile images when available |
| `strictCompanyMatch` | Require the target company to appear in no-cookie indexed results |
| `proxyConfiguration` | Optional Apify proxy settings |

### Example input: no-cookie company employee discovery

````json
{
  "accessMode": "publicIndex",
    "companyUrls": [
        "https://www.linkedin.com/company/microsoft/",
            "https://www.linkedin.com/company/apifytech/"
              ],
                "roles": ["Software Engineer", "Product Manager"],
                  "searchMode": "title",
                    "strictCompanyMatch": true,
                      "maxPagesPerRole": 2,
                        "maxResultsPerCompany": 50,
                          "proxyConfiguration": {
                              "useApifyProxy": true
                                }
                                }
                                ```

                                ## Example input: authenticated company people search

                                ```json
                                {
                                  "accessMode": "authenticated",
                                    "companyUrls": ["https://www.linkedin.com/company/microsoft/"],
                                      "roles": ["Founder", "Head of Sales", "Recruiter"],
                                        "excludeKeywords": ["Former", "Ex-"],
                                          "searchMode": "title",
                                            "geoUrn": "102713980",
                                              "maxPagesPerRole": 5,
                                                "maxResultsPerCompany": 100,
                                                  "delayMs": 4000,
                                                    "liAt": "YOUR_SECRET_LI_AT_COOKIE",
                                                      "jsessionId": "YOUR_SECRET_JSESSIONID_COOKIE"
                                                      }
                                                      ```

                                                      ## Example output

                                                      ```json
                                                      {
                                                        "recordType": "employee",
                                                          "fullName": "Jane Doe",
                                                            "firstName": "Jane",
                                                              "lastName": "Doe",
                                                                "headline": "Senior Software Engineer at Example Company",
                                                                  "jobTitle": "Senior Software Engineer",
                                                                    "summary": "Senior Software Engineer at Example Company building cloud infrastructure...",
                                                                      "currentPositions": [
                                                                          {
                                                                                "title": "Senior Software Engineer",
                                                                                      "companyName": "Example Company",
                                                                                            "evidence": "public-index-title"
                                                                                                }
                                                                                                  ],
                                                                                                    "location": "San Francisco Bay Area",
                                                                                                      "profileUrl": "https://www.linkedin.com/in/jane-doe",
                                                                                                        "publicIdentifier": "jane-doe",
                                                                                                          "profileUrn": "urn:li:fsd_profile:ABC123",
                                                                                                            "profileImageUrl": null,
                                                                                                              "connectionDegree": "2nd",
                                                                                                                "companyName": "Example Company",
                                                                                                                  "companyUrl": "https://www.linkedin.com/company/example-company/",
                                                                                                                    "companyId": "123456",
                                                                                                                      "matchedRole": "Software Engineer",
                                                                                                                        "searchMode": "title",
                                                                                                                          "source": "public-web-index",
                                                                                                                            "sourcePage": 1,
                                                                                                                              "sourceEvidence": {
                                                                                                                                  "resultTitle": "Jane Doe - Senior Software Engineer at Example Company",
                                                                                                                                      "snippet": "Senior Software Engineer at Example Company building cloud infrastructure...",
                                                                                                                                          "companyMatched": true,
                                                                                                                                              "roleMatched": true
                                                                                                                                                },
                                                                                                                                                  "status": "success",
                                                                                                                                                    "qualityScore": 98,
                                                                                                                                                      "scrapedAt": "2026-08-25T12:00:00.000Z"
                                                                                                                                                      }
                                                                                                                                                      ```

                                                                                                                                                      ## Pricing

                                                                                                                                                      The Actor charges **$0.002 per quality-approved employee result**, equal to **$2 per 1,000 results**. This is 50% below a $4-per-1,000 short-profile reference price. Dry-run plans, thin candidates, and `insufficient_data` diagnostics are not charged. Apify platform usage may be billed separately according to your Apify plan.

                                                                                                                                                      ## Tips for better results

                                                                                                                                                      1. Start with one company, one role, and one or two pages.
                                                                                                                                                      2. Use exact role phrases such as `Head of Sales` instead of broad words such as `business`.
                                                                                                                                                      3. Use keyword mode when role titles vary across companies.
                                                                                                                                                      4. Keep strict company matching enabled in no-cookie mode to reduce unrelated profiles.
                                                                                                                                                      5. Use authenticated mode when public-index coverage is too limited.
                                                                                                                                                      6. Increase `delayMs` and use a stable proxy when processing larger jobs.
                                                                                                                                                      7. Use `maxResultsPerCompany` as a spend and volume safety limit.

                                                                                                                                                      ## Limitations and responsible use

                                                                                                                                                      - Public-index mode is discovery-only: it returns profiles discoverable through public search and is not a complete employee database or full-profile enrichment service.
                                                                                                                                                      - Authenticated results depend on the permissions and visibility available to the supplied LinkedIn account.
                                                                                                                                                      - LinkedIn may rate-limit requests, change internal APIs, or require re-authentication.
                                                                                                                                                      - Search results can contain stale employment information. Validate important records before using them.
                                                                                                                                                      - Do not use the Actor for spam, harassment, discrimination, surveillance, or unlawful profiling.
                                                                                                                                                      - Follow LinkedIn’s terms and applicable privacy, data-protection, employment, and marketing laws, including GDPR and CCPA where relevant.

                                                                                                                                                      ## FAQ

                                                                                                                                                      ### Does this LinkedIn employee scraper require cookies?

                                                                                                                                                      No-cookie public index mode does not. Authenticated mode requires your own `li_at` and `JSESSIONID` cookies.

                                                                                                                                                      ### Can it scrape employees from multiple companies?

                                                                                                                                                      Yes. Add multiple LinkedIn company URLs and multiple roles in one run. Results are deduplicated automatically.

                                                                                                                                                      ### Is this a LinkedIn company people extractor or a lead-generation tool?

                                                                                                                                                      It can be both. The Actor extracts a structured company employee list, while role filters make that list useful for B2B lead generation, recruiter sourcing, account mapping, and decision-maker research.

                                                                                                                                                      ### Are secret cookies included in the output?

                                                                                                                                                      No. Cookie fields are secret inputs and are never written to the dataset.

                                                                                                                                                      ### How do I export the employee roster?

                                                                                                                                                      Open the default dataset after the run and export it as JSON, CSV, Excel, XML, or connect it to another workflow through the Apify API.

# Actor input Schema

## `dryRun` (type: `boolean`):

Preview planned company and role searches without using LinkedIn cookies or charging for results.
## `accessMode` (type: `string`):

Public web index works without cookies for discoverable profiles. Authenticated LinkedIn search uses your own session cookies for deeper company people results.
## `companyUrls` (type: `array`):

One or more LinkedIn company page URLs, for example https://www.linkedin.com/company/microsoft/
## `roles` (type: `array`):

Target employee roles such as Founder, Head of Sales, Recruiter, or Software Engineer. Leave empty to collect all visible employees.
## `excludeKeywords` (type: `array`):

Skip profiles whose headline contains any of these terms.
## `liAt` (type: `string`):

Your authenticated LinkedIn li_at session cookie. Stored securely and never included in output.
## `jsessionId` (type: `string`):

Your LinkedIn JSESSIONID cookie used for CSRF authentication. Stored securely and never included in output.
## `searchMode` (type: `string`):

Title match keeps results whose current headline contains the role. Keyword search returns broader LinkedIn matches.
## `geoUrn` (type: `string`):

Optional LinkedIn geographic URN, for example 102713980 for India.
## `maxPagesPerRole` (type: `integer`):

Maximum LinkedIn search-result pages to request for each company and role combination. Each page normally contains about 10 people.
## `maxResultsPerCompany` (type: `integer`):

Maximum unique employee records saved for each company. Use 0 for no additional limit.
## `delayMs` (type: `integer`):

Delay in milliseconds between LinkedIn requests. Increase this if the account is being rate limited.
## `includeProfileImages` (type: `boolean`):

Include a profile image URL when LinkedIn exposes one in search results.
## `proxyConfiguration` (type: `object`):

Optional Apify proxy. Residential proxy is recommended when processing many companies.
## `strictCompanyMatch` (type: `boolean`):

In no-cookie mode, keep only profiles whose indexed title or snippet mentions the target company.
## `countryCode` (type: `string`):

Two-letter country code used by the no-cookie public index search.
## `languageCode` (type: `string`):

Two-letter language code used by the no-cookie public index search.

## Actor input object example

```json
{
  "dryRun": false,
  "accessMode": "publicIndex",
  "companyUrls": [
    "https://www.linkedin.com/company/microsoft/"
  ],
  "roles": [
    "Software Engineer",
    "Product Manager"
  ],
  "excludeKeywords": [],
  "searchMode": "title",
  "maxPagesPerRole": 2,
  "maxResultsPerCompany": 50,
  "delayMs": 3000,
  "includeProfileImages": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "strictCompanyMatch": true,
  "countryCode": "us",
  "languageCode": "en"
}
````

# Actor output Schema

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

No description

## `dataset` (type: `string`):

No description

# 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/"
    ],
    "roles": [
        "Software Engineer",
        "Product Manager"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("generous_fog/linkedin-company-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/"],
    "roles": [
        "Software Engineer",
        "Product Manager",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("generous_fog/linkedin-company-employees-scraper").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 '{
  "companyUrls": [
    "https://www.linkedin.com/company/microsoft/"
  ],
  "roles": [
    "Software Engineer",
    "Product Manager"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call generous_fog/linkedin-company-employees-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,generous_fog/linkedin-company-employees-scraper"
        }
    }
}

```

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/q8ONedjIWulnNmiAx/builds/fGJHlVgFgIknb8vdB/openapi.json
