LinkedIn Company Employees Scraper With Decision Makers
Pricing
from $25.00 / 1,000 short profile extracteds
LinkedIn Company Employees Scraper With Decision Makers
Scrape all employees of any LinkedIn company with names, job titles, locations and profile URLs, plus decision maker flags, seniority bands and departments. You pay only for rows tied to the company you asked for. Free monitoring tracks new hires, departures and title changes. No login, no cookies.
Pricing
from $25.00 / 1,000 short profile extracteds
Rating
1.0
(1)
Developer
George Kioko
Maintained by CommunityActor stats
10
Bookmarked
2K
Total users
102
Monthly active users
a day ago
Last modified
Categories
Share
LinkedIn Company Employees Scraper With Decision Maker Intel
No login. No cookies. No account-ban risk. Discovery runs on Google SERP, verification on anonymous residential requests. This actor never touches a LinkedIn account. You pay only for rows tied to the company you asked for. Rows we cannot tie to it are delivered free, and the monitoring diff is never charged.
LinkedIn Company Employees Scraper is an Apify Actor that finds the employees of any LinkedIn company and classifies every person as a decision maker or not, with a seniority band and department. Discovery runs on Google SERP. Current-employer verification is off on ordinary paid runs. A start event is charged when the run begins. Profile events are charged only for rows that clear the company-match bar. Turn on free monitoring and it becomes a hires, departures and title-change tracker that also alerts you when a new decision maker joins a target account.
Every billed row ships with three classification fields at no extra cost, shown here with examples and why each matters.
| Field | Example | Why it matters |
|---|---|---|
isDecisionMaker | true | Owners, founders, C-level, VPs and directors flagged automatically |
seniorityBand | vp, cxo, director, manager | Consistent taxonomy, matches the seniorityFilter vocabulary |
department | sales, engineering, finance, hr | Route leads to the right team without reading headlines |
Set decisionMakersOnly: true and non-decision-makers are skipped before any charge happens, so your budget buys only the buying committee.
Pricing
| Event | Price | You pay when |
|---|---|---|
| Actor start | $0.05 | Once per run |
| Short profile extracted | $0.025 | Per company-matched profile row |
$25 per 1,000 company-matched short profiles, plus $0.05 per run. Classification (isDecisionMaker, seniorityBand and department) is included in that price and never billed separately.
A row is billed only when it carries evidence that the person belongs to the company you asked for. There are two evidence tiers and they cost the same.
| Tier | confidence | source | What was checked | Billed |
|---|---|---|---|---|
| Live profile | high | linkedin-profile-verified | The public LinkedIn profile lists your company as the current employer | Yes |
| Google index | medium | google-serp-company-matched | The person's own indexed LinkedIn headline names your company, not checked against the live profile | Yes |
| Unmatched | low | google-serp-unverified | Google returned the person near your company but nothing ties them to it | No, delivered free |
Monitoring diff rows are never billed. The actor checks the active price at runtime and never spends residential proxy it cannot cover. If live verification cannot run, the run continues on the Google-index tier instead of failing.
Track hires, departures and new decision makers (free monitoring)
Turn on compareWithPreviousRun and every scheduled run adds a free company-diff-summary row per company. Since v2.3 the diff also reports new decision makers, so a new VP joining a target account surfaces as its own signal, not just another row in a list.
{"recordType": "company-diff-summary","company": "apify-technologies","newHires": [{ "fullName": "Jane Doe", "title": "VP of Sales", "isDecisionMaker": true, "seniorityBand": "vp" }],"newDecisionMakers": [{ "fullName": "Jane Doe", "title": "VP of Sales", "isDecisionMaker": true, "seniorityBand": "vp" }],"newDecisionMakersCount": 1,"departures": [],"titleChanges": [{ "fullName": "John Roe", "previousTitle": "AE", "title": "Head of Sales" }]}
The weekly-tracker recipe
- Set your
companieslist and turn on Monitor changes vs previous run. - Optionally turn on Decision Makers Only to spend only on the buying committee.
- Set
maxEmployeesabove the company's headcount. A capped run reports new hires only and never guesses departures from a partial scan. - Save the run as a task and put it on a weekly Apify schedule.
Used by sales teams (a new VP means a buying window opening), recruiters (departures mean placement leads) and competitor watchers (team growth and churn by department). Snapshots live in a named key-value store in your account (linkedin-employees-snapshots) and diff rows are never charged.
How it works
graph LRA[Company URL or Name] --> B[Google SERP Discovery]B --> C[Price-Aware LinkedIn Verification]C --> D[Decision Maker Classification]D --> E[Structured JSON Output]E --> F[Your CRM / Pipeline]
You provide a company LinkedIn URL or name. The actor discovers candidate employees through Google search, then checks current employment against public LinkedIn profiles when pricing safely covers residential proxy cost. When that check is unavailable or uneconomical, the run continues on the Google index tier. Rows whose own indexed headline names your company are tagged source: "google-serp-company-matched", confidence: "medium" and billed. Rows with nothing tying them to your company are tagged source: "google-serp-unverified", confidence: "low" and delivered free. Every billed person is classified by rank and function.
Title targeting is built in. A default English/Spanish decision-maker set fans out for runs of 50 companies or fewer, or pass your own targetTitles for role-specific ICPs.
What is NOT returned
- Emails or phone numbers. Profile rows carry name, headline, title match, location and profile URL.
- Full work history or education. This ships short profiles.
- Guessed departures on capped runs. If
maxEmployeestruncated the scan, the diff reports new hires only rather than inventing departures. - Private profile data. Everything comes from public search results and public profiles.
For AI agents and developers
Use from Claude, ChatGPT and any MCP agent
Add this actor to any MCP client (Claude, Cursor, ChatGPT) through the Apify MCP server below.
https://mcp.apify.com/?tools=george.the.developer/linkedin-company-employees-scraper
Quick integration (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('george.the.developer/linkedin-company-employees-scraper').call({companies: ['https://www.linkedin.com/company/openai'],maxEmployees: 25,decisionMakersOnly: true,compareWithPreviousRun: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();// items include isDecisionMaker, seniorityBand and department on every profile row
Quick integration (Python)
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('george.the.developer/linkedin-company-employees-scraper').call(run_input={'companies': ['https://www.linkedin.com/company/openai'],'maxEmployees': 25,'decisionMakersOnly': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(f"{item.get('fullName')} - {item.get('title')} - DM={item.get('isDecisionMaker')}")
Direct HTTP
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~linkedin-company-employees-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["https://www.linkedin.com/company/openai"], "maxEmployees": 25}'
n8n / synchronous workflow notes
n8n waits for the Apify run to finish before returning data. This actor uses Apify's ACTOR_TIMEOUT_AT runtime metadata to stop new work before the hard timeout, persist RUN_SUMMARY, and finish successfully with partial results, so n8n gets data instead of a timeout error. Keep batches small and run latest unless you intentionally pin a historical build.
Input
{"companies": ["https://www.linkedin.com/company/openai"],"targetTitles": ["Director", "Gerente"],"searchQuery": "supply chain","location": "San Francisco","maxEmployees": 25,"decisionMakersOnly": false,"compareWithPreviousRun": true}
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
companies | Array | Yes | - | LinkedIn company URLs or plain company names |
targetTitles | Array | No | EN/ES decision-maker set for up to 50 companies | ICP titles for title-specific SERP expansion and verified title matching |
searchQuery | String | No | "" | Extra keyword phrase for the discovery query |
location | String | No | "" | Location filter |
maxEmployees | Integer | No | 25 | Max employees per company (1 to 100) |
decisionMakersOnly | Boolean | No | false | Emit and charge only owners, founders, C-level, VPs and directors |
seniorityFilter | Array | No | [] | owner, partner, cxo, vp, director, manager, senior, entry, training, unpaid. Unknown values are dropped with a warning |
compareWithPreviousRun | Boolean | No | false | Free monitoring. Adds a company-diff-summary row per company vs your previous run |
maxConcurrency | Integer | No | 3 | Concurrent requests (1 to 10) |
proxyConfiguration | Object | No | GOOGLE_SERP | Phase A discovery proxy. Country routing honored; alternate groups and custom URLs ignored |
verificationProxyConfiguration | Object | No | RESIDENTIAL | Phase B verification proxy. Used only when active pricing safely covers residential cost |
Output
{"publicIdentifier": "thegdb","profileUrl": "https://www.linkedin.com/in/thegdb/","fullName": "Greg Brockman","headline": "OpenAI","matchedTitles": ["President"],"titleMatchType": "partial","isDecisionMaker": true,"seniorityBand": "cxo","department": "executive","location": "San Francisco","company": "openai","scrapedAt": "2026-03-22T09:45:09.102Z"}
| Field | Type | Description |
|---|---|---|
publicIdentifier | string | LinkedIn profile slug |
profileUrl | string | Full LinkedIn profile URL |
fullName | string | Employee full name |
headline | string | Current role / company |
matchedTitles | string[] | Target titles that matched the headline or job title |
titleMatchType | string | exact, partial, or none (accent-insensitive matching) |
isDecisionMaker | boolean | True for owner, founder, partner, C-level, VP and director titles |
seniorityBand | string | owner, partner, cxo, vp, director, manager, senior, entry, training, unpaid, unknown |
department | string | executive, engineering, data, product, design, sales, marketing, finance, hr, legal, support, operations, other |
location | string | Geographic location |
company | string | Normalized company identifier |
scrapedAt | string | ISO 8601 timestamp |
Use cases
- Sales teams. Decision makers at target accounts filtered by title and seniority, and a new decision maker alert in the weekly diff.
- Recruiters. Map talent at competitors. Departures in the diff mean placement leads.
- LATAM agencies. Mix English and Spanish ICP titles such as
Director,Gerente General,PresidenteandDueño. - Investors. Team assessment and headcount tracking for due diligence.
- AI agents. Structured, schema-stable data source for autonomous prospecting workflows.
FAQ
Do I need a LinkedIn account?
No. Discovery uses Google SERP and verification uses warmed anonymous LinkedIn requests. No login, no cookies, no account risk.
What counts as a decision maker?
Owners, founders, partners, C-level (CEO, CTO, CFO, COO, CMO and other chief officers), VPs and directors, including Head of roles classified into the director band. Every row shows the exact band used.
Does Decision Makers Only save money?
Yes. Profiles that classify as non-decision-makers are skipped before charging, so with decisionMakersOnly: true you pay $0.025 only for buying-committee contacts. Skipped profiles appear in RUN_SUMMARY as skippedNotDecisionMaker.
What happens if verification can't run?
The run continues instead of failing. Rows whose own indexed headline names your company are billed at the same $0.025 and tagged confidence: "medium". Rows with nothing tying them to your company are tagged confidence: "low" and charged: false, and cost you nothing.
How does the free monitoring work?
Set compareWithPreviousRun: true. Each run stores a snapshot in a key-value store in your own account and adds a free company-diff-summary row per company showing new hires, departures, title changes and, since v2.3, new decision makers since your last run. Weekly schedules work best.
How does targetTitles work?
Omit it and a built-in English/Spanish decision-maker set applies for runs of 50 companies or fewer. Pass your own list for role-specific ICPs. matchedTitles and titleMatchType on every row tell you how strongly each profile matched.
Can I scrape multiple companies?
Yes. Pass an array of URLs or names. Runs over about 24 companies on the default timeout finish gracefully with partial coverage and tell you the suggested batch size.
What if a run is interrupted?
Built-in state tracking skips already-processed profiles on rerun, and the soft-deadline handler persists results before the hard timeout.
Can AI agents use this?
Yes. Structured JSON output, stable schema, API-first, and callable as an MCP tool via https://mcp.apify.com/?tools=george.the.developer/linkedin-company-employees-scraper.
Related Actors
- LinkedIn Decision Makers Finder at https://apify.com/george.the.developer/linkedin-decision-makers-finder returns only the buying committee, owners, founders, C level, VPs and directors, with seniority and department filters applied before the charge and a start fee close to zero.
- LinkedIn Company by Domain at https://apify.com/george.the.developer/linkedin-company-by-domain turns a website domain into the LinkedIn company URL this Actor takes as input.
Support
Questions? Open an issue on the actor's Issues tab. It is checked regularly.