LinkedIn Company Employees Scraper ✅ NO COOKIES avatar

LinkedIn Company Employees Scraper ✅ NO COOKIES

Pricing

from $6.00 / 1,000 employee founds

Go to Apify Store
LinkedIn Company Employees Scraper ✅ NO COOKIES

LinkedIn Company Employees Scraper ✅ NO COOKIES

Get a company's employees as rich profiles from a LinkedIn URL or domain: work history, education, skills, certifications, badges, plus company firmographics. Filter by title, seniority, location and 557 specific job functions, not just 35 broad departments. Optional verified email. Pay per result.

Pricing

from $6.00 / 1,000 employee founds

Rating

5.0

(3)

Developer

Atomus APIs

Atomus APIs

Maintained by Community

Actor stats

4

Bookmarked

30

Total users

18

Monthly active users

12 hours ago

Last modified

Share

LinkedIn Company Employees Scraper

LINKEDIN COMPANY EMPLOYEES SCRAPER  •  LINKEDIN EMPLOYEES API

Find the right person
inside any company.


One company in, its people out — each as a full profile: current title, seniority, location, complete work history, education, skills and the company's own firmographics. Narrow by title, seniority, location, keyword, and a two-level taxonomy of 35 departments and 557 job functions. Optional verified work email per person. No LinkedIn account, no login, no cookies, no ban risk.

PAY ONLY FOR EMPLOYEES RETURNED  557 JOB-FUNCTION FILTERS 

Copy to your AI assistant

Paste this into ChatGPT, Claude, Cursor, or any LLM to start using this Actor right away.

atomus/linkedin-company-employees is an Apify Actor that returns the employees of one company as structured JSON: full name, headline, current title, seniority, location, LinkedIn URL, and a raw profile object with complete work history, education, skills, certifications, badges and the company's own firmographics. Use it whenever someone needs to find the people inside a specific company without cookies, a login, or a browser - account-based prospecting, recruiting sourcing, or mapping a buying committee. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/atomus~linkedin-company-employees/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"company":"https://www.linkedin.com/company/stripe","title":["Software Engineer"],"seniority":["senior","manager"],"country":["Ireland"],"maxResults":100}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("atomus/linkedin-company-employees").call(run_input={"company":"stripe.com","maxResults":50}) then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: company (string, required - LinkedIn company URL or a website domain), maxResults (int, default 100, this is the spend cap), title (string[]), titleMatchMode ("SMART"|"WORD"|"STRICT"), seniority (string[] of c_suite, vp, director, manager, senior, mid-level, entry, intern, owner, founder, head, partner), department (string[], 35 broad departments plus 4 legacy aliases), jobFunction (string[], 557 narrow functions), the three location levels country (208 options — the 202 countries the data source is known to accept, plus the six continents) / state (513 states and regions) / city (free text, combined with the two above so "Austin" + "Texas" + "United States" searches Austin, Texas — spell places out, "Austin, TX" matches nobody), keyword (string[]), findEmail (bool, paid plans only, extra charge per email found). Use department OR jobFunction, never both: they combine with OR upstream, so filling both either changes nothing or widens the search and the bill. Each row has status ("success" | "not_found" | "error"); you are charged per employee returned and separately per email actually found. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/atomus~linkedin-company-employees/build/default

LinkedIn MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Atomus and it can read LinkedIn on its own: a company's employees, its firmographics, profiles, posts, reactions and comments. No glue code, no scraping logic in your prompts.

{
"mcpServers": {
"atomus": {
"url": "https://mcp.apify.com?tools=atomus/linkedin-company-employees,atomus/linkedin-company-scraper,atomus/linkedin-profile-scraper,atomus/linkedin-posts-scraper-pro,atomus/linkedin-reactions-scraper-pro,atomus/linkedin-comments-scraper-pro,atomus/leads-finder",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Then ask, in plain language:

"Map the data team at these eight companies — anyone director level or above — and tell me which of them posted on LinkedIn in the last month."

That one sentence uses two Actors in a row. Pinning the tools= list is what keeps your assistant on these Actors instead of reaching for whatever scraper it finds first.


How to scrape a company's employees

Everyone the filters allow

{ "company": "https://www.linkedin.com/company/stripe", "maxResults": 100 }

One row per employee, full profile in each. maxResults is the hard cap and therefore the spend cap — the run stops at it or when matches run out.

A specific role, in a specific place

{
"company": "https://www.linkedin.com/company/stripe",
"title": ["Software Engineer"],
"titleMatchMode": "SMART",
"country": ["Ireland"],
"maxResults": 50
}

SMART matching is fuzzy and catches "Sr. Software Engineer" and "Software Engineer II". Use WORD for whole-word matching, STRICT when only the exact title will do.

The buying committee, by seniority

{
"company": "stripe.com",
"seniority": ["c_suite", "vp", "director"],
"department": ["engineering_technical"],
"maxResults": 40
}

A domain also matches subsidiaries, which is what you want for a group; the LinkedIn URL is the precise option when you want exactly one entity.

A niche function, not a whole department

{
"company": "https://www.linkedin.com/company/stripe",
"jobFunction": ["revenue_operations"],
"maxResults": 25
}

jobFunction is the narrow level of the same taxonomy: revenue_operations (86,195 people across the database) instead of all of sales (28,449,940). Use department or jobFunction, never both — they combine with OR upstream, so filling both either changes nothing (a function inside the department you already picked) or quietly widens your search and your bill (a function from a different department gets added).

With a verified work email

{
"company": "https://www.linkedin.com/company/stripe",
"title": ["Account Executive"],
"findEmail": true,
"maxResults": 25
}

findEmail adds a real-time verified work email per employee, billed as a separate event only when an email is actually found. It needs a paid Apify plan: on a free plan the add-on is skipped and never charged, and the run still returns every employee.

Large email runs: set the timeout, or Resurrect

Emails are verified in real time, so a run with findEmail on is much slower than one without it. Plan on about 1 hour of run time per 5,000 employees with emails, and set the run timeout to match before you start (Run options, Timeout; the default is 1 hour). Without the add-on, 10,000 employees take a few minutes.

If a run reaches its timeout first, nothing is lost:

  1. The run ends SUCCEEDED with every employee found so far, each charged once.
  2. The last row of the dataset is an error row with error_kind: "run_timeout_reached" and a reason that states how many employees were delivered, how many remain, and what to do. The run's status message says the same.
  3. Open the run in the Apify console, raise the timeout under Run options, and click Resurrect. The run continues exactly where it stopped: employees already delivered are not fetched or charged again, and email lookups that were already paid for are collected rather than repeated.

You can Resurrect as many times as needed. A run that would need more than a few hours is easier to split into two runs with different filters (for example by seniority or by country).

Do not sit and wait. Emails are verified in real time upstream, so a large run is slow by nature and there is nothing to watch. Set the timeout, start the run, and let Apify tell you when it is done:

  • Webhook: on the actor page, open Integrations and add a webhook for the event Run succeeded (add Run timed out too if you want to be told to Resurrect). Apify calls your URL with the run id; fetch the dataset from there. From the API, pass the same thing as the webhooks parameter when you start the run.
  • No webhook: the run keeps working after you close the tab. Come back to the run page, or call GET /v2/actor-runs/{runId}/dataset/items, whenever you like.

Do not use the run-sync endpoints for runs with emails: they are capped at 5 minutes by Apify and will cut the connection while the run continues.


Input

ParameterTypeRequiredDefaultDescription
companystring✅ Yes(none)LinkedIn company URL (https://www.linkedin.com/company/<slug>) or a website domain (example.com). The URL is precise; a domain also matches subsidiaries.
maxResultsintegerNo100Hard cap on employees returned — your spend cap.
titlestring[]No(all)Match the employee's current title.
titleMatchModestringNoSMARTSMART (fuzzy), WORD (whole words), STRICT (exact).
senioritystring[]No(all)c_suite, vp, director, manager, senior, mid-level, entry, intern, owner, founder, head, partner.
departmentstring[]No(all)35 broad departments, e.g. sales, marketing, engineering_technical, medical_health. Four legacy aliases stay selectable and are labelled as such in the form.
jobFunctionstring[]No(all)557 narrow functions, e.g. revenue_operations, account_based_marketing, clinical_trials, sales_engineering.
countrystring[]No(all)Dropdown. The 202 countries this data source is known to accept, with the six continents at the top: "United States", "Ireland", "Europe".
statestring[]No(all)Dropdown of 513 states, provinces and regions: "California", "England", "Ontario". Combined with the country.
citystring[]No(all)Free text, combined with the country and state — "Austin" with state "Texas" searches austin, texas. Spell it out: measured live, Austin, TX matches 0 people and Austin, Texas matches 23,273.
locationstring[]No(all)Deprecated, kept so runs saved before the three fields above still work. An abbreviation typed here is spelled out before being sent.
keywordstring[]No(none)Free text matched in the headline, summary and skills: "kubernetes", "payments".
findEmailbooleanNofalse⚠️ Extra charge, paid plans only. Verified work email per employee, billed only when found.

department and jobFunction are the same filter at two levels of detail. Pick one. Measured live: sales matches 28,449,940 people, and sales + revenue_operations also matches 28,449,940 — because the function already sits inside the department. A function from a different department gets added instead, widening the result and the bill rather than narrowing it. Want a whole department? Use department. Want a niche? Use jobFunction and leave department empty.


What data does the LinkedIn Company Employees Scraper return?

One row per employee, each carrying a status (success | not_found | error). Flat fields cover what most people filter on; raw.profile carries everything else.

GroupFields
Identityfull_name · headline · title (current) · seniority · location · linkedin_url
Companycompany_name, plus the company's full firmographic block inside raw.profile (industry, headcount, founding year, funding, tech stack, HQ)
Email (opt-in)email · email_status — present only when findEmail is on and an email was found
Full profileraw.profile — complete work history, education, skills, certifications, LinkedIn badges and follower counts
Freshnesslast_updated — when the upstream source refreshed this person

Example row

{
"status": "success",
"full_name": "Leonardo Specht",
"headline": "SWE @ Stripe | Ex Amazon, Meta",
"title": "Software Engineer",
"company_name": "Stripe",
"location": "Dublin, County Dublin, Ireland, Europe",
"seniority": "senior",
"linkedin_url": "https://www.linkedin.com/in/leospecht",
"last_updated": "2026-07-20",
"email": "lspecht@stripe.com",
"email_status": "VALID",
"raw": {
"profile": { "...": "work history, education, skills, certifications, badges, and full company firmographics" }
}
}

status: "not_found" means the filters matched nobody, and it is free. status: "error" carries a plain-language reason, also free.

Where the data comes from

The Actor queries a continuously refreshed database of enriched professional profiles rather than crawling LinkedIn itself — that is why there are no cookies, no account and no ban risk. Because it filters on the employee's current title and company, you get the people who work there now. last_updated on every row tells you how recent that record is.


How much does it cost to scrape a company's employees?

$0.006 per employee returned ($6.00 per 1,000). Pay-per-event: no matches, no charge.

Employees returnedCost
25$0.15
100$0.60
1,000$6.00

findEmail adds $0.006 per email actually found, on top of the per-employee charge. An employee with no verifiable email costs nothing extra. The add-on needs a paid Apify plan; on a free plan it is skipped and never charged, and the run still returns every employee.

Free: not_found rows, error rows, and Apify platform compute.

maxResults is a hard cap, so the worst case for a run is maxResults × $0.006 (plus emails, if you asked for them).

Free plan: 10 employees per calendar month, so you can inspect every field before paying. The counter resets on the 1st.


What do people use the LinkedIn Company Employees Scraper for?

  • Account-based prospecting: map the buying committee at a target account before the first touch.
  • Recruiting and sourcing: find every engineer at a competitor with the skills you hire for.
  • Sales territory mapping: see how many people in a role a target account really has, not the guess on their careers page.
  • Competitive intelligence: watch how a competitor's headcount is distributed across functions.
  • Partner and channel research: find the right function inside a partner org instead of emailing info@.
  • Market research: measure how a whole segment staffs a given department.
  • CRM enrichment: add named contacts to accounts you already have, with verified work emails.
  • AI agent context: hand an agent a company's org map and let it pick who to reach.

This LinkedIn Company Employees ScraperCookie-based scrapersOfficial LinkedIn API
LinkedIn account / cookiesNot neededYour li_at session cookie requiredOAuth app + LinkedIn approval
Account / ban riskNone (no account used)High — sessions get flaggedNone
Employee search by filtersTitle, seniority, location, 35 departments, 557 job functions, keywordsVaries, often manualNo public employee-list endpoint
Full profile per employeeWork history, education, skills, certifications, company firmographicsUsually a few fieldsMinimal, permissioned
Verified work emailOptional add-on, billed only when foundRareNo
PricingPay per employee returned ($0.006)Monthly seat / creditsEnterprise contract

🏆 Top LinkedIn Scrapers

Profile Scraper
Any profile URL to 72 structured fields, no cookies
Posts Scraper
Text, media and engagement from any profile or company
Post Search
Find posts about any topic, by keyword, across all of LinkedIn
Reactions Scraper
Every person who reacted to a post, with their headline
Comments Scraper
Comments and nested replies, with reaction counts
Company Scraper
Headcount, industry, HQ, tech stack and IT spend of a company
Company Employees Scraper  YOU ARE HERE 
---

FAQ

Is there an official LinkedIn API to list a company's employees?

No. LinkedIn's official APIs expose no public "list this company's employees" endpoint, which is exactly why teams reach for a scraper. This Actor returns that list without your own LinkedIn account.

Do I need a LinkedIn account or cookies?

No. There is no login, no session and no cookie, so there is no account-ban risk. The Actor queries an enriched profile database rather than crawling LinkedIn.

Can I use this from ChatGPT or Claude?

Yes, two ways. Paste the "Copy to your AI assistant" block above into any LLM and it will write the call for you. Or connect the LinkedIn MCP server config above, and every Atomus Actor becomes a native tool your assistant can call on its own, including chaining several in one request.

Should I use Department or Job function?

One or the other, never both. They are two levels of the same taxonomy and combine with OR upstream: filling both either changes nothing or widens your results. Department for a whole team, Job function for a niche.

How much does it cost?

$0.006 per employee returned ($6 per 1,000). findEmail adds $0.006 for each email actually found. Runs that match nobody, and errors, are free. Free Apify plans include 10 employees per month.

My run with emails stopped before reaching Max results. Did I lose anything?

No. It reached its run timeout, delivered everything found so far (charged once), and left a run_timeout_reached row at the end of the dataset with the exact numbers. Open the run, raise the timeout under Run options, and click Resurrect: it continues where it stopped and nothing is charged twice. See "Large email runs" above for the timing rule of thumb.

How do I cap what a run can spend?

maxResults. It is a hard stop on how many employees come back, so the ceiling is maxResults × $0.006 plus any emails found.

Can I search by domain instead of the LinkedIn URL?

Yes. A domain (stripe.com) also matches subsidiaries, which is useful for a group; the LinkedIn company URL is the precise option when you want exactly one entity.

How fresh is the data?

Every row carries last_updated, the date the upstream source refreshed that person. Filtering is on the current title and company, so results are people who work there now.

Are the work emails verified?

Yes. findEmail runs a real-time verification and returns email_status alongside the address. Employees whose email cannot be verified come back without one, and cost nothing extra. On a free Apify plan the add-on is skipped rather than charged, and the employees still come back.

This Actor returns publicly available professional data through a third-party database and does not use your LinkedIn account. You are responsible for using the output in line with applicable laws (GDPR/CCPA), LinkedIn's terms, and your own compliance requirements. It is an independent tool, not affiliated with LinkedIn.

How do I get firmographics for the company itself?

Use the LinkedIn Company Scraper, which takes the same company URLs and returns headcount, funding rounds, tech stack and every office.


All Atomus scrapers

2.4M+ RESULTS DELIVERED

LinkedInProfile · Posts · Post search · Reactions · Comments · Company · Employees
Lead genLeads Finder
Google MapsPlaces & local businesses
TikTokVideos · Comments
X (Twitter)Tweets & profiles
RedNote 小红书Notes, users & comments
Douyin 抖音Profiles, videos & comments
Weibo 微博Posts & profiles
Bilibili 哔哩哔哩Videos & creators
---

Support

Hey, I'm Chico, founder of Atomus. I built this Actor and I answer the messages about it. Something broke? A field you need isn't there? Not sure it fits what you're doing? Send me a message, most answers come the same day.

💬  DM me on LinkedIn    or hello@dendelabs.com
---

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn® is a registered trademark of LinkedIn Corporation. All trademarks are property of their respective owners.

Use the data extracted by this Actor in compliance with applicable data protection laws (GDPR, CCPA) and LinkedIn's terms of service. Do not use it for spam, harassment, or unlawful purposes.