Linkedin Company Employees Scraper avatar

Linkedin Company Employees Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Linkedin Company Employees Scraper

Linkedin Company Employees Scraper

LinkedIn Company Employees Scraper extracts employee profiles from LinkedIn company pages. It collects names, job titles, profile URLs, locations, and profile details. Ideal for lead generation, recruitment research, B2B prospecting, and company workforce analysis.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

2

Monthly active users

a day ago

Last modified

Share

LinkedIn Company Employees Scraper — Employee Profiles, Headlines & Locations in Bulk

Extract employee profiles from LinkedIn company pages. Paste company URLs — or just company names as search keywords — and get each employee with their full name, headline, public profile URL, structured location, profile picture, current company, detected companies and personal website.

Up to 10,000 employees per company, bulk input, and results streamed to your dataset as each profile is scraped.


What is LinkedIn Company Employees Scraper?

Building a list of who works at a company is one of the most common B2B research tasks, and one of the most tedious: LinkedIn's people view is paginated, filtered and impossible to export.

This Actor automates it. Give it a company page URL, or simply a company name to discover the page first, and it walks the employee list and scrapes each public profile into a flat row.

Because it accepts keywords as well as URLs, you can go from a list of company names in a spreadsheet to a list of their employees without looking up a single LinkedIn URL by hand.


What data can you extract?

GroupFields
👤 Identityfullname, first_name, last_name, public_identifier, profile_url
💼 Professionalheadline, current_company, companies_detected
📍 Locationlocation.full, location.city, location.country, location.country_code
🖼️ Mediaprofile_picture_url
🔗 Linkspersonal_website, other_contact_details.course_links
🏢 Provenancecompany_url — which company or keyword produced this profile
Social proofrecommendations_received
🕒 Run metadatacreated_timestamp

Fields to treat with care

Some fields exist for output-shape stability rather than as scraped values:

  • is_creator, is_influencer, is_premium are fixed defaults (false), not detected from the profile.
  • show_follower_count is a fixed true.
  • contact_elements carries page-level scaffolding (platform links, language selectors, login-form detection) alongside profile_identity and learning_content. The genuinely useful parts are contact_elements.profile_identity and contact_elements.learning_content.course_details.

This is documented deliberately so nobody builds a segmentation on a constant.


Why teams scrape company employee lists

For B2B sales prospecting

Knowing who works at a target account — and in what role — turns a company list into a contact list. headline is the fastest way to filter for the persona you sell to, and location splits a global company into territories.

For recruitment and talent sourcing

A competitor's engineering team is a candidate pipeline. Headlines carry seniority and specialisation, and location tells you who is within reach for a given role.

For account-based marketing

ABM needs the buying committee, not just the account. One run per target account gives you the named individuals to build campaigns around.

For competitive intelligence

Team composition reveals strategy: a sudden concentration of a particular function usually precedes a product move. Re-running monthly turns that into a trend.

For market and academic research

Workforce composition by role and geography is genuinely hard to obtain otherwise, and employee lists across a sector make a usable dataset.


How to scrape company employees step by step

  1. Copy a LinkedIn company URL (https://www.linkedin.com/company/google) — or simply note the company name.
  2. Paste it into Company URLs or search keywords, one entry per line. URLs and keywords can be mixed.
  3. Set Max employees per company (1–10,000).
  4. Keep Apify Residential proxy enabled — this matters on LinkedIn.
  5. Click Start, then export the Output tab as CSV, Excel or JSON.

⬇️ Input

Example input

{
"urls": [
"https://www.linkedin.com/company/google",
"Stripe",
"https://www.linkedin.com/company/figma"
],
"max_employees": 200
}

Input reference

FieldTypeDefaultDescription
urlsarray— (required)One entry per line: full LinkedIn company URLs or plain keywords / company names for discovery. Bulk-friendly — mix both formats freely.
max_employeesinteger10Employee profiles to discover and scrape per URL or keyword, from 1 to 10,000. Higher values mean longer runs.
proxyConfigurationobjectApify Residential (US)Recommended: leave residential on. With Apify Proxy off, requests go direct and the block risk rises sharply. If the group is omitted, residential US is used.

The run fails fast on empty input. If urls contains no non-empty entry, the Actor stops with a clear message rather than producing an empty dataset.


⬆️ Output

Example output (trimmed)

{
"company_url": "https://www.linkedin.com/company/google",
"profile_url": "https://www.linkedin.com/in/alex-example",
"public_identifier": "alex-example",
"fullname": "Alex Example",
"first_name": "Alex",
"last_name": "Example",
"headline": "Staff Software Engineer at Google | Distributed Systems",
"current_company": "Google",
"companies_detected": ["Google", "Stripe"],
"location": {
"full": "Zurich, Zurich, Switzerland",
"city": "Zurich",
"country": "Switzerland",
"country_code": "CH"
},
"profile_picture_url": "https://media.licdn.com/dms/image/…",
"personal_website": "https://alexexample.dev",
"recommendations_received": 4,
"created_timestamp": 1786451351,
"other_contact_details": { "course_links": [] },
"is_premium": false,
"is_creator": false,
"is_influencer": false
}

Illustrative values — a live run returns current LinkedIn data.

Profiles that cannot be scraped after retries produce a row with profile_url, an error message and created_timestamp, so failures are visible rather than silent.


Usage recipes

Build a contact list for target accounts

{
"urls": [
"https://www.linkedin.com/company/stripe",
"https://www.linkedin.com/company/figma",
"https://www.linkedin.com/company/notion"
],
"max_employees": 300
}

Then filter headline for the persona you sell to.

Start from company names, not URLs

{
"urls": ["Stripe", "Figma", "Notion"],
"max_employees": 100
}

Useful when your CRM export has company names but no LinkedIn URLs.

Territory-based sales lists

Run a large company, then filter the export by location.country_code or location.city. A 5,000-person company becomes a manageable regional list.

Recruitment shortlist

{
"urls": ["https://www.linkedin.com/company/yourcompetitor"],
"max_employees": 500
}

Filter headline for the role and seniority you are hiring, and location for commuting distance.

Track team growth over time

Save a Task, attach a monthly Schedule, and diff on public_identifier between runs. New identifiers are new hires; missing ones are departures.


How does this compare to LinkedIn's official API?

LinkedIn has no public API for listing another company's employees. The Talent and Marketing APIs are partner-gated, require a commercial agreement and approved application, and are generally scoped to organisations you administer or members who have authorised your app.

This Actor reads publicly rendered profile pages reached from the company's people view — the same pages a visitor can open. That is why residential proxies and reasonable pacing matter, and why it works for companies you do not administer.


Integrate and automate

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperforge/linkedin-company-employees-scraper").call(run_input={
"urls": ["https://www.linkedin.com/company/google"],
"max_employees": 200,
})
for p in client.dataset(run["defaultDatasetId"]).iterate_items():
if p.get("error"):
continue
print(p["fullname"], "|", p["headline"], "|", p["location"]["full"], "|", p["profile_url"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperforge/linkedin-company-employees-scraper').call({
urls: ['https://www.linkedin.com/company/google'],
max_employees: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

REST API

curl -X POST "https://api.apify.com/v2/acts/scraperforge~linkedin-company-employees-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urls":["https://www.linkedin.com/company/google"],"max_employees":200}'

n8n, Make, Zapier and AI agents

Call the Actor from n8n, Make, Zapier or an MCP-capable agent to enrich accounts with their people as soon as they land in your CRM.

Schedules and webhooks

Attach a Schedule to track headcount changes at target accounts, and use webhooks or the Google Sheets / Airtable / Slack integrations to move results into your sales stack.


Pricing

This Actor is offered on a monthly rental basis rather than per result — the current price is shown on the Pricing tab of the Actor page, and Apify displays the applicable cost before you run it. Free Apify accounts include monthly platform credit that is enough to trial it.

Apify Residential proxy traffic is billed separately by the platform, and residential is strongly recommended here.


Limits, reliability and blocking

  • Residential proxy matters. Running with Apify Proxy off sends requests direct and the Actor warns you in the log; expect substantially more blocks.
  • max_employees is per URL or keyword, so three companies at 200 each can return up to 600 rows.
  • Maximum 10,000 employees per company in a single run — and large numbers meaningfully increase both run time and block risk. Start at 100–300.
  • Public profile data only. E-mail addresses, phone numbers and connections are not published by LinkedIn and are not returned.
  • Keyword discovery is best-effort. A company name resolves to the page LinkedIn's search considers most relevant; for exact targeting, use the URL.
  • Some fields are constants, not scraped values — see the "fields to treat with care" note above.
  • Failed profiles appear as error rows, so a run of 500 will normally include a few worth retrying.
  • Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for large multi-company runs.

This Actor collects publicly visible profile information — the same pages a visitor can open without a connection. It does not log in with your credentials, send connection requests, or access private profile sections.

Names, headlines, photographs and locations are personal data under GDPR, the UK GDPR, CCPA/CPRA and comparable laws — and employee data is exactly the category regulators scrutinise. Before processing it: establish a lawful basis (legitimate interest requires a documented balancing assessment), inform individuals where required, store only what you need, honour objection and deletion requests, and follow marketing and recruitment rules before outreach. LinkedIn's User Agreement restricts automated access; you are responsible for your use.


❓ Frequently asked questions

No cookie field is required by this Actor — it reads publicly rendered profile pages. Residential proxy is what keeps success rates high.

Can I use company names instead of URLs?

Yes. Plain keywords are discovered first, then their employees are scraped. Mix URLs and keywords in the same input.

Does it return e-mail addresses or phone numbers?

No. LinkedIn does not publish them on public profiles, and this Actor does not guess or generate contact details.

How many employees can I get per company?

Up to 10,000, though realistically you should start at 100–300 — larger runs take much longer and attract more blocking.

Why do some rows only contain a URL and an error?

That profile failed after retries — usually a block or a removed profile. The URL is preserved so you can retry it.

Are is_premium and is_influencer reliable?

No. They are fixed default values, not detected signals. Do not segment on them.

How do I split a large company by region?

Filter the export on location.country_code or location.city — the location is returned as a structured object precisely for this.

Can I track hiring over time?

Yes — schedule the run and diff public_identifier sets between runs to see joiners and leavers.

Which export format should I use?

CSV or Excel work well for sales lists (Apify flattens location). Use JSON if you want location, companies_detected and contact_elements intact.


Browse the full collection on the ScraperForge profile.


💬 Feedback

Need seniority filters, deeper profile sections, or a custom prospecting pipeline? Open an issue on the Issues tab of this Actor.