LinkedIn Company Employees API | No Login, No Cookies avatar

LinkedIn Company Employees API | No Login, No Cookies

Pricing

from $0.01 / 1,000 employee founds

Go to Apify Store
LinkedIn Company Employees API | No Login, No Cookies

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

John

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

36 minutes ago

Last modified

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 toUse
List the people who work at a companyLinkedIn Company Employees API (this Actor)
Find people by name, job title, school or locationLinkedIn People Search API
Turn profile URLs into full structured profilesLinkedIn Profile API
Enrich the company: industry, size, headquarters, specialtiesLinkedIn Company API
See what the company is hiring forLinkedIn Jobs API
Read what the company and its people postLinkedIn 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: verified plus a matchReason that 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: foundBy is 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:

matchReasonMeaningverified
current-positionA current role on the profile links this company's LinkedIn pagetrue
current-companyThe profile's current employer links this company's pagetrue
company-nameNo link, but the current employer's name matches the company's closely. A weaker matchtrue
profile-unavailableThe public profile could not be opened, and the search result lists the company as the person's experience, so this is a search-level rownull
search-experienceNot 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 reachednull

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 titleKeywords and locations to get the slice you need, or raise maxSearchQueriesPerCompany.
  • 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

FieldTypeDefaultWhat it does
companiesarray, requiredLinkedIn company URLs or company names, up to 50 per run
titleKeywordsarrayemptyNarrow to these job titles. Each one is also its own search. Empty searches built-in role slices, more for larger companies
locationsarrayemptyReturn 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
maxResultsPerCompanyinteger100People to return per company, 1 to 1,000
verifyEmploymentbooleantrueOpen each profile and confirm a current role. Off returns a faster, search-level list
maxSearchQueriesPerCompanyinteger40Cap on search slices per company (1 to 100). More slices reach more of a large company
maxAgeDaysintegerper record typeServe 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.

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

  1. Open LinkedIn Company Employees API on Apify Store.
  2. Add one or more companies, as LinkedIn URLs or names.
  3. Optionally narrow with job titles and locations.
  4. Set maxResultsPerCompany, and keep verifyEmployment on for confirmed, full rows.
  5. Run it, then download the dataset or open the Employees view.

View on Apify Store

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.

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