LinkedIn Company Employees Scraper - Staff List, No Login avatar

LinkedIn Company Employees Scraper - Staff List, No Login

Pricing

from $1.80 / 1,000 employee founds

Go to Apify Store
LinkedIn Company Employees Scraper - Staff List, No Login

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

Dami's Studio

Maintained by Community

Actor stats

1

Bookmarked

102

Total users

65

Monthly active users

20 hours ago

Last modified

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.

InputCompany page URLs, or plain company names
OutputOne row per person
Ceiling500 people per run, 20 companies
Account neededNone 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.

FieldForm starts atWhat it is
companiesone Stripe URLUp to 20 company page URLs or plain names, mixed freely.
jobTitlesemptyUp to 10 words. Only people whose public profile text carries one of them are kept.
locationsemptyUp to 10 places, same idea.
searchQueryemptyFree text added to the public search, like recruiting OR talent. Up to 300 characters.
resultsLimit25The hard cap on charged rows for the whole run, across every company, up to 500. This is the number that decides your bill.
includeMentionsoffAdds 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"
}
FieldWhat it is
profileUrlThe canonical linkedin.com/in/<slug> link. Country hosts are collapsed, so the same person never appears twice as uk. and www..
publicIdentifierThe slug on its own, which is the stable key to de-duplicate against your CRM.
headlineTheir own headline text, or the lead of the public snippet when there is no headline.
currentTitleThe 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.
matchStrengthemployer or mention, as above. Worth keeping in your export: it is the difference between a colleague and a consultant.
location, educationFrom the public snippet when it carries them, and null often enough that you should not build a filter on them downstream.
companyUrlnull when you passed a plain name rather than a URL.

๐Ÿงพ Reading the output

RowHow to spot itBilled
A real personok: true, charged: trueyes
The sample row_sample: trueno
A diagnostic_diagnostic: true with an errorCodeno

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.

CodeWhat it means
COMPANY_NOT_FOUNDThat company URL or name could not be resolved to a company at all.
NO_RESULTSThe company resolved and nothing public was found for it.
SKIPPED_AFTER_EMPTYThree companies in a row came back empty, so the remaining ones were skipped instead of spending on them.
TIME_BUDGETThe run ran out of time before reaching that company.
SEARCH_UNAVAILABLEDiscovery could not run for that company on this run. Retry it.
BAD_INPUTThe entry was not a usable company URL or name.
UNEXPECTED_ERRORSomething 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

  1. Open LinkedIn Company Employees Scraper and click Try for free.
  2. Put company page URLs or names into Companies, one per line.
  3. Set Maximum employees low while you are testing, since that is what you pay for.
  4. Add Job title filter and Location filter words if you only want part of the staff. Filtering costs nothing.
  5. 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 publicIdentifier against 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.
  • location and education are often null, because the public snippet does not always carry them.
  • currentTitle is 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.
  • resultsLimit is 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 wantUse
The people at a companyThis one
People found by keyword, title or location, with no company in mindLinkedIn Profile Search Scraper
Full profiles for URLs you already haveLinkedIn Profiles Scraper
The company page itself: size, industry, headquartersLinkedIn Companies Scraper
Public posts found by keywordLinkedIn 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.