LinkedIn Employees Scraper | Staff by Title, No Login avatar

LinkedIn Employees Scraper | Staff by Title, No Login

Pricing

from $4.00 / 1,000 profiles

Go to Apify Store
LinkedIn Employees Scraper | Staff by Title, No Login

LinkedIn Employees Scraper | Staff by Title, No Login

Find any company's employees on LinkedIn as B2B leads with name, title, location, profile URL. No login, no ban risk. From $4/1k. Works in Claude & ChatGPT.

Pricing

from $4.00 / 1,000 profiles

Rating

5.0

(1)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

74

Total users

16

Monthly active users

a day ago

Last modified

Share

10 Notion recruiters, all at Notion

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with nearly 139,000 runs across our actors.

Type a company name, optionally a role such as engineer or sales, and get the public LinkedIn profiles of people who work there: name, headline, location when shown, and profile URL. The actor finds them through web search at run time and checks each one against the company you named, so there is no LinkedIn login, no cookie and no account at risk.

Why choose this actor?

  • A company's people in about two minutes. A test run on 30 September returned 10 Notion recruiters in 108 seconds, every one at Notion, each with a name, headline and public profile URL. Up to 1,000 profiles per run.
  • No LinkedIn account, cookies or Sales Navigator seat. The actor never logs in and never opens linkedin.com; it reads public profiles that search engines have indexed. The proxies it uses are included.
  • Wrong company matches are dropped before you pay. A profile whose headline names a different employer, or only mentions the company as a former job, is filtered out and never charged. Monitor mode never bills the same person twice.

Run it on Apify

Part of The Mine Works LinkedIn family: LinkedIn Company Scraper, LinkedIn Post Scraper, LinkedIn Profile Scraper, LinkedIn Email Finder, LinkedIn Newsletter Scraper, LinkedIn Candidate Finder.

Try it in one minute

Paste this into the JSON tab of the input form and press Start:

{
"companyName": "Stripe",
"jobTitle": "engineer",
"maxResults": 10
}

Give the company as a plain name (Stripe, Tata Consultancy Services), a name with a legal suffix (Stripe, Inc. or Freshworks Technologies Pvt Ltd, the suffix is stripped for you), a domain (stripe.com, read as stripe), or a LinkedIn company URL (https://www.linkedin.com/company/stripe, the slug is used as the name). Generic endings such as Technologies or India are also matched without them, so Freshworks Technologies finds people whose headline says Freshworks. jobTitle is a single role keyword. One company per run.

Apify's free plan includes $5 of credit every month, which covers about 650 profiles at this actor's Free plan price ($0.0075 a profile plus $0.005 a run, in runs of 50 profiles).

Copy to your AI assistant

Paste this block into ChatGPT, Claude, Cursor or any assistant that can write code, and it can run the actor for you.

themineworks/linkedin-employees on Apify. Finds public LinkedIn profiles of people at one company through web search, with no login or cookies, and returns name, headline, location when shown, and profile URL. Call ApifyClient("TOKEN").actor("themineworks/linkedin-employees").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: companyName (string: a company name, domain or LinkedIn company URL). Optional: jobTitle (string, one role keyword such as "engineer"; it steers the first search, and later searches broaden to other roles if more are needed, so filter on headline), maxResults (integer 1 to 1000, default 50), monitorMode (boolean, default false), proxyConfiguration (used only for the Brave backup search; default GOOGLE_SERP, which the actor replaces with Apify RESIDENTIAL; Google searches always run on the actor's own GOOGLE_SERP access). Rows with _type "summary" or "info" are run reports. Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-employees/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • 7 fields per profile. name, headline, company, location (when the search result shows it), linkedin_url, source_query and scraped_at.
  • Up to 1,000 profiles per run. Set maxResults from 1 to 1,000; the default is 50. Large companies fill it more easily than small ones.
  • 13 searches planned per company. The first uses your jobTitle, the second the company alone, then 11 or 12 common roles (engineer, manager, director, sales, marketing, product, recruiter, designer, analyst, operations, finance, lead) until maxResults is reached. source_query tells you which search found each person.
  • A company check on every profile. A profile is kept only if its headline or snippet names the company as the current employer, or Google's summary line under the result names it as the current employer. Former employees ("ex Stripe", "x-Stripe"), people whose summary line shows another current employer, people who list the company as a tool they use ("Canva Designer" with no sign they work there), other firms with a similar name and company pages are dropped and not charged; the summary counts them in filtered_wrong_company.
  • Monitor mode for schedules. With monitorMode on, the actor remembers up to 50,000 people it has delivered to your account and returns only new ones on later runs.
  • Google first, Brave as backup. Each search goes to Google through Apify's GOOGLE_SERP proxy, and a result is opened only after it passes the company check. If Google fails on a search's first page, Brave answers that search. Once Brave has also refused 12 requests in a row, the actor buys up to 6 Google searches on our own account, so none of it appears on your bill.

How to use it

Basic: everyone the search can find at one company

{
"companyName": "Datadog",
"maxResults": 100
}

With no jobTitle, the actor searches the company on its own first, then role by role, until it holds maxResults people or runs out of searches. maxResults is a ceiling: a small company may have only a handful of indexed profiles.

One role at one company

{
"companyName": "Datadog",
"jobTitle": "sales",
"maxResults": 25
}

The first search is site:linkedin.com/in "Datadog" sales on Google ("Datadog" sales linkedin.com/in if it goes to Brave). If it yields fewer than maxResults people, or if the search engine refuses it, the actor broadens to the company alone and to other roles to fill the count. So jobTitle puts the role first; it does not guarantee every row has that role. In one of our runs, jobTitle: "marketing" at Notion was refused twice and the 10 people delivered came from the engineer search. Keep maxResults close to what you expect, check source_query, and filter headline on your side when the role matters.

Several companies

The actor takes one company per run. For a list, start one run per company from the API, Make or n8n, or save one task per company and run them together. Each run costs its own $0.005 start fee, so keep each run's maxResults meaningful.

Weekly new-joiner watch on a competitor

{
"companyName": "Ramp",
"jobTitle": "sales",
"maxResults": 200,
"monitorMode": true
}

Save it as a task and schedule it weekly (Apify Console, Schedules, cron 0 7 * * 1 for Mondays at 7:00). The first runs work through the company's indexed profiles; after that you receive only people you have not been sent before. A run with nothing new charges no profiles, only the $0.005 run fee. Keep companyName and jobTitle the same between runs.

Build an outreach list with emails

Run this actor for the people, then give the company's domain to our B2B Leads Finder, which adds a business email built from the company's own format. For full work history on a shortlist, pass the linkedin_url values to our LinkedIn Profile Scraper.

Input parameters

ParameterTypeDefaultWhat it does
companyNamestringnone (prefill Stripe)The company whose employees you want: a name, a domain or a LinkedIn company URL. Legal suffixes are stripped.
jobTitlestringnone (prefill engineer)One role keyword to search first, such as engineer, sales, recruiter or product manager. Empty searches all roles.
maxResultsinteger50Most profiles to return, 1 to 1,000.
monitorModebooleanfalseReturn only people not delivered to your account by an earlier monitor mode run.
proxyConfigurationobjectGOOGLE_SERP groupProxy for the Brave backup search. Google searches always use the actor's own GOOGLE_SERP access and are not affected. A GOOGLE_SERP setting (the default) is replaced with Apify's RESIDENTIAL pool, which is included in the price. Another Apify group you name is used as given; with no group, or with Apify proxy switched off, the actor still uses RESIDENTIAL.
debugSnippetsbooleanfalseInternal: logs raw search snippets to help diagnose location parsing. Leave it off.

What data do you get?

Person rows (one per profile, charged):

  • name: the name on the public profile, as the search engine shows it (some people show only a first name and initial)
  • headline: the LinkedIn headline, often "Title at Company", sometimes just the company name
  • company: the company as the actor searched it, after cleaning your input
  • location: the location, only when the search result shows one
  • linkedin_url: the public profile URL, https://www.linkedin.com/in/<slug>
  • source_query: the search that found this person, which tells you whether it came from your jobTitle search or a broader one
  • scraped_at: ISO 8601 timestamp

Report rows (never charged): every run ends with a _type: "summary" row (profiles, charged_for, company, job_title, search_requests, search_refused, google_search, brave_search, engine_pages, serp_fallback, engine_refused, filtered_wrong_company, already_delivered_in_earlier_run, monitor, ended_on_deadline) and, when profiles were delivered, a _type: "info" row. Filter on _type to drop both.

What to expect, from our recent runs:

  • location came back on 5 of 10 profiles in one run, 3 of 10 in another and 0 of 10 in a third. It depends on what the search result snippet shows, and it is sometimes rough (one row read San Mateo 500+ connections on LinkedIn).
  • headline is often just the company name, so it does not always say the person's role.
  • No emails, phone numbers, work history or skills: this actor returns what a search result shows. See the recipes above for adding emails or full profiles.
  • Fields with no value are left out of the row rather than sent as null.

Stable fields for automations

These fields were present in every person row we sampled (33 rows across four runs of builds 0.1.56 and 0.1.57), and their names will not change.

FieldWhat it holds
nameFull name as shown in the search result
headlineLinkedIn headline, or the company name when that is all the result shows
companyThe cleaned company name you searched
linkedin_urlhttps://www.linkedin.com/in/<slug>, a unique key per person
source_queryThe exact search text that returned this person
scraped_atISO 8601 timestamp

location appears when the search result shows one. We may add fields, but we will not rename these.

Output examples

Real rows from our own Apify runs. Rows about people who are not public figures are masked here the same way for privacy: initials only, and the profile slug cut short.

Two public figures, from run QNduXzHUtYOug004N (companyName: "Stripe", jobTitle: "engineer"). Both came from the broader company search, not the engineer search, which source_query shows:

[
{
"name": "Patrick Collison",
"headline": "Stripe CEO",
"company": "Stripe",
"linkedin_url": "https://www.linkedin.com/in/patrickcollison",
"source_query": "\"Stripe\" linkedin.com/in",
"scraped_at": "2026-09-19T20:25:33.130Z"
},
{
"name": "John Collison",
"headline": "Stripe",
"company": "Stripe",
"linkedin_url": "https://www.linkedin.com/in/johnbcollison",
"source_query": "\"Stripe\" linkedin.com/in",
"scraped_at": "2026-09-19T20:25:33.841Z"
}
]

A row with a location, from run GAeNl1atCu3SW0d4y (companyName: "Datadog", jobTitle: "sales"), masked:

{
"name": "K. S.",
"headline": "Vice President of Sales @ Datadog",
"company": "Datadog",
"location": "Boston",
"linkedin_url": "https://www.linkedin.com/in/k...",
"source_query": "\"Datadog\" sales linkedin.com/in",
"scraped_at": "2026-09-19T20:25:20.032Z"
}

A row from the proof run 78QX8kzBZ3rWT1P4f (companyName: "Notion", jobTitle: "marketing"), masked. The marketing search was refused, so this person came from the engineer search:

{
"name": "S. K.",
"headline": "Software Engineer at Notion",
"company": "Notion",
"location": "Sunnyvale",
"linkedin_url": "https://www.linkedin.com/in/s...",
"source_query": "\"Notion\" engineer linkedin.com/in",
"scraped_at": "2026-09-19T20:34:34.483Z"
}

The summary row from the same run, trimmed: 11 search requests, 10 refused, 10 profiles delivered and charged:

{
"_type": "summary",
"profiles": 10,
"charged_for": 10,
"company": "Notion",
"job_title": "marketing",
"queries_planned": 13,
"search_requests": 11,
"search_refused": 10,
"engine_refused": false,
"filtered_wrong_company": 0,
"monitor": false,
"ended_on_deadline": false
}

That run is from 19 September, when Brave led the search. Since the switch to Google, source_query shows the Google form (site:linkedin.com/in "Notion" engineer) for profiles Google found, and the summary also has google_search (pages, links opened, refusals), brave_search and engine_pages.

Pricing

Pay per event. You pay for each profile written to your dataset, at the rate for your Apify plan, plus a small fee per run. Proxy, compute and the fallback searches are included.

EventFreeBronze (Starter)Silver (Scale)Gold and above (Business)
profile-scraped, per profile$0.0075$0.0061$0.00495$0.004
per 1,000 profiles$7.50$6.10$4.95$4.00
apify-actor-start, per run$0.005$0.005$0.005$0.005

These prices have applied since 14 September 2026, when the run fee was added; the per profile price has been the same since 9 August 2026. No price change is scheduled as of 30 September 2026. The Pricing tab always shows the rate for your own plan.

The run fee is Apify's standard start event: one event per GB of run memory, with a minimum of one. At the default 256 MB, and at anything up to 1 GB, that is one event, $0.005 a run. At 2 GB it would be $0.01. The actor does not need more than the default.

What a real job costs. 50 profiles (the default) cost $0.38 on the Free plan ($0.375 plus the $0.005 run fee) and $0.205 on Gold. 250 profiles in one run cost $1.88 on Free and $1.005 on Gold.

Never charged:

  • profiles dropped by the company check (other employers, former employees, company pages)
  • profiles already delivered by an earlier monitor mode run, and repeats within a run
  • searches an engine refused, and the Google searches we buy when both engines do
  • a row that fails to save; the charge is made only after the row is in your dataset
  • the _type: "summary" and _type: "info" report rows

A run that finds nobody charges no profile events, only the $0.005 run fee. Each run also has a spending guard on our side: if a company yields too few profiles per search to cover the cost, the run stops early, keeps what it found, and says so in the log.

FAQ

Where do the profiles come from? From search engine results for public LinkedIn profile pages: Google first, through Apify's GOOGLE_SERP proxy; Brave when Google fails on a search; and a Google search we pay for when Brave keeps refusing too. The actor reads the name, headline and location from the search result. It never logs in and never loads linkedin.com itself.

How many profiles can I get? Up to 1,000 per run. In practice the limit is how many profiles the search engines have indexed for that company: large companies fill hundreds, a small firm may return a few. Up to 13 searches are tried per run, each read for up to 10 pages until it stops returning new people.

Does jobTitle filter the results? It ranks them, it does not filter. The role search runs first; if it is thin or refused, broader searches fill maxResults with other roles at the same company. Check source_query and headline, and set maxResults close to the number you expect for that role.

How fresh is the data? The search runs live, but a headline or location is only as current as the search engine's copy of the profile. A job change can take a few weeks to show up.

Do I need a LinkedIn account, cookies or a proxy? No account and no cookies. The proxies for the searches are set up for you and included in the price.

Why did a run return fewer profiles than maxResults, or none? Three usual reasons: the company has few indexed profiles, the company name is too generic and most matches belonged to other employers (see filtered_wrong_company; Google also fills a search for a company it cannot match with people from elsewhere, and those are dropped the same way), or the search engine refused the requests at that moment (see search_refused and engine_refused). Nothing is charged for profiles not delivered. Try a more specific company name, drop the jobTitle, or run again a little later.

Will I be charged twice for the same person? Not within a run, and not across runs when monitorMode is on. Monitor mode remembers up to 50,000 delivered people in a key value store named monitor-linkedin-employees in your Apify account, shared by every monitor mode run of this actor in that account. If the store cannot be opened, the run delivers everything and says so in the log.

What formats can I export? JSON, CSV, Excel, XML, RSS or an HTML table from the dataset tab, or through the Apify API.

Can I run it on a schedule? Yes. Save your input as a task and add a schedule in Apify Console, with monitorMode on so each run returns only new people.

Can I use it from Claude, ChatGPT or another AI agent?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/linkedin-employees.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http linkedin-employees "https://mcp.apify.com/?tools=themineworks/linkedin-employees".

Is it legal? The actor reads only public profile information that search engines have indexed, without logging in or passing any access control. Names, headlines and locations are still personal data, so you are responsible for how you use them, including LinkedIn's terms, data protection law such as GDPR and CCPA, and the rules that apply to recruiting or sales outreach where you work. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's profiles to a sheet with Apify's Google Sheets integration.
  • Make, Zapier and n8n: start one run per target company and collect the profiles in your CRM or ATS.
  • Webhooks: have Apify call your URL when a run finishes.
  • API: start runs and read datasets from any language with the Apify API or the Python and JavaScript clients.
  • MCP clients: Claude, ChatGPT, Cursor and other MCP clients can call the actor as a tool through https://mcp.apify.com.

More from The Mine Works

LinkedIn

Social media and video

Leads and business directories

Marketing, SEO and reviews

Real estate

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Found a bug or a company that returns nobody when it should? Open an issue in the Issues tab on this page. To ask for a new data source, email dmineworks@gmail.com.

LinkedIn Employees Scraper finds the public LinkedIn profiles of people at a company through live search, drops the ones who work somewhere else, and charges only for the profiles it delivers.