LinkedIn Company Employees Scraper: Work History & Job Tenure avatar

LinkedIn Company Employees Scraper: Work History & Job Tenure

Pricing

$19.99/month + usage

Go to Apify Store
LinkedIn Company Employees Scraper: Work History & Job Tenure

LinkedIn Company Employees Scraper: Work History & Job Tenure

LinkedIn Company Employees Scraper: Work History & Job Tenure 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

12

Total users

2

Monthly active users

20 days ago

Last modified

Share

Extract public employee profiles from any LinkedIn company page, plus each person's job history — past employers, role dates, and how long they've been in their current seat — read straight out of the public profile page LinkedIn already serves. No login, no cookies, no LinkedIn credentials.

What it does

  1. Takes a list of LinkedIn company page URLs (or plain company-name keywords) and discovers employee profile URLs from the company's public page.
  2. Fetches each public profile and extracts name, headline, location, current company, and — new in this variant — every job on the profile with company, location, start/end dates, and a masking flag.
  3. Optionally filters the results by minimum tenure in the current role or by past-employer name, so you only keep the people you actually want.

Input

FieldTypeDefaultDescription
urlsarray (one per line)["https://www.linkedin.com/company/google"]Full LinkedIn company URLs or plain keywords/company names for discovery. Required.
max_employeesinteger (1–10,000)10Cap on employee profiles discovered and scraped per URL/keyword.
proxyConfigurationobjectApify Residential (US)Standard Apify proxy configuration.
include_work_historybooleantruePull every job LinkedIn shows on the public profile into work_history[], plus the current role's start date and tenure text. LinkedIn masks older roles on roughly two out of three public profiles — masked entries are returned with is_masked: true instead of being silently dropped.
min_years_in_current_roleinteger (0–50)0Keep only people who have been in their current job at least this many years, counted from the start date printed on their profile. 0 keeps everyone. People whose start date LinkedIn hides are always kept unless only_full_work_history is also on.
past_employer_keywordsarray (one per line)[]Keep only people whose earlier jobs mention one of these company names. Case-insensitive, partial match. Leave empty to keep everyone.
only_full_work_historybooleanfalseKeep only people whose work history is fully readable (not masked, has a current-role start date). Off by default so nobody disappears without asking.

Output

One dataset row per employee profile — every base field, unchanged, plus this variant's additions:

{
// ---- unchanged base fields ----
"company_url": "https://www.linkedin.com/company/microsoft",
"profile_url": "https://www.linkedin.com/in/satyanadella",
"fullname": "Satya Nadella",
"first_name": "Satya",
"last_name": "Nadella",
"headline": "Chairman and CEO at Microsoft",
"public_identifier": "/in/satyanadella",
"profile_picture_url": "https://media.licdn.com/...",
"location": { "country": "United States", "city": "Redmond", "full": "Redmond, Washington, United States", "country_code": "US" },
"is_creator": false,
"is_influencer": false,
"is_premium": false,
"created_timestamp": 1755212345,
"show_follower_count": true,
"current_company": "Microsoft",
"companies_detected": [ { "name": "Microsoft", "slug": "microsoft", "url": "https://www.linkedin.com/company/microsoft" } ],
"personal_website": "",
"recommendations_received": [],
"other_contact_details": { "course_links": [] },
"contact_elements": { "profile_identity": {}, "auth_points": {}, "learning_content": {}, "platform": {}, "language": {} },
// ---- new in this variant ----
"work_history": [
{
"title": "Chairman and CEO",
"company_name": "Microsoft",
"company_url": "https://www.linkedin.com/company/microsoft",
"company_location": "Greater Seattle Area",
"start_date": "2014-02",
"end_date": null,
"is_current": true,
"duration_text": "Feb 2014 - Present 12 years 7 months",
"description": "...",
"is_masked": false
}
],
"current_role_title": "Chairman and CEO",
"current_role_start_date": "2014-02",
"current_role_duration_text": "Feb 2014 - Present 12 years 7 months",
"past_companies": ["Sun Microsystems"],
"work_history_masked": false
}

work_history is [] when include_work_history is off. current_role_start_date / current_role_duration_text are null when LinkedIn hides them. work_history_masked is true when any entry in work_history[] came back with LinkedIn's own asterisk masking.

Error rows (profile blocked/unreachable) keep the base's exact shape: { profile_url, error, created_timestamp }.

Honest limits — read before relying on complete work histories

  • Full multi-job work history with dates is reliably readable on roughly 1 in 3 public profiles. LinkedIn serves a masked "teaser" layout on the rest, where past-role titles, company names and descriptions come back as literal asterisk runs (e.g. "***** ******"). Those entries are still returned — with is_masked: true — rather than dropped, so you can see why a field is blank instead of it looking like missing data.
  • The current employer's name, URL and location are readable on essentially every profile, masked or not — only the deeper job history (older roles, exact dates) is affected by masking.
  • duration_text is the tenure string LinkedIn itself prints (e.g.
    "Feb 2014 - Present 12 years 7 months"
    ); it is only available on the un-masked layout and is never computed or guessed from dates.
  • min_years_in_current_role, past_employer_keywords and only_full_work_history are post-fetch filters applied after each profile is scraped — LinkedIn has no logged-out role/tenure/company search facet at company-page discovery time (the /people/ and /about/ sub-pages, and /search/results/people/, all redirect to a login wall when accessed without a session).
  • No skills, certifications, volunteering, honors, publications, recommendations, open-to-work badge or recently-changed-jobs signal are included — none of these exist on a logged-out LinkedIn profile page.
  • Employee discovery from a company's public page is inherently limited (a handful of named "Employees at X" card entries plus recent post authors) and can vary between runs of the identical input, since LinkedIn's own page doesn't expose a stable full employee directory without a login.

Notes

Zero new HTTP requests: every added field is read out of the same profile HTML the base scraper already downloads for each employee. No LinkedIn login, cookies, or credentials are used anywhere.