LinkedIn Company Employees Scraper - Staff List, No Login
Pricing
from $1.80 / 1,000 employee founds
LinkedIn Company Employees Scraper - Staff List, No Login
Find the employees of a company on LinkedIn. Give it a company URL or just the company name. Each person has full name, headline, job title, location and profile URL. LinkedIn hides its employee list from logged-out visitors, so this reads public profile pages. $1.80 per 1,000 employees.
Pricing
from $1.80 / 1,000 employee founds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
102
Total users
65
Monthly active users
20 hours ago
Last modified
Categories
Share
LinkedIn Company Employees Scraper: the people who work at a company, from public profiles only
Give it a company page URL or just the company name and get one row per person: full name, headline, job title, location and their profile link. No account, no cookies, no login.
Here is the thing to understand before you buy. LinkedIn hides a company's employee list from anyone who is not signed in, so there is no list to read. This works from public profile pages instead, which means you get the people whose profiles are publicly visible, not the org chart. For a large employer that is usually a few hundred rather than the tens of thousands the company page claims. If you need the complete roster, this is the wrong purchase, however cheap it is.
| Input | Company page URLs, or plain company names |
| Output | One row per person |
| Ceiling | 500 people per run, 20 companies |
| Account needed | None from you |
| Price | $1.80 per 1,000 employees, flat on every plan |
๐ข What LinkedIn Company Employees Scraper does
You can hand it https://www.linkedin.com/company/stripe or just Stripe. With a URL it reads the
company page first to get the real display name, so a slug like acme-holdings-ltd comes back as
the name people actually write.
Each person is judged on the public text of their own profile. matchStrength says which way it
went: employer means the text names this company as where they work, mention means the company
merely appears somewhere. Only employer rows come back unless you turn on Also keep people who
only mention the company, which adds consultants, partners, alumni and anyone else who names it.
That judgement is made on words. A headline reading "Shopify Engineer at Peloton" counts as Peloton, and a past-tense "ex-Stripe" never counts. Someone who left months ago and never updated their headline still does.
The job title and location filters run before anything is charged, so narrowing down costs you nothing.
๐ฅ What you give it
{"companies": ["https://www.linkedin.com/company/stripe"],"jobTitles": ["Software Engineer", "Engineering Manager"],"locations": ["London"],"resultsLimit": 25}
Everything here is optional, and the form arrives with starting values rather than schema defaults, so clearing a box is not the same as choosing what the form showed.
| Field | Form starts at | What it is |
|---|---|---|
companies | one Stripe URL | Up to 20 company page URLs or plain names, mixed freely. |
jobTitles | empty | Up to 10 words. Only people whose public profile text carries one of them are kept. |
locations | empty | Up to 10 places, same idea. |
searchQuery | empty | Free text added to the public search, like recruiting OR talent. Up to 300 characters. |
resultsLimit | 25 | The hard cap on charged rows for the whole run, across every company, up to 500. This is the number that decides your bill. |
includeMentions | off | Adds the people who only mention the company rather than working there. |
Leave Companies empty and you get one labelled sample row, so you can see the shape before committing a real run.
๐ค What you get back
A real row from a real run, with one internal field left out:
{"ok": true,"_sample": false,"charged": true,"companyName": "Stripe","companyUrl": "https://www.linkedin.com/company/stripe","fullName": "Patrick Collison","firstName": "Patrick","lastName": "Collison","headline": "Stripe CEO","currentTitle": "CEO","location": null,"profileUrl": "https://www.linkedin.com/in/patrickcollison","publicIdentifier": "patrickcollison","currentCompany": "Stripe","education": null,"matchStrength": "employer","source": "linkedin-public-profile","retrievedAt": "2026-09-21T01:45:18.534Z"}
| Field | What it is |
|---|---|
profileUrl | The canonical linkedin.com/in/<slug> link. Country hosts are collapsed, so the same person never appears twice as uk. and www.. |
publicIdentifier | The slug on its own, which is the stable key to de-duplicate against your CRM. |
headline | Their own headline text, or the lead of the public snippet when there is no headline. |
currentTitle | The title pulled out of the headline, and only when the employer in it is this company. null when it could not be read cleanly rather than a guess. |
matchStrength | employer or mention, as above. Worth keeping in your export: it is the difference between a colleague and a consultant. |
location, education | From the public snippet when it carries them, and null often enough that you should not build a filter on them downstream. |
companyUrl | null when you passed a plain name rather than a URL. |
๐งพ Reading the output
| Row | How to spot it | Billed |
|---|---|---|
| A real person | ok: true, charged: true | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true with an errorCode | no |
Filter on charged == true and you have your people. Treat that flag as what tells a real row apart
from a sample or a diagnostic, not as a receipt for what was billed.
Rows stream out as they are found, so a long run fills the dataset as it goes.
| Code | What it means |
|---|---|
COMPANY_NOT_FOUND | That company URL or name could not be resolved to a company at all. |
NO_RESULTS | The company resolved and nothing public was found for it. |
SKIPPED_AFTER_EMPTY | Three companies in a row came back empty, so the remaining ones were skipped instead of spending on them. |
TIME_BUDGET | The run ran out of time before reaching that company. |
SEARCH_UNAVAILABLE | Discovery could not run for that company on this run. Retry it. |
BAD_INPUT | The entry was not a usable company URL or name. |
UNEXPECTED_ERROR | Something we did not classify. Send us the run id. |
A diagnostic row carries company rather than companyName, so it reads as a nearly empty line in
the table view.
โถ๏ธ How to run it
- Open LinkedIn Company Employees Scraper and click Try for free.
- Put company page URLs or names into Companies, one per line.
- Set Maximum employees low while you are testing, since that is what you pay for.
- Add Job title filter and Location filter words if you only want part of the staff. Filtering costs nothing.
- Click Start, then download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
๐ฐ How much does it cost?
$1.80 per 1,000 employees. Flat on every Apify plan, no volume tiers.
Maximum employees is the number that decides your bill, and it applies to the whole run rather than to each company, so three companies and a limit of 25 gives you 25 people in total.
People removed by your title or location filters are not charged. Neither are mention-only people while Also keep people who only mention the company is off, nor diagnostic rows, nor the sample row. A person found under two of your companies is charged once.
๐ก What people use it for
- Building an account-based prospect list: pick the companies, filter to the titles you sell to.
- Recruiting: filter by title and city to see who does that job at the companies you hire against.
- Checking a list you have: diff
publicIdentifieragainst your CRM to see who left and who is new. - Partner research, with mentions on, which surfaces the people around a company rather than in it.
๐ง What it does not do
- It is not a staff directory. Only publicly visible profiles are reachable, and for a large employer that means a few hundred people, not the headcount on the company page.
- No contact details. No e-mail, no phone, no connection count, no skills, no full job history.
locationandeducationare oftennull, because the public snippet does not always carry them.currentTitleis read out of the headline, so a creative headline gives a rough title or none.- Someone who has left may still appear. The judgement is made on what their profile says today, and plenty of people do not update it.
resultsLimitis run-wide. Twenty companies and a limit of 50 does not give you 50 each.- In a run covering several companies, a person who was already seen and skipped for one company is not returned again for another, even when they would have qualified there.
- It reads what LinkedIn shows a signed-out visitor, so it can never see anything private.
๐งญ Which LinkedIn scraper do you need?
| If you want | Use |
|---|---|
| The people at a company | This one |
| People found by keyword, title or location, with no company in mind | LinkedIn Profile Search Scraper |
| Full profiles for URLs you already have | LinkedIn Profiles Scraper |
| The company page itself: size, industry, headquarters | LinkedIn Companies Scraper |
| Public posts found by keyword | LinkedIn Post Search Scraper |
โ Questions people ask
Do I need a LinkedIn account? No, and that is the point. Nothing here asks you to sign in or hand over cookies.
Why did I get 200 people from a company with 8,000 staff? Because only publicly visible profiles can be reached without signing in, and that is everyone's view, not ours in particular.
Can I get their e-mail addresses? No. Nothing on a public profile page carries one, and this does not guess or buy them.
What is the difference between employer and mention? employer means their public text
names this company as where they work. mention means it just appears somewhere on the profile.
Is scraping LinkedIn legal? This reads public pages only, never anything behind a login. Results contain personal data, which GDPR, CCPA and similar laws cover, so you need a lawful reason to collect it and to contact anyone. Apify's write-up on the legality of web scraping is a reasonable starting point, and we are not lawyers.
๐ If something breaks
Open the Issues tab on the actor page. Include the companies you used and the run id. The diagnostic rows in your dataset usually name the reason already.