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

Extract verified LinkedIn company employees without login or cookies. Filter by job title, seniority, and location. Discards ex-employees with confidence scoring for clean B2B lead rosters.

- **URL**: https://apify.com/t0b0t/linkedin-company-employees-scraper.md
- **Developed by:** [Tobias Sauseng](https://apify.com/t0b0t) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$6.00 / 1,000 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

<p align="center">
  <img src="logo.jpg" alt="LinkedIn Company Employees Scraper" width="130" style="border-radius: 20px;" />
</p>

## LinkedIn Company Employees Scraper (No Cookies, Verified B2B Leads)

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?logo=apify)](https://apify.com/t0b0t/linkedin-company-employees-scraper)
[![Pay Per Event](https://img.shields.io/badge/Pricing-Pay--Per--Event-blue)](https://apify.com/t0b0t/linkedin-company-employees-scraper)
[![Status](https://img.shields.io/badge/Status-Active-brightgreen)](https://apify.com/t0b0t/linkedin-company-employees-scraper)

Extract verified employee rosters and decision-makers from target LinkedIn companies **without login credentials, session cookies, or account ban risks**.

Filter by company, exact job title, seniority level (`C-Level`, `VP`, `Director`, `Manager`, `Senior`), and geographic location. Automatically filters out former staff and alumni with transparent verification scoring.

***

### ⚡ Why Use This Scraper?

| Feature | **This Scraper** | **Cookie-Based Scrapers** | **Apollo / PhantomBuster** |
|---|---|---|---|
| **Account Ban Risk** | **ZERO (100% No Login / No Cookies)** | 🚨 High (LinkedIn checkpoints & bans) | High (requires connected cookies) |
| **Ex-Employee Filtering** | **Built-in Verification Engine** (discards ex-staff) | ❌ Included (pollutes your CRM) | Outdated databases (30%+ alumni) |
| **Title Sanitization** | **CRM-Ready Clean Roles** (strips `AG`, `GmbH`, noise) | ❌ Raw messy headlines | Varies by provider |
| **Pricing Model** | **Pay-Per-Result (~$0.006 / lead)** | Expensive monthly fee + proxy costs | $49 – $149 / month subscription |
| **Discarded / Ex-Employees** | **100% FREE ($0.00 charge)** | Charged full credits | Consumes export credits |
| **Speed & Concurrency** | **Lightning fast (Public index routing)** | Slow browser delays (10s/profile) | Rate-limited by account safety caps |

***

### 🚀 Key Capabilities

- **100% Cookie-Free & Zero Account Risk**: Never supply your `li_at` session cookie or risk your personal or team LinkedIn accounts.
- **Built-In Current Employment Verification**: Evaluates each profile's headline, title, and search snippet to distinguish active team members from ex-employees and alumni.
- **Transparent Confidence Scoring**: Every lead is tagged with a transparent verification level (`HIGH`, `MEDIUM`, `LOW`) and a human-readable reason (`confidenceReason`).
- **Precision Job Title Cleaning**: Strips corporate prefixes, legal suffixes (`AG`, `GmbH`, `Inc`, `LLC`, `Ltd`, `SE`), and Google truncation artifacts (`...`, `Read more`). Recovers real roles from snippets even when headlines only list the company name.
- **Seniority & Role Targeting**: Filter decision-makers by exact title (e.g. `VP of Sales`, `Chief Technology Officer`) or expand automatically across seniority levels (`c_level`, `vp`, `director`, `manager`, `senior`).
- **International Location Matching**: Supports cities, metropolitan areas, states, and Unicode regional spellings (`Raaba, Steiermark, Österreich`, `München`, `Zürich`, `San Francisco`).

***

### 📖 How to Extract Verified Leads in 3 Steps

1. **Add Target Companies**: Enter company names (e.g. `Stripe`), slugs (`anthropic`), or LinkedIn URLs (`https://www.linkedin.com/company/cancom-austria/`).
2. **Set Filters (Optional)**: Filter by seniority level, target job titles (e.g. `Sales Leader`, `Engineer`), and geographic location.
3. **Run & Export**: Click **Start**. Download clean, CRM-ready leads in **CSV, Excel, or JSON**, or stream directly into HubSpot, Salesforce, Clay, or n8n via webhook.

***

### 📥 Input Configuration Reference

| Option | Type | Default | Description |
|---|---|---|---|
| `companies` | Array | *Required* | Target companies. Accepts names (`OpenAI`), slugs (`anthropic`), or full URLs (`linkedin.com/company/stripe/`). |
| `maxEmployeesPerCompany` | Integer | `50` | Maximum number of verified employees to return per company. |
| `jobTitles` | Array | `[]` | Specific job titles to match (e.g. `["CEO", "Software Engineer", "VP Sales"]`). |
| `seniority` | Array | `[]` | Seniority levels: `c_level`, `founder_owner`, `vp`, `director`, `manager`, `senior`, `entry_intern`. |
| `location` | String | `""` | Geographic filter (e.g. `"San Francisco"`, `"London"`, `"Austria"`). |
| `verifyCurrentOnly` | Boolean | `true` | When enabled, automatically discards former employees and alumni. |
| `maxResults` | Integer | `250` | Maximum total profiles across all companies in a single run. |
| `proxyConfiguration` | Object | Residential | High-reputation residential proxy rotation configured out of the box. |

***

### 📊 Sample Output

Every verified employee record is returned with clean, structured CRM fields:

```json
{
  "fullName": "Bernd Eder",
  "firstName": "Bernd",
  "lastName": "Eder",
  "currentTitle": "Executive Board Member",
  "headline": "Executive Board Member CANCOM Austria AG",
  "company": "Cancom Austria",
  "companySlug": "cancom-austria",
  "companyLinkedinUrl": "https://www.linkedin.com/company/cancom-austria/",
  "profileUrl": "https://www.linkedin.com/in/berndeder/",
  "publicIdentifier": "berndeder",
  "location": "Raaba",
  "isCurrentEmployee": true,
  "confidence": "HIGH",
  "confidenceReason": "Headline confirms active employment at Cancom Austria",
  "matchedTitleFilter": "Executive Board Member",
  "scrapedAt": "2026-09-07T00:00:00.000Z"
}
```

***

### 🎯 Verification & Confidence Explained

| Tier | Meaning | Action Taken |
|---|---|---|
| **HIGH** | Headline explicitly indicates current role at target company (e.g., `VP Engineering at Stripe`, `Executive Board Member`). | Included in dataset. |
| **MEDIUM** | Active employment confirmed via search snippet context or verified company association. | Included in dataset. |
| **LOW** | Former employee indicators detected (`Ex-Stripe`, `Former Google`, `Alumni`) or ambiguous context. | **Automatically discarded** when `verifyCurrentOnly` is `true`. |

***

### 💰 Transparent Pay-Per-Event (PPE) Pricing

You only pay for successful, verified employee leads. There are **no recurring monthly software subscriptions**:

| Event | Rate | When Charged |
|---|---|---|
| **`verified-lead`** (Default dataset item) | **$0.006** / lead | Charged only when a verified current employee is delivered. |
| **Ex-Employees / Alumni** | **$0.00 (FREE)** | Automatically discarded. Zero charge. |
| **Unmatched / Blocked** | **$0.00 (FREE)** | Zero charge. |

#### Pricing Examples:

- **100 Verified Decision-Makers**: `100 × $0.006` = **$0.60**
- **500 Enterprise Leads across 10 Companies**: `500 × $0.006` = **$3.00**

***

### 💻 Developer API & Integrations

#### Python (`apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("t0b0t/linkedin-company-employees-scraper").call(
    run_input={
        "companies": ["https://www.linkedin.com/company/anthropic/", "Stripe"],
        "jobTitles": ["Software Engineer", "Engineering Manager"],
        "seniority": ["senior", "manager"],
        "location": "San Francisco",
        "maxEmployeesPerCompany": 50,
        "verifyCurrentOnly": True,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['fullName']} - {item['currentTitle']} ({item['confidence']})")
```

#### JavaScript / Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('t0b0t/linkedin-company-employees-scraper').call({
    companies: ['Anthropic', 'OpenAI'],
    seniority: ['c_level', 'vp', 'director'],
    maxEmployeesPerCompany: 25,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} verified decision-makers!`);
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/t0b0t~linkedin-company-employees-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "companies": ["Stripe"],
    "seniority": ["c_level", "director"],
    "maxEmployeesPerCompany": 25
  }'
```

***

### ❓ Frequently Asked Questions (FAQ)

#### Do I need to provide LinkedIn cookies or credentials?

**No.** This scraper operates 100% without login credentials or `li_at` session cookies. Your LinkedIn account is never exposed to rate limits, security checkpoints, or suspensions.

#### How does ex-employee filtering work?

The scraper's multi-tier verification engine analyzes profile headlines and search snippet context. If negative signals (such as `ex-`, `former`, `alumni`, `past:`, or dates ending in the past) are detected, the lead is classified as `LOW` confidence and automatically discarded.

#### How are job titles cleaned?

Raw LinkedIn search headlines often contain company names and corporate suffixes (e.g. `Vertriebsassistentin CANCOM Austria AG`). Our sanitization engine strips legal entities (`AG`, `GmbH`, `Inc`, `LLC`), company names, and Google truncation symbols (`... Read more`) so your CRM receives clean, ready-to-use job titles.

#### Can I filter by both seniority and department?

Yes. You can combine `seniority` (e.g. `["director", "vp"]`) with specific keywords in `jobTitles` (e.g. `["Marketing", "Sales", "Engineering"]`) to pinpoint the exact leadership roster of target accounts.

#### Is scraping public LinkedIn employee data legal?

Yes. The scraper indexes publicly available information without bypassing authentication or paywalls, in accordance with US Ninth Circuit legal precedents (*hiQ Labs v. LinkedIn*).

***

### 💬 Support & Feature Requests

Have questions, need custom features, or want to report an issue? Check the **Issues** tab on the Actor page or reach out via Apify Console. We respond quickly!

# Actor input Schema

## `companies` (type: `array`):

Company names, handles, or full LinkedIn URLs. Examples: 'Stripe', 'https://www.linkedin.com/company/anthropic/', 'openai'. Accepts any mix.

## `maxEmployeesPerCompany` (type: `integer`):

Maximum number of verified employees to return per company (default: 50).

## `jobTitles` (type: `array`):

Optional list of job titles to target (e.g. 'CEO', 'Software Engineer', 'Head of Sales'). Leave empty to discover all roles.

## `seniority` (type: `array`):

Optional seniority levels to filter or expand titles.

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

Optional location filter (e.g. 'San Francisco', 'United States', 'Germany', 'London').

## `verifyCurrentOnly` (type: `boolean`):

Filter out former employees and alumni by cross-checking the headline and public snippet for active employment indicators.

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

Hard limit on total profiles returned across all companies in this run.

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

Apify Proxy settings. Uses GOOGLE\_SERP proxies for discovery and Residential proxies for full enrichment.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/anthropic/",
    "Stripe"
  ],
  "maxEmployeesPerCompany": 50,
  "jobTitles": [],
  "seniority": [],
  "location": "",
  "verifyCurrentOnly": true,
  "maxResults": 250,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Clean, CRM-ready employee leads with verified current employment status.

## `summary` (type: `string`):

Execution metrics, lead count, ex-employees discarded, and confidence tier breakdown.

# 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 = {
    "companies": [
        "https://www.linkedin.com/company/anthropic/",
        "Stripe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("t0b0t/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 = { "companies": [
        "https://www.linkedin.com/company/anthropic/",
        "Stripe",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("t0b0t/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 '{
  "companies": [
    "https://www.linkedin.com/company/anthropic/",
    "Stripe"
  ]
}' |
apify call t0b0t/linkedin-company-employees-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,t0b0t/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/78y2USq903ZFfCl3a/builds/z2cVztAAsFZhKLrVg/openapi.json
