# LinkedIn Company Employees Scraper + Emails (No Login) (`automly/linkedin-company-employees-scraper`) Actor

Scrape a company's employees from LinkedIn without login or cookies: name, headline, location, school and profile link, filtered by job title and location. Add full profiles, available work emails and clearly labeled email guesses.

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

## Pricing

from $1.50 / 1,000 employees

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Company Employees Scraper + Emails (No Login)

### What is LinkedIn Company Employees Scraper?

**LinkedIn Company Employees Scraper** is a tool that lets you **scrape the people who work at a company from LinkedIn**: name, headline, current company, location, school, connections and profile link, with optional full profiles and **work emails**. Paste company links or names, click **Start**, and download the list as Excel, CSV or JSON. No LinkedIn account, no cookies.

- ⚡ **Speed:** about 400 employees per minute (two companies, 400 employees in 60 seconds in our test run)
- 🎯 **Filters that stick:** job title and location filters are checked on every row, so "Account Executive in Dublin" returns account executives, not everyone who once mentioned the words
- 📧 **Work emails:** addresses published on the web, or a guess built from the company's own email format, with the format's share and its source
- 🔓 **No login:** no LinkedIn account, cookies or browser extension needed

### What can LinkedIn Company Employees Scraper do?

- Find employees of any company on LinkedIn from its company page link or just its name
- Scrape LinkedIn employees by job title: sales reps, engineers, recruiters, founders, CTOs
- Filter LinkedIn employees by city or country
- Build B2B lead lists with a work email for each employee
- Find a company's email format (first.last, flast, first) and its email provider
- Open each employee's full LinkedIn profile for photo, followers, about, current positions and education
- Scrape many companies in one run and export to Excel, CSV, JSON or through the API

### What data can you extract from LinkedIn company employees?

| | | |
|---|---|---|
| 👤 Name | 💼 Headline | 🏢 Current company |
| 📍 Location | 🎓 School | 🤝 Connections |
| 🔗 Profile link and username | 🧭 How they match the company | 🏷️ Company name, ID, website and domain |
| 📧 Published work email and where it was found | ✉️ Email guess from the company's format | 📊 Email format, its share and source |
| 🖼️ Photo (full profiles) | 👥 Followers (full profiles) | 📝 About, positions, education, job history (full profiles) |

### How to scrape employees of a company from LinkedIn

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **LinkedIn Company Employees Scraper**.
3. Paste one or more company links (`https://www.linkedin.com/company/stripe/`) or names (`HubSpot`). Add job titles or locations if you want only some of the staff.
4. Click **Start** and watch the employees appear in the table.
5. Download the results as Excel, CSV, JSON or HTML, or read them through the API.

### ⬇️ Input

| Setting | What it does |
|---|---|
| **Companies** | LinkedIn company links or company names. A link is exact. A name is looked up on LinkedIn and must match a company's name; if it does not, the run report lists the closest names so you can paste the right link. |
| **Job titles** | Only people whose headline shows one of these titles, e.g. `Account Executive`, `CTO`, `Recruiter`. |
| **Locations** | Only people in one of these places. People who show no location are kept; people who show another place are left out. Add the country (`Cambridge, United Kingdom`) to leave out a city of the same name elsewhere. |
| **Keywords** | Extra words the profiles should contain, e.g. `python` or `fintech`. |
| **Max employees per company** | Stop after this many employees for each company (default 100). |
| **Full profiles** | Also open each employee's profile for photo, followers, about, positions and education. Slower. |
| **Find work emails** | Add a published work email, or a guess from the company's email format. |
| **Search the web for each employee's own email** | With emails on: also search the web for every employee's own published address. Slower. |

All sales people at two companies, with emails:

```json
{
  "companies": ["https://www.linkedin.com/company/stripe/", "HubSpot"],
  "jobTitles": ["Account Executive", "Sales Manager"],
  "maxEmployeesPerCompany": 200,
  "includeEmail": true
}
```

Engineers in two cities, with full profiles:

```json
{
  "companies": ["https://www.linkedin.com/company/stripe/"],
  "jobTitles": ["Software Engineer"],
  "locations": ["San Francisco", "Dublin"],
  "fullProfiles": true
}
```

### ⬆️ Output

One row per employee. A real row with **Find work emails** on:

```json
{
  "linkedinUrl": "https://www.linkedin.com/in/patrickcollison",
  "publicIdentifier": "patrickcollison",
  "name": "Patrick Collison",
  "headline": "Stripe CEO",
  "currentCompany": "Stripe",
  "location": null,
  "school": null,
  "connections": null,
  "matchedBy": "headline",
  "company": {
    "name": "Stripe",
    "linkedinUrl": "https://www.linkedin.com/company/stripe/",
    "companyId": "2135371",
    "website": "https://stripe.com",
    "domain": "stripe.com",
    "mxProvider": "Google Workspace"
  },
  "email": null,
  "emailSource": null,
  "emailGuess": "patrick@stripe.com",
  "emailFormat": "first",
  "emailFormatShare": 31.6,
  "emailFormatSource": "https://rocketreach.co/stripe-email-format_b5e68c99f42e5898"
}
```

With **Full profiles** on, rows also carry `photo`, `followers`, `about`, `countryCode`, `currentPositions`, `pastCompanies`, `education`, `experience`, `jobTitles`, `badges`, `recentPostUrls` and `profileVisibility` (`full`, `limited` or `hidden`).

The **Employees**, **Emails** and **Full profiles** tables in the Output tab show the most useful columns of each. Export everything as Excel, CSV, JSON, XML or HTML.

### How can I use LinkedIn employee data?

- **Sales prospecting:** list the decision makers at your target accounts with a work email for each.
- **Recruiting:** find engineers, designers or sales reps at a competitor in the city you hire in.
- **Account research:** see who works in which team and where before a meeting or a deal.
- **Market mapping:** compare how companies staff their sales, engineering or support teams.
- **CRM enrichment:** add names, titles and profile links to the company records you already have.

### How do work emails work?

For each company the scraper reads the website on its LinkedIn page, checks that its domain receives email, and looks up the company's most common email format on the web (for example `first.last`, used by 87% of a company's addresses). Each employee then gets:

- `email`: an address published on the web that carries the employee's own first and last name, with `emailSource` naming the page. Most people do not publish theirs, so this is often empty.
- `emailGuess`: the address the company's format gives for the employee's name, with `emailFormat`, `emailFormatShare` and `emailFormatSource` so you can judge it. **Guesses are not checked against the mailbox**; verify them with an email verifier before a large send.

In our test on eight well-known companies a format was found for seven; the eighth publishes a website domain that receives no email, so no guesses were made. About 97% of employees got a guess where a format was found (names with a single word or an initial get none).

### Get LinkedIn employees through the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("automly/linkedin-company-employees-scraper").call(run_input={
    "companies": ["https://www.linkedin.com/company/stripe/"],
    "jobTitles": ["Account Executive"],
    "includeEmail": True,
})
for employee in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(employee["name"], employee["headline"], employee.get("emailGuess"))
```

You can also schedule the actor to refresh your list every week, and connect it to Google Sheets, Zapier, Make or a webhook from the **Integrations** tab.

### ❓FAQ

#### How much does it cost to scrape LinkedIn employees?

You pay only for the employees you get. Employees with a work email or an email guess cost more than employees without one; see the **Pricing** tab for the current prices. Apify gives you $5 of free usage every month, enough to try the scraper on a few companies.

#### How many employees can I get per company?

For one company search you usually get a few hundred employees (between 300 and 800 in our tests on large companies). To reach more, add **Job titles** or **Locations**: every title and place is searched on its own, so `Software Engineer`, `Account Executive` and `Recruiter` in three cities reach far more people than one search for the whole company. The same person is never saved twice for a company.

#### Why are some employees missing?

LinkedIn shows a company's full staff list only to signed-in members. This scraper finds employees through public search results, so it returns the people whose LinkedIn profiles are public on the web and who show the company as their current employer or in their headline. People who hide their profile from search engines, or who list the company only as a past job, are not included.

#### What does "matchedBy" mean?

It says how the row shows that the person works at the company: `currentCompany` means the company is the current employer on the profile; `headline` means the headline names it ("Account Executive at HubSpot", "Engineer @ Stripe"). Headlines that say ex-, former or previously are left out.

#### Do I need a LinkedIn account or cookies?

No. The scraper works without logging in and never uses your LinkedIn account, so your account cannot be restricted.

#### What do full profiles add, and why are some limited or hidden?

Full profiles add photo, followers, about, current positions, education and recent post links. LinkedIn shows most members a **limited** profile when you are not signed in (no job history); well-known people and creators show a **full** one with every position. Some members hide their profile from visitors who are not signed in: those rows are marked `hidden` and keep everything the search found.

#### Can I trust the email guesses?

A guess follows the format most of the company's addresses use, and the row tells you how common that format is and who quoted it. It is still a guess: people with a common name, a nickname or an older address may use another one. Verify guesses before sending, and use published emails (`email`) where you have them.

#### Is it legal to scrape LinkedIn employees and their emails?

The scraper collects only data that is public: profiles and pages anyone can see without signing in, and addresses published on the web. It does not access private data or anything behind a login. Personal data, including names and work emails, is protected by laws such as the GDPR in Europe, and email outreach is regulated by laws such as CAN-SPAM in the US. **You are responsible for using the results lawfully**: have a legitimate reason to process the data, respect opt-outs, and follow the rules of the countries you contact people in. When in doubt, ask a lawyer. Read more in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

This scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by LinkedIn or Microsoft.

#### Something isn't working?

Open the **Issues** tab and tell us the company and what you expected. The run report in the Storage tab lists every company that could not be scraped and why.

### Scrape more LinkedIn data

| Actor | What it gets |
|---|---|
| LinkedIn Profile Scraper + Email Finder | Profiles from links or names, with work emails |
| LinkedIn People Search Scraper | People by job title, company, location and keywords |
| LinkedIn Posts Scraper | Posts of people and companies |
| LinkedIn Post Search Scraper | Posts by keyword |

Fields and numbers on this page were last verified against live LinkedIn pages on 27 September 2026.

# Actor input Schema

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

LinkedIn company links (https://www.linkedin.com/company/stripe/) or company names (Stripe). A link is exact; a name is looked up on LinkedIn and must match a company's name.

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

Only people whose headline shows one of these job titles, e.g. Account Executive, CTO, Recruiter.

## `locations` (type: `array`):

Only people in one of these places, e.g. London, Dublin, Ireland. People whose profile shows no location are kept; people who show another place are left out. Add the country too (Dublin, Ireland) to also get people who show only their country, and to leave out a city of the same name in another country (Cambridge, United Kingdom).

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

Extra words the profiles should contain, e.g. python or fintech.

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

Stop after this many employees for each company.

## `fullProfiles` (type: `boolean`):

Also open each employee's profile for photo, followers, about, current positions, education and, where the profile is fully public, job history. Slower. Profiles LinkedIn shows to signed-in members only keep the search details.

## `includeEmail` (type: `boolean`):

Find each employee's work email: an address published on the web with their name in it, or else a guess built from the company's most common email format (for example first.last@company.com). Guesses are not checked against the mailbox. Employees with an email or a guess cost more (see the Pricing tab).

## `searchPublishedEmails` (type: `boolean`):

With Find work emails: also search the web for every employee's published address. Slower, and mostly finds addresses of founders and people who publish theirs.

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

Proxy settings. The default works for most runs.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/stripe/",
    "HubSpot"
  ],
  "maxEmployeesPerCompany": 100,
  "fullProfiles": false,
  "includeEmail": false,
  "searchPublishedEmails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `emails` (type: `string`):

No description

## `profiles` (type: `string`):

No description

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

No description

## `report` (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 = {
    "companies": [
        "https://www.linkedin.com/company/stripe/",
        "HubSpot"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/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/stripe/",
        "HubSpot",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/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/stripe/",
    "HubSpot"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/linkedin-company-employees-scraper --silent --output-dataset

```

## MCP server setup

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