LinkedIn Company Employees API | No Login, No Cookies
Pricing
from $0.01 / 1,000 employee founds
LinkedIn Company Employees API | No Login, No Cookies
LinkedIn Company Employees API: give a company name or LinkedIn URL and get the people who work there, with name, title, location and profile URL. Each person is checked against their public profile. No login, no cookies. Filter by job title and location.
Pricing
from $0.01 / 1,000 employee founds
Rating
0.0
(0)
Developer
John
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
36 minutes ago
Last modified
Categories
Share
LinkedIn Company Employees API
List the people who work at a company on LinkedIn, as clean JSON: name, job title, location and profile URL, with each person checked against their public profile to confirm they still work there. Give it company names or LinkedIn company URLs. No LinkedIn account, no login and no session cookie.
Built for the two jobs that need a list of who works where: prospecting (find the engineering leaders, the finance team or the founders at your target accounts) and recruiting (map a competitor's team before you start sourcing).
🧩 Part of the Alpha OSINT LinkedIn suite: no login, no cookies
Every Actor in the suite reads only what LinkedIn shows to a signed-out visitor, so none of them can get your LinkedIn account restricted. They chain together:
| You want to | Use |
|---|---|
| List the people who work at a company | LinkedIn Company Employees API (this Actor) |
| Find people by name, job title, school or location | LinkedIn People Search API |
| Turn profile URLs into full structured profiles | LinkedIn Profile API |
| Enrich the company: industry, size, headquarters, specialties | LinkedIn Company API |
| See what the company is hiring for | LinkedIn Jobs API |
| Read what the company and its people post | LinkedIn Posts API |
What the LinkedIn Company Employees API returns
One row per person, per company:
- Who they are: full name, headline, location, profile URL and profile slug.
- Their role: current job title and employer. For a verified person, the title of the role at the company you asked about.
- Whether they still work there:
verifiedplus amatchReasonthat says how it was decided (see below). - The full public profile, for verified people: about text, every position with dates, education, follower and connection counts, photo and LinkedIn member id.
- Where each person came from:
foundByis the exact public search that found them, so a list can be audited and reproduced.
Each run also writes a RUN_SUMMARY record with, per company, how many people were found and
verified, LinkedIn's own employee count for the company, and the coverage ratio between the two.
How verification works
Search results are a starting point, not proof: a person who left a company years ago still
mentions it on their profile. With verifyEmployment on (the default), the API opens each
person's public profile and looks for a current role at the company:
matchReason | Meaning | verified |
|---|---|---|
current-position | A current role on the profile links this company's LinkedIn page | true |
current-company | The profile's current employer links this company's page | true |
company-name | No link, but the current employer's name matches the company's closely. A weaker match | true |
profile-unavailable | The public profile could not be opened, and the search result lists the company as the person's experience, so this is a search-level row | null |
search-experience | Not opened, but the search result lists the company as the person's experience. Used with verifyEmployment off, and for the strongest leftovers when a company's open limit is reached | null |
Profiles are opened in order of evidence: people listed on the company page first, then people whose search result reads "Experience:
Some company names are also job titles or common phrases ("AI Engineer", say), and the search then
matches people who merely hold that title. Once 20 profiles have been read for a company and fewer
than 10% of them work there, the API stops opening profiles for that company, returns the verified
people plus the unopened people whose result lists the company as their experience, and records
stoppedReason: "low match rate". Use the company's LinkedIn URL and titleKeywords for such
names. A role that links a different company page with the same name (two companies called
"Atlas", say) never counts as a match.
Coverage: what to expect
This API finds people through public search results for site:linkedin.com/in pages, then checks
them against LinkedIn. A search returns only about ten people, so the number of searches scales
with the company's size on LinkedIn: about a dozen for a company of up to 500 people (the company name plus ten role slices), and about 30 slices (roles such as engineer, account executive or head of, plus office
cities) above that. Only people whose search result names the company are opened and checked. It can only find the people
search engines have indexed, so it will rarely return a company's full headcount:
- Smaller companies get the highest coverage. For a company with a few dozen people, most of the team is usually indexed.
- Large companies return a slice. For a company with tens of thousands of employees, expect
hundreds, not thousands. Narrow with
titleKeywordsandlocationsto get the slice you need, or raisemaxSearchQueriesPerCompany. - Every run reports its own coverage against the employee count LinkedIn shows on the
company page, in the run log and in
RUN_SUMMARY, so you never have to guess.
There are no LinkedIn-internal filters: seniority codes, function codes, years in role and
similar Sales Navigator filters are not available to a signed-out visitor. Use titleKeywords
for seniority and function instead ("director", "vp", "head of", "engineer").
Use cases
- Account-based prospecting: list the sales, marketing or engineering leaders at each of your 50 target accounts in one run, then hand the profile URLs to your outreach tool.
- Recruiting and talent mapping: see who is on a competitor's data team, in which cities, and where they worked before.
- Org charts and market maps: count how many engineers, designers or recruiters a company shows publicly, and how that changes month to month on a schedule.
- Investment research: check the founding team and senior hires of a startup before a call.
- CRM hygiene: confirm that the contacts you have at an account still work there.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
companies | array, required | LinkedIn company URLs or company names, up to 50 per run | |
titleKeywords | array | empty | Narrow to these job titles. Each one is also its own search. Empty searches built-in role slices, more for larger companies |
locations | array | empty | Return only people in these cities, regions or countries. Every search names the place, and a person whose public profile shows a different location is left out. Use the place name as LinkedIn writes it (Dublin, London, United States). Empty searches everywhere |
maxResultsPerCompany | integer | 100 | People to return per company, 1 to 1,000 |
verifyEmployment | boolean | true | Open each profile and confirm a current role. Off returns a faster, search-level list |
maxSearchQueriesPerCompany | integer | 40 | Cap on search slices per company (1 to 100). More slices reach more of a large company |
maxAgeDays | integer | per record type | Serve results fetched within this many days from the shared cache. 0 always fetches fresh |
Example input, the engineering and recruiting teams at two companies in Dublin:
{"companies": ["https://www.linkedin.com/company/stripe", "Intercom"],"titleKeywords": ["engineer", "recruiter"],"locations": ["Dublin"],"maxResultsPerCompany": 50,"verifyEmployment": true}
Example output
A verified row (about text and work history shortened). positions and a page-read currentTitle appear only on profiles whose experience section LinkedIn shows to signed-out visitors; for most people it hides job titles, and headline and currentTitle then come from the person's search result headline:
{"result_type": "employee","companyName": "Microsoft","companySlug": "microsoft","companyUrl": "https://www.linkedin.com/company/microsoft","profileUrl": "https://www.linkedin.com/in/satyanadella","slug": "satyanadella","fullName": "Satya Nadella","headline": "Chairman and CEO at Microsoft","location": "Redmond, Washington, United States","currentTitle": "Chairman and CEO","currentCompany": "Microsoft","verified": true,"matchReason": "current-position","foundBy": "site:linkedin.com/in \"Microsoft\" founder OR ceo","fromCache": false,"fetched_at": "2026-10-02T09:15:00Z","about": "As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person...","positions": [{"title": "Chairman and CEO","companyName": "Microsoft","companyUrl": "https://www.linkedin.com/company/microsoft","startDate": "Feb 2014","endDate": "Present","location": "Greater Seattle Area","isCurrent": true}],"education": [{"organizationName": "The University of Chicago Booth School of Business","organizationUrl": "https://www.linkedin.com/school/universityofchicagoboothschoolofbusiness/","startDate": "1994","endDate": "1996"}],"followers": 12196634,"connections": 500,"memberId": "19186432"}
A company that cannot be matched produces an error row. It is never charged as a person; like every stored row, it carries only the small dataset-item event:
{"result_type": "error","error_type": "CompanyNotFound","error_message": "No LinkedIn company page matches this name. Try the company's LinkedIn URL instead.","requestedCompany": "Example Company That Does Not Exist"}
Not available from public pages: email addresses, phone numbers, and anything LinkedIn shows only to signed-in members. Connection counts above 500 show as 500, LinkedIn's public cap.
Pricing: pay per person, never per search
Two pay-per-event charges, and you pay one or the other for a person, never both:
- Employee verified: the person's public profile confirms a current role at the company, with their full public profile in the row.
- Employee found: a person delivered from search alone, because checks were off, a per-company limit was reached, or the profile could not be opened. Only people whose search result lists the company as their experience. A person whose profile shows they work elsewhere is never returned or charged.
Each run also carries two small platform events: one Actor start, and one dataset item for every row stored, error rows included. Search requests and profile page reads are never charged by themselves, and people dropped as former employees produce no row and no charge. Current rates are on the Pricing tab of the Store page. Set a maximum cost per run and the API stops cleanly when it is reached.
Freshness and the shared cache
Results may be served from a shared cache when the same profile, company page or search was
fetched recently: up to 7 days for profiles, 30 days for company pages and 1 day for searches.
Cached rows carry fromCache: true and the original fetched_at, and are charged the same as
fresh ones. Set maxAgeDays to 0 to always fetch fresh, or to a smaller number to tighten the
window.
Other runs add to the shared cache all the time, so two cached runs of the same company a few minutes apart can differ by a few people. A person whose own headline says they have left ("Former ...", "Retired") is not returned, even when their profile still lists the company.
Use the LinkedIn Company Employees API from Claude with MCP
Add this API as a tool in Claude Code (free trial), Claude Cowork (free trial), or any other MCP client through the hosted Apify MCP server:
https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-company-employees-api
Here actors and docs are the standard tool categories, and the third entry is this API. Then
ask in plain language, for example "list the data engineers at Databricks in San Francisco and
tell me which of them worked at Google before".
Apify's MCP integration docs: https://docs.apify.com/platform/integrations/mcp
💸 Pay per run with crypto (x402)
The LinkedIn Company Employees API supports agentic payments via the x402 protocol. AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed: point your agent at the Apify MCP server and it can discover, pay for, and run this Actor autonomously. Read the Apify x402 announcement for details.
Integrations and API access
Start runs from the Apify API, the Python and JavaScript clients or the CLI, and send results on with Apify integrations to Google Sheets, HubSpot via Make or Zapier, n8n, Slack, Airtable and webhooks. Every run writes a dataset you can download as JSON, CSV or Excel. A monthly schedule on the same input is the simple way to watch a team grow or shrink.
How to get started
- Open LinkedIn Company Employees API on Apify Store.
- Add one or more companies, as LinkedIn URLs or names.
- Optionally narrow with job titles and locations.
- Set
maxResultsPerCompany, and keepverifyEmploymenton for confirmed, full rows. - Run it, then download the dataset or open the
Employeesview.
🔗 Related Tools
- LinkedIn Company API - firmographics for the companies you are mapping: size, industry, headquarters and follower count.
- LinkedIn Profile API - full public profiles in bulk when you already have the profile URLs.
- LinkedIn People Search API - find people by name, job title, school or location across every company.
- LinkedIn Jobs API - the roles a company is hiring for right now.
Frequently asked questions
How do I get a list of employees of a company from LinkedIn?
Add the company's LinkedIn URL or name to companies and run. The API searches for the
company's people, opens each public profile, and returns the ones whose profile shows a current
role there, with title, location and work history.
Do I need a LinkedIn account or cookie?
No. The API reads only LinkedIn's public pages, the same ones a signed-out visitor sees. It never asks for your account, password or session cookie, so it cannot get your account restricted.
Why did I get fewer people than the company's employee count?
The API can only find people whose public profiles appear in search results, which is a fraction
of a large company. Check coverage in RUN_SUMMARY. To reach more people at a big company, add
titleKeywords and locations: each one adds searches that surface people the plain company
search ranks too deep to reach.
What is the difference between verified and found?
A verified person's public profile shows a current role at the company. A found person comes from search results without that confirmation, either because checks were off or because their profile could not be opened, and only when the search result lists the company as their experience. People whose profile shows they have moved on are never returned and never charged.
Can I filter by seniority or department like Sales Navigator?
Not with LinkedIn's internal filters, which are not public. Use titleKeywords instead: words
like "director", "vp", "head of", "engineer" or "recruiter" narrow the list and add searches
for those roles.
Does it return email addresses or phone numbers?
No. Contact details are not on LinkedIn's public pages, and this API returns only public data.
What does a company name do differently from a URL?
A URL is exact. A name is matched to its LinkedIn company page through a public search and a
similarity score that also weighs follower counts, which keeps "Anthropic" from matching a
same-named fund. If a name cannot be matched with confidence you get a CompanyNotFound error
row, with no person charge, and can retry with the URL.
Can I run it on a schedule?
Yes. Save the input as a task and schedule it monthly. Compare runs by slug to see who joined
and who left.
🌐 About Alpha OSINT
This Actor is part of Alpha OSINT, toolset of financial and operations data sources and APIs. For support or requests for this actor, please start a ticket directly on our support page.
Last Updated: 2026.10.02