# LinkedIn Company Employees Scraper & Email Finder — No Login (`memo23/linkedin-company-employees-scraper`) Actor

Find a company's employees on LinkedIn without login. Pass company names or URLs, filter by title & seniority, and get verified profiles — name, current title, location, profile URL — plus an optional email finder. Each match is confirmed against its public result, not a SERP guess.

- **URL**: https://apify.com/memo23/linkedin-company-employees-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Social media, AI
- **Stats:** 32 total users, 27 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 & Email Finder — No Cookies, Verified

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/linkedin-employees-logo.png" alt="LinkedIn Company Employees Scraper logo" width="220" />
</p>

Find a company's **employees on LinkedIn without logging in** — names, current titles, headlines, locations, and profile URLs — filtered by **ICP title and seniority**, with an optional **contact-email finder**. Pass a company **name or a LinkedIn URL** (mix freely), and every match is **verified against its own public web result**, so you get confirmed current employees — not raw search-engine guesses.

No login. No cookies required. No ban risk. Pay only for the profiles you get.

**Fair billing:** you pay only per delivered profile. Empty searches, failed pages, and duplicates are never charged — and the email fee applies only when a contact email is actually found.

---

### Why use this scraper

- **Verified, not guessed.** Most "LinkedIn employee" tools dump whatever a search returns and tag it `low confidence`. This actor reads each result's current employer, title, and location, cross-checks the employer against your target company, and labels each row **high / medium / low** — with a plain-English reason. Former employees and lookalikes are flagged, not sold to you as current staff.
- **No login, no cookie, no ban risk.** Discovery runs entirely over the public web index. Your LinkedIn account is never touched. (An optional cookie mode exists for power users who want the full authenticated roster.)
- **Names or URLs.** Don't have the LinkedIn company URL? Just type the company name. Mix names and URLs in one run.
- **ICP targeting built in.** Filter by explicit titles (CEO, Head of Sales, Recruiter…) or by seniority buckets (owner, CxO, VP, director, manager…). Leave it empty and a built-in English/Spanish decision-maker set is used automatically.
- **Contact emails, optional.** Turn on the email finder to attach a contact email per company.
- **Pay per result.** Transparent pay-per-event pricing — a small run-start fee plus a flat price per profile, and a slightly higher price only when an email is found.

---

### What it does

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-linkedin-employees.png" alt="How the LinkedIn Company Employees Scraper works — target, discover and verify, export" width="820" />
</p>

Give it one or more companies and, optionally, the titles/seniority you care about. The actor:

1. Discovers public LinkedIn profiles associated with each company via the public web index.
2. Verifies each match from its own public result — pulling current title, employer, and location, and confirming (or refuting) that the person currently works at the target company.
3. Optionally finds a contact email per company.
4. Returns one clean, de-duplicated row per person, each tagged with a confidence level.

No LinkedIn login is used or required in the default mode.

---

### Supported inputs

| You provide | Example |
|---|---|
| Company name | `OpenAI` |
| LinkedIn company URL | `https://www.linkedin.com/company/stripe/` |
| A mix of both | `["OpenAI", "https://www.linkedin.com/company/stripe/"]` |
| Target titles (ICP) | `["CEO", "Head of Sales", "Recruiter"]` |
| Seniority buckets | `["cxo", "vp", "director"]` |
| Location hint | `"San Francisco"` |

---

### Use cases

- **Sales & lead-gen** — build decision-maker lists at target accounts, filtered by title and seniority, ready for your CRM.
- **Recruiting & talent mapping** — see who works where by role and level; map a competitor's team.
- **LATAM outreach** — the built-in title set includes Spanish decision-maker titles (Gerente General, Presidente, Dueño, Fundador…) so Spanish-language headlines actually match.
- **Market & competitive research** — headcount by function, org composition, and hiring signals.
- **AI agents & automation** — a clean, structured, verified data source for autonomous prospecting via the Apify API.

---

### How it works

1. **Discover** — for each company × target title, the actor queries the public web index for LinkedIn profiles and parses them into a unified row shape (name, headline, profile URL).
2. **Verify** — each row is confirmed from its own public result: the current title, employer, and location are extracted and the employer is cross-checked against the target company. Confidence is set to **high** (confirmed current employee, title matches), **medium** (works there but a different title, or only mentioned / a past role), or **low** (couldn't confirm). "Former"/"ex-" roles are detected and never sold as current.
3. **Enrich (optional)** — one contact email per company is discovered and stamped onto its rows.
4. **Return & bill** — one de-duplicated row per person is written to the dataset, billed per profile (with an email premium only when an email was actually found).

An **advanced deep-verify** option additionally fetches each public profile page; because LinkedIn heavily gates those pages it is slow and best-effort, so it's off by default — snippet verification already confirms the current employer without it.

---

### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `companies` | array | — | Company names and/or LinkedIn company URLs, mixed. |
| `targetTitles` | array | built-in EN/ES set | ICP titles to target. Empty = built-in decision-maker set (skipped for >50 companies unless you set titles). |
| `seniorityFilter` | array | `[]` | Seniority buckets expanded into titles: owner, partner, cxo, vp, director, manager, senior, entry, training, unpaid. |
| `location` | string | `""` | Optional location hint to improve relevance. |
| `maxItems` | integer | `50` | Max employees returned per company. |
| `verifyProfiles` | boolean | `true` | Confirm each row's employer/title/location from its own public result (free, recommended). |
| `enrichEmails` | boolean | `false` | Find one contact email per company. |
| `deepVerify` | boolean | `false` | Advanced: also fetch each public profile page (slow / best-effort). |
| `googlePages` | integer | `3` | Result pages per company × title (more = more candidates, higher cost). |
| `startUrls` | array | — | Advanced: LinkedIn company URLs via a request list / Google Sheet. |
| `cookies` | array | — | Optional: `li_at` + `JSESSIONID` to enable authoritative cookie mode. |

---

### Output

One row per person. Example (no-cookie, verified):

```json
{
  "fullName": "Fidji Simo",
  "firstName": "Fidji",
  "lastName": "Simo",
  "headline": "CEO, AGI Deployment at OpenAI",
  "currentTitle": "CEO, AGI Deployment",
  "currentEmployer": "OpenAI",
  "location": "Palo Alto",
  "company": "openai",
  "profileUrl": "https://www.linkedin.com/in/fidjisimo/",
  "publicIdentifier": "fidjisimo",
  "source": "GS",
  "verified": true,
  "confidence": "high",
  "confidenceReason": "Confirmed from the public result — current employer matches \"openai\" and the target title matches.",
  "matchedTitles": ["CEO"],
  "titleMatchType": "exact",
  "scrapedAt": "2026-07-19T00:00:00.000Z"
}
````

#### Key output fields

| Field | Description |
|---|---|
| `fullName` / `firstName` / `lastName` | Person's name |
| `headline` | Profile headline as indexed |
| `currentTitle` | Current job title (parsed & verified) |
| `currentEmployer` | Current employer (verified against the target company) |
| `location` | Location, when available from the public result |
| `profileUrl` / `publicIdentifier` | LinkedIn profile URL and slug |
| `company` | Target company key the row was discovered under |
| `verified` | `true` when the current employer was confirmed |
| `confidence` | `high` / `medium` / `low` |
| `confidenceReason` | Plain-English explanation of the confidence |
| `matchedTitles` / `titleMatchType` | Which requested titles matched, and how (`exact` / `partial` / `none`) |
| `contactEmail` / `contactWebsite` | Present only when the email finder is enabled |
| `source` | `GS` (public web index) or `linkedin-voyager` (cookie mode) |

***

### FAQ

**Do I need a LinkedIn account or cookie?**
No. The default mode uses only the public web index — no login, no cookie, no ban risk. Cookie mode is an optional power-user feature.

**How is this different from other LinkedIn employee scrapers?**
Most return raw search matches tagged "low confidence." This actor verifies each match against its own public result, confirms the current employer and title, flags former employees, and tells you why each row got its confidence level.

**Will it include people who don't actually work there?**
Discovery can surface lookalikes and former staff — that's exactly why verification exists. Those rows are labelled `medium`/`low` (or flagged as a past role), so you can filter to `confidence: high` for confirmed current employees.

**Can I search by company name instead of URL?**
Yes. Type the name directly; URLs and names can be mixed in one run.

**How do I get contact emails?**
Enable the email finder (`enrichEmails`). It's best-effort and adds `contactEmail` / `contactWebsite`.

**Can AI agents call it?**
Yes — structured JSON output and an API-first design. Call it from any LLM/automation framework via the Apify API.

***

### Support

Questions, edge cases, or a custom field you need? Open an issue on the Apify actor page and we'll help.

***

### Explore More Scrapers

Building a full lead-gen or recruiting pipeline? These pair well with this actor:

- **[LinkedIn Company Employees — Cookie / Full-Roster Mode](https://apify.com/memo23/linkedin-company-people-scraper)** — the authoritative version: paste a cookie to pull a company's complete employee roster from LinkedIn's own API.
- **[LinkedIn Jobs Scraper](https://apify.com/memo23/linkedin-jobs-scraper)** — job postings by keyword, location, and company. No cookies.
- **[LinkedIn Profiles Scraper](https://apify.com/memo23/linkedin-profiles-cheerio)** — full profile detail (experience, education, skills) for a list of profile URLs.
- **[LinkedIn Company About Scraper](https://apify.com/memo23/linkedin-company-about-scraper)** — company size, industry, HQ, website, and overview.
- **[LinkedIn Posts Scraper](https://apify.com/memo23/linkedin-posts-scraper)** — profile and company posts, no cookies.
- **[Email Finder & Verifier](https://apify.com/memo23/email-finder)** — find and verify person/company emails and phone numbers.
- **[Crunchbase Scraper](https://apify.com/memo23/crunchbase-scraper)** — company profiles, funding rounds, and investors for account research.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or Microsoft. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available information — public web-index results and public profile data — with no authenticated LinkedIn endpoints, paid features, or content behind the LinkedIn login wall used in the default mode. Users are responsible for ensuring their use complies with LinkedIn's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization. Scraped personal data must be processed on a lawful basis and used only for legitimate purposes.

***

### SEO Keywords

LinkedIn company employees scraper, LinkedIn employee finder, scrape LinkedIn employees no login, LinkedIn people scraper no cookies, company employee list LinkedIn, LinkedIn lead generation scraper, LinkedIn decision maker finder, LinkedIn email finder, find employees by company, LinkedIn recruiter sourcing tool, LinkedIn org chart scraper, LinkedIn sales prospecting, LinkedIn ICP scraper, verified LinkedIn profiles, LinkedIn company people export, Apify LinkedIn scraper, LinkedIn B2B contact scraper, LinkedIn talent mapping, no-login LinkedIn scraper, LinkedIn employees email

# Actor input Schema

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

One company per line — a plain name (e.g. "OpenAI") or a LinkedIn company URL (e.g. https://www.linkedin.com/company/openai/). Names and URLs can be mixed.

## `targetTitles` (type: `array`):

Job titles to target, one per line (e.g. CEO, Head of Sales, Gerente General). Leave empty to use a built-in English/Spanish decision-maker set (CEO, CTO, Founder, Owner, Director, Presidente, Dueño…). For runs of more than 50 companies the built-in set is skipped unless you set titles here.

## `seniorityFilter` (type: `array`):

Optional seniority buckets to expand into titles. Combined with Target titles. Unknown values are ignored.

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

Optional location hint added to discovery (e.g. "San Francisco", "United States", "Germany"). Improves relevance; leave empty for all locations.

## `maxItems` (type: `integer`):

Maximum number of employees to return per company. Keep this bounded to control cost and avoid over-broad results.

## `verifyProfiles` (type: `boolean`):

Recommended. Confirms each discovered profile from its own public web result — reads the current employer, title and location, cross-checks the employer against the target company, and sets a confidence of high / medium / low. This is what turns raw SERP guesses into confirmed current employees. No extra requests and no login.

## `enrichEmails` (type: `boolean`):

If enabled, finds one contact email per company (from its website or by name discovery) and adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

## `deepVerify` (type: `boolean`):

Advanced / best-effort. In addition to snippet verification, fetches each profile's public LinkedIn page to re-confirm employer and title. LinkedIn heavily gates these pages, so this is slow and often falls back to the snippet result — leave off unless you specifically need it.

## `googlePages` (type: `integer`):

How many Google result pages (10 results each) to fetch per company and target title. More pages = more candidates but higher cost. Default 3, max 10.

## `maxConcurrency` (type: `integer`):

Maximum concurrent requests. Lower = gentler and steadier; higher = faster but more likely to hit rate limits.

## `startUrls` (type: `array`):

Optional. LinkedIn company URLs to include, in addition to (or instead of) Companies. Useful for request lists / Google Sheets sources.

## `cookies` (type: `array`):

<p><b>Optional.</b> Leave empty for cookie-free discovery mode (no login). <b>Provide cookies</b> for authoritative LinkedIn-API mode (full company roster + richer data). Install <a rel="noopener noreferrer nofollow" target="_blank" href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg">EditThisCookie</a>, log into LinkedIn, export cookies, and paste them here. The minimum required are <code>li_at</code> and <code>JSESSIONID</code>.</p>
## `sdoKey` (type: `string`):

Advanced. Bring-your-own scrape.do token used to fetch Google results and public profiles. Leave blank to use the built-in token.

## `proxy` (type: `object`):

Leave empty — the actor already routes traffic through its own residential proxy at no extra cost to you. Only set this to use your own proxies.

## Actor input object example

```json
{
  "companies": [
    "OpenAI",
    "https://www.linkedin.com/company/stripe/"
  ],
  "targetTitles": [
    "CEO",
    "Head of Sales",
    "Recruiter"
  ],
  "seniorityFilter": [],
  "maxItems": 50,
  "verifyProfiles": true,
  "enrichEmails": false,
  "deepVerify": false,
  "googlePages": 3,
  "maxConcurrency": 10,
  "cookies": []
}
```

# Actor output Schema

## `results` (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": [
        "OpenAI",
        "https://www.linkedin.com/company/stripe/"
    ],
    "targetTitles": [
        "CEO",
        "Head of Sales",
        "Recruiter"
    ],
    "cookies": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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": [
        "OpenAI",
        "https://www.linkedin.com/company/stripe/",
    ],
    "targetTitles": [
        "CEO",
        "Head of Sales",
        "Recruiter",
    ],
    "cookies": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/linkedin-company-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 '{
  "companies": [
    "OpenAI",
    "https://www.linkedin.com/company/stripe/"
  ],
  "targetTitles": [
    "CEO",
    "Head of Sales",
    "Recruiter"
  ],
  "cookies": []
}' |
apify call memo23/linkedin-company-employees-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Company Employees Scraper & Email Finder — No Login",
        "description": "Find a company's employees on LinkedIn without login. Pass company names or URLs, filter by title & seniority, and get verified profiles — name, current title, location, profile URL — plus an optional email finder. Each match is confirmed against its public result, not a SERP guess.",
        "version": "0.0",
        "x-build-id": "YeTJezaca8diqppDC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~linkedin-company-employees-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-linkedin-company-employees-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~linkedin-company-employees-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-linkedin-company-employees-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~linkedin-company-employees-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-linkedin-company-employees-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "companies": {
                        "title": "Companies (names or LinkedIn URLs)",
                        "type": "array",
                        "description": "One company per line — a plain name (e.g. \"OpenAI\") or a LinkedIn company URL (e.g. https://www.linkedin.com/company/openai/). Names and URLs can be mixed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "targetTitles": {
                        "title": "Target titles (ICP)",
                        "type": "array",
                        "description": "Job titles to target, one per line (e.g. CEO, Head of Sales, Gerente General). Leave empty to use a built-in English/Spanish decision-maker set (CEO, CTO, Founder, Owner, Director, Presidente, Dueño…). For runs of more than 50 companies the built-in set is skipped unless you set titles here.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seniorityFilter": {
                        "title": "Seniority level",
                        "type": "array",
                        "description": "Optional seniority buckets to expand into titles. Combined with Target titles. Unknown values are ignored.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "owner",
                                "partner",
                                "cxo",
                                "vp",
                                "director",
                                "manager",
                                "senior",
                                "entry",
                                "training",
                                "unpaid"
                            ],
                            "enumTitles": [
                                "Owner",
                                "Partner",
                                "CxO (CEO/CTO/CFO…)",
                                "VP",
                                "Director",
                                "Manager",
                                "Senior",
                                "Entry",
                                "Training / Intern",
                                "Unpaid / Volunteer"
                            ]
                        },
                        "default": []
                    },
                    "location": {
                        "title": "Location filter",
                        "type": "string",
                        "description": "Optional location hint added to discovery (e.g. \"San Francisco\", \"United States\", \"Germany\"). Improves relevance; leave empty for all locations."
                    },
                    "maxItems": {
                        "title": "Max employees per company",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of employees to return per company. Keep this bounded to control cost and avoid over-broad results.",
                        "default": 50
                    },
                    "verifyProfiles": {
                        "title": "Verify profiles (confirm employer & title)",
                        "type": "boolean",
                        "description": "Recommended. Confirms each discovered profile from its own public web result — reads the current employer, title and location, cross-checks the employer against the target company, and sets a confidence of high / medium / low. This is what turns raw SERP guesses into confirmed current employees. No extra requests and no login.",
                        "default": true
                    },
                    "enrichEmails": {
                        "title": "Find contact email (experimental)",
                        "type": "boolean",
                        "description": "If enabled, finds one contact email per company (from its website or by name discovery) and adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.",
                        "default": false
                    },
                    "deepVerify": {
                        "title": "Deep verify (fetch each public profile page)",
                        "type": "boolean",
                        "description": "Advanced / best-effort. In addition to snippet verification, fetches each profile's public LinkedIn page to re-confirm employer and title. LinkedIn heavily gates these pages, so this is slow and often falls back to the snippet result — leave off unless you specifically need it.",
                        "default": false
                    },
                    "googlePages": {
                        "title": "Discovery pages per company × title",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many Google result pages (10 results each) to fetch per company and target title. More pages = more candidates but higher cost. Default 3, max 10.",
                        "default": 3
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum concurrent requests. Lower = gentler and steadier; higher = faster but more likely to hit rate limits.",
                        "default": 10
                    },
                    "startUrls": {
                        "title": "Start URLs (advanced — LinkedIn company URLs)",
                        "type": "array",
                        "description": "Optional. LinkedIn company URLs to include, in addition to (or instead of) Companies. Useful for request lists / Google Sheets sources.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "cookies": {
                        "title": "Cookies (optional — enables authoritative mode)",
                        "type": "array",
                        "description": "<p><b>Optional.</b> Leave empty for cookie-free discovery mode (no login). <b>Provide cookies</b> for authoritative LinkedIn-API mode (full company roster + richer data). Install <a rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg\">EditThisCookie</a>, log into LinkedIn, export cookies, and paste them here. The minimum required are <code>li_at</code> and <code>JSESSIONID</code>.</p>"
                    },
                    "sdoKey": {
                        "title": "scrape.do token (optional override)",
                        "type": "string",
                        "description": "Advanced. Bring-your-own scrape.do token used to fetch Google results and public profiles. Leave blank to use the built-in token."
                    },
                    "proxy": {
                        "title": "Proxy configuration (optional override)",
                        "type": "object",
                        "description": "Leave empty — the actor already routes traffic through its own residential proxy at no extra cost to you. Only set this to use your own proxies."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
