LinkedIn Company Employees: AI & Lead Enrichment Scraper
Pricing
from $3.99 / 1,000 results
LinkedIn Company Employees: AI & Lead Enrichment Scraper
Pulls public employee profiles from any LinkedIn company page or keyword search — no login required — and returns fullname, headline, current_company, and rule-based decision-maker tags as structured JSON.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScrapeAI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Share
LinkedIn Employee Scraper — Extract Leads, Headlines & Companies
LinkedIn Company Employees: AI & Lead Enrichment Scraper pulls public employee profiles from any LinkedIn company page or keyword search — no login required — and returns fullname, headline, current_company, and a rule-based isDecisionMaker/seniorityTier tag for every profile as structured JSON. Turn on optional AI lead scoring with your own API key to add a 0-100 aiLeadScore and ICP-fit read on top. Paste a company URL below and run it to see your first dataset in minutes.
What is LinkedIn Company Employees: AI & Lead Enrichment Scraper?
LinkedIn Company Employees: AI & Lead Enrichment Scraper is an Apify Actor that discovers the employees of a LinkedIn company (or a keyword search), scrapes each public profile page into a typed JSON row, and tags every profile with a free, rule-based decision-maker/seniority classification. It runs entirely logged out — the source code never sends a LinkedIn cookie, session token, or credential of any kind, so there's nothing to sign into. It's built for sales and recruiting teams, growth marketers, and developers who need structured LinkedIn employee data feeding a CRM, an outreach tool, or an AI agent pipeline.
What LinkedIn employee data is publicly available to scrape?
Without a LinkedIn login, a visitor can see a limited but useful slice of an employee's profile and a company's public roster. Everything else — full connections, messaging, and most contact details — sits behind LinkedIn's own login wall.
| Data category | Publicly available (logged out) | Restricted (needs LinkedIn login) |
|---|---|---|
| Name & headline | Full name and headline text | — |
| Current employer | Current company name + link, if shown on the profile | Full past-employer / work-history timeline |
| Location | City/region/country text on the profile | Precise address |
| Company roster | Employee list from a company's public /people and /about pages, plus what Google has indexed | Full "search employees by title" filters (Sales Navigator) |
| Recommendations | Written recommendations the profile owner has made publicly visible | Recommendation requests, private endorsements |
| Creator signals | Follower count and influencer badge — only when the profile is in Creator mode | Full connections count, follower list |
| Contact details | Whether a login/contact form element exists on the page (a boolean signal only) | Actual email address, phone number, direct messages |
LinkedIn Company Employees: AI & Lead Enrichment Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.
What data can I extract with LinkedIn Company Employees: AI & Lead Enrichment Scraper?
Every run returns identity/company fields, a free rule-based decision-maker classification, an optional AI lead-scoring layer, and page-level social-proof metadata — 33 fields per employee row.
| Field name | Description |
|---|---|
profile_url | Final canonical LinkedIn profile URL after redirect resolution |
fullname | Full name parsed from the profile's heading or page title |
first_name / last_name | Name split into first and last |
headline | The profile's headline/tagline text |
public_identifier | LinkedIn's public profile path (e.g. /in/username) |
profile_picture_url | Public profile photo URL |
location | Object: {country, city, full, country_code} |
current_company | Current employer name detected from the profile's company link |
company_url | The input company URL when the target was a company page; otherwise the employer page detected from the profile itself (keyword targets can return employees across several companies) |
companies_detected | Array of {name, slug, url} for every company link found on the profile |
personal_website | First non-LinkedIn external link found on the profile, if any |
is_creator | true if LinkedIn's Creator-mode follower line is rendered |
is_influencer | true only if LinkedIn's own "is an influencer" badge is present |
follower_count | Numeric follower count — populated only in Creator mode |
show_follower_count | Boolean mirror of whether follower_count is non-null |
recommendations_received | Array of {text, author, author_url} for publicly visible written recommendations |
other_contact_details | Object holding course_links (LinkedIn Learning course URLs found on the page) — not actual contact info |
contact_elements | Nested object of page-level identity/auth/platform/language signals — booleans about whether a login form is present, not a contact list |
created_timestamp | Unix timestamp when the row was built |
scrapedAt | ISO-8601 UTC timestamp of the scrape |
Decision-maker & seniority fields (rule-based, always on, free)
| Field name | Description |
|---|---|
seniorityTier | Regex-classified tier: Owner/Founder, C-Level, VP, Director, Manager, Senior, Entry, or Unknown |
departmentGuess | Regex-classified department: Engineering, Sales, Marketing, HR, Finance, Operations, Product, Design, Legal, Support, or Unknown |
isDecisionMaker | true when seniorityTier is Owner/Founder, C-Level, VP, or Director |
decisionMakerReason | The exact headline phrase that triggered the decision-maker tier, or null |
AI lead-scoring fields (optional add-on, off by default)
| Field name | Description |
|---|---|
aiEnabled | true if enableAiLeadScoring was ON for this run |
aiLeadScore | LLM-assigned 0–100 lead score; null unless AI scoring ran and succeeded |
aiIcpFit | LLM-assigned fit against your icpDescription: High / Medium / Low |
aiSeniority | The LLM's own seniority read, independent of seniorityTier |
aiDepartment | The LLM's own department read, independent of departmentGuess |
aiReasoning | Up to 220-character explanation the model returned |
aiError | The real error string if AI scoring was requested but failed (e.g. no_api_key_supplied) — null otherwise |
error | Present only on failed rows, e.g. "HTTP 999", "Login required or blocked", "Max retries exceeded" |
🤖 Add-on: Need additional LinkedIn data?
Pair this scraper with LinkedIn Company About Scraper to pull firmographics — industry, headcount, and description — for every company you enrich. Add LinkedIn Company Scraper & Open Jobs Finder to see a company's open-jobs count and real job postings alongside its employee roster, or LinkedIn B2B Emails Scraper: Verified Email Finder to discover business email addresses for the same targets.
How does LinkedIn Company Employees: AI & Lead Enrichment Scraper differ from the official LinkedIn API?
LinkedIn's own Marketing API products require a developer application, LinkedIn's approval, and — for most products — an authenticated member granting OAuth consent; none of them return a company's employee roster or a lead-scored contact list. This scraper skips that approval process entirely and returns employee-level rows directly from public pages.
| Feature | LinkedIn Official API | This scraper |
|---|---|---|
| Access approval | Application + LinkedIn review required for every product; e.g. Community Management API's Standard tier needs a support-ticket review | No approval step — run directly from the Apify Store |
| Employee/lead roster access | No catalog product returns a company's employee list or a lead-scored roster; the closest, Company Intelligence API, is restricted to qualified partners who already hold Advertising API access | Returns employee profiles per company/keyword directly, with rule-based decision-maker tagging |
| Rate limits | Community Management API's Development tier: 500 calls per app and 100 calls per member per 24 hours; batch reads disabled entirely on that tier | Bounded by the target's own anti-bot response and proxy throughput, not a published API quota |
| Login requirement | 3-legged OAuth — an authenticated LinkedIn member must consent to nearly every permission | None — scrapes logged-out public pages |
| Approval turnaround | Some restricted products (e.g. Matched Audiences API) take up to 60 days; others have no fixed timeline | None — starts immediately |
(LinkedIn Marketing API details per Microsoft Learn's LinkedIn API documentation, checked 2026-07-25.)
Use LinkedIn's official API when you need first-party analytics tied to an ad account or company page you administer. Use this scraper when you need public employee-level data across companies you don't own or administer — something none of LinkedIn's official API products expose.
How to use LinkedIn Company Employees: AI & Lead Enrichment Scraper
This Actor runs on the Apify platform — there's no separate signup, API key, or LinkedIn credential to obtain before your first run.
- Open the Actor's page in the Apify Store, under the Scraper-Engine account, and click Try for free.
- Add at least one entry to
leadTargets— a full LinkedIn company URL (e.g.https://www.linkedin.com/company/google) or a plain keyword. The schema marks no field as required, but the run fails immediately if this list is empty. - Optionally set
maxLeadsPerCompany,jobTitleKeywords/excludeJobTitleKeywords, orincludeOnlyDecisionMakersto narrow the roster before it's scraped. - Start the run.
- Download results as JSON, CSV, or Excel, or stream them via the Apify API dataset endpoint.
How to scale to bulk LinkedIn employee extraction
leadTargets is a stringList array — add one company URL or keyword per line, and the Actor loops through every entry sequentially in the same run, capping each target at maxLeadsPerCompany. There's no separate "bulk mode" input; more lines in leadTargets is the bulk pattern. For very large jobs, split targets across multiple runs so each run stays within your desired duration and proxy budget.
What can you do with LinkedIn employee data?
- A recruiter sourcing hiring managers uses
seniorityTieranddepartmentGuessto shortlist Director/VP-tier headlines in Engineering before reaching out. - A sales or BD rep prospecting new accounts uses
isDecisionMakerandcurrent_companyto build a target list of budget holders at each company in one run. - A revenue-ops analyst enriching a CRM turns on
enableAiLeadScoringagainst a writtenicpDescription, then filters for High-fitaiIcpFitrows before import. - An org-chart researcher maps a company's structure using
companies_detectedandheadlineacross every employee discovered from oneleadTargetscompany URL. - An AI agent building an outbound-email pipeline feeds
fullname,headline, andaiReasoningstraight into an LLM prompt to draft a personalized first-touch message — no HTML parsing required.
How does LinkedIn Company Employees: AI & Lead Enrichment Scraper handle rate limits and blocking?
Requests route through Apify Proxy — residential by default (RESIDENTIAL, US) — or your own proxy configuration; if you disable Apify Proxy, requests go direct and the Actor logs a warning that blocks are more likely. Each profile fetch retries up to 3 times with a growing randomized delay between attempts, and a login/authwall detection triggers a longer 5–10 second pause before retrying. If a profile still fails after that, the outer run loop retries it up to 3 more times before giving up. An HTTP 999 response — LinkedIn's own block signal — is treated as permanent and skips further retries on that profile immediately, rather than wasting attempts. Company-page and Google-search discovery requests are spaced with randomized delays (roughly 0.5–2 seconds for pages, 2–4 seconds for Google) to reduce request bursts. No CAPTCHA-solving is implemented. When a profile ultimately fails, its row is still pushed to the dataset with an error field (e.g. "HTTP 999", "Login required or blocked", "Max retries exceeded") instead of crashing the run — and that row is not charged (see the Output section below).
⬇️ Input
All 10 input fields are optional per the schema — though at least one leadTargets entry is required for the run to produce any output.
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
leadTargets | No | array | Company pages or search keywords — one entry per line; full LinkedIn company URLs or plain keywords/company names | ["https://www.linkedin.com/company/openai"] |
maxLeadsPerCompany | No | integer | Max employee profiles to discover + scrape per company/keyword (1–10,000). Default 10. | 25 |
jobTitleKeywords | No | array | Keep a profile only if its headline contains at least one of these words. Case-insensitive. | ["founder", "sales"] |
excludeJobTitleKeywords | No | array | Drop a profile if its headline contains any of these words. Case-insensitive. | ["intern", "student"] |
includeOnlyDecisionMakers | No | boolean | Keep only rows where the rule-based isDecisionMaker flag is true. Default false. | true |
icpDescription | No | string | Describe who you're prospecting for. Used only when AI lead scoring is ON. | "VP/Director of Engineering at Series B+ SaaS companies" |
enableAiLeadScoring | No | boolean | Turn on the optional LLM ICP/lead-scoring layer. Default false (zero AI calls, zero cost). | false |
aiModel | No | string (enum) | AI model/provider for lead scoring; provider is auto-detected from the model name. Default claude-haiku-4-5. | "claude-haiku-4-5" |
aiApiKey | No | string (secret) | Your own API key for the selected provider. Falls back to an environment variable if left blank. Required only if AI scoring is on. | "" |
connectionProxy | No | object | Apify proxy configuration. Residential recommended. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"} |
Example input
{"leadTargets": ["https://www.linkedin.com/company/openai","revenue operations manager fintech"],"maxLeadsPerCompany": 25,"jobTitleKeywords": [],"excludeJobTitleKeywords": ["intern", "student"],"includeOnlyDecisionMakers": true,"icpDescription": "VP/Director of Engineering at Series B+ SaaS companies","enableAiLeadScoring": true,"aiModel": "claude-haiku-4-5","aiApiKey": "","connectionProxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
⬆️ Output
Each run writes one typed JSON row per discovered employee to the Actor's dataset, with a consistent field set across runs. Download it as JSON, CSV, Excel, or XML from the Apify Console, or pull it via the API. Billing is pay-per-event on the row_result charged event — only successfully scraped rows (no error key) are charged; error rows are still pushed to the dataset for visibility but are not charged. To exclude uncharged rows when querying the dataset, filter for items where error is absent (e.g. error == null).
Example output
{"profile_url": "https://www.linkedin.com/in/jamiechen-eng","fullname": "Jamie Chen","first_name": "Jamie","last_name": "Chen","headline": "VP of Engineering at OpenAI","public_identifier": "/in/jamiechen-eng","profile_picture_url": "https://media.licdn.com/dms/image/xyz/profile-displayphoto-shrink_800_800/0/123456789","location": {"country": "United States","city": "San Francisco","full": "San Francisco, California, United States","country_code": "US"},"is_creator": false,"is_influencer": false,"follower_count": null,"show_follower_count": false,"current_company": "OpenAI","company_url": "https://www.linkedin.com/company/openai","companies_detected": [{ "name": "Openai", "slug": "openai", "url": "https://www.linkedin.com/company/openai" }],"personal_website": "https://jamiechen.dev","recommendations_received": [{ "text": "Jamie is an outstanding engineering leader who scaled our platform team 3x.", "author": "Alex Rivera", "author_url": "https://www.linkedin.com/in/alexrivera" }],"other_contact_details": { "course_links": [] },"contact_elements": {"profile_identity": {"profile_identifier": "https://www.linkedin.com/in/jamiechen-eng","profile_picture": "https://media.licdn.com/dms/image/xyz/profile-displayphoto-shrink_800_800/0/123456789","profile_name_display": "Jamie Chen"},"auth_points": {"email_phone_input_present": false,"password_input_present": false,"login_form_action": ""},"learning_content": { "course_details": [], "course_titles": [], "all_courses_link": "" },"platform": { "corporate_logo_url": "", "copyright": "LinkedIn Corporation © 2026", "policy_links": [], "about_links": [], "privacy_links": [] },"language": { "selector_present": false, "locales": [] }},"created_timestamp": 1753452730,"scrapedAt": "2026-07-25T14:32:10Z","seniorityTier": "VP","departmentGuess": "Engineering","isDecisionMaker": true,"decisionMakerReason": "Headline matched 'vice president' -> VP tier","aiEnabled": true,"aiLeadScore": 82,"aiIcpFit": "High","aiSeniority": "VP","aiDepartment": "Engineering","aiReasoning": "Strong ICP match: VP-level engineering leader at a fast-growing AI company.","aiError": null}
How does it work?
The Actor takes each leadTargets entry and either treats it as a LinkedIn company URL or runs it as a keyword. For company targets, it fetches the company's public /people and /about pages plus a site:linkedin.com/in/ Google search to build a list of employee profile URLs, then fetches each /in/<slug> profile directly with a plain HTTP request — no browser, no Voyager API. Requests go through Apify's residential proxy by default to reduce blocking, with retries and backoff on connection errors and temporary blocks. Only what LinkedIn renders to a logged-out visitor is ever read — HTML meta tags, JSON-LD, and visible page markup — so nothing behind LinkedIn's login wall is accessed. The output field set stays the same from run to run regardless of small LinkedIn page-markup changes, since the Actor targets multiple fallback selectors per field.
Integrations
LinkedIn Company Employees: AI & Lead Enrichment Scraper runs on Apify, so it works with anything that can call the Apify API, plus Apify's no-code and AI-agent integrations.
Calling LinkedIn Company Employees: AI & Lead Enrichment Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"leadTargets": ["https://www.linkedin.com/company/openai"],"maxLeadsPerCompany": 25,"includeOnlyDecisionMakers": True,}run = client.actor("scraper-engine/linkedin-company-employees-ai-sentiment-lead-enrichment-scraper").call(run_input=run_input)for lead in client.dataset(run["defaultDatasetId"]).iterate_items():print(lead["fullname"], lead["headline"], lead["isDecisionMaker"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
MCP integration for AI agents
LinkedIn Company Employees: AI & Lead Enrichment Scraper is reachable through Apify's hosted Actors MCP Server at https://mcp.apify.com. Add it as a remote MCP connector in Claude, Cursor, or another MCP-compatible client, authenticate with your Apify account, and select this Actor as an available tool — an agent can then start a run and read the resulting leads directly inside the conversation.
No-code tools (n8n, Make, LangChain)
In n8n or Make, use an HTTP Request node pointed at this Actor's Apify run-sync API endpoint, with your leadTargets and other fields in the JSON body, to drop enriched leads straight into a CRM or spreadsheet workflow. In LangChain, wrap the Apify API call in a custom tool (or use Apify's own LangChain integration) so an agent can call this scraper and receive typed lead rows as tool output.
Is it legal to scrape LinkedIn employee data?
Scraping publicly available LinkedIn profile data — the same information any logged-out visitor can see — is generally permitted, and this Actor returns only that public data; it does not access anything behind LinkedIn's login wall. Employee names, headlines, and job titles are personal data under GDPR and CCPA, so if you store or process this data on EU or California residents you need a lawful basis (e.g. legitimate interest for B2B prospecting) and must honor deletion/access requests. LinkedIn's own Terms of Service also restrict automated scraping of its site, independent of data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What LinkedIn employee fields does LinkedIn Company Employees: AI & Lead Enrichment Scraper return?
It returns fullname, headline, current_company, isDecisionMaker, and seniorityTier for every profile, plus 28 more fields — see the full fields table above.
Does it require a LinkedIn account or login?
No. Every request — company pages, /people, /about, and each profile — is a plain logged-out HTTP fetch. The source code never sends a LinkedIn cookie, session token, or credential.
Can I scrape multiple LinkedIn companies at once, and how many employees per run?
Yes — leadTargets accepts one company URL or keyword per line, processed sequentially in the same run, each capped at maxLeadsPerCompany (1–10,000). Total employees per run is roughly the number of targets multiplied by that cap.
What happens if a profile is private, blocked, or doesn't exist?
The row is still pushed to the dataset with an error field describing what happened — "HTTP 999" for a LinkedIn anti-bot block, "Login required or blocked" for an authwall redirect, "No data extracted" if the page loaded but had no readable profile content, or "Max retries exceeded" after retries are exhausted. These rows are not charged.
Does LinkedIn Company Employees: AI & Lead Enrichment Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's reachable through Apify's Actors MCP Server (https://mcp.apify.com) for MCP-compatible clients, and it's callable as a standard HTTP endpoint by any agent framework via the Apify API.
Is the AI lead scoring genuinely AI-generated — and is it actually sentiment analysis?
It is genuinely AI-generated when turned on: with enableAiLeadScoring: true and a valid key, the Actor makes a real API call per profile to your chosen provider (Anthropic Messages API, or the OpenAI-compatible chat-completions endpoint for OpenAI, Gemini, Grok, DeepSeek, Perplexity, or Mistral) and parses the model's JSON response into aiLeadScore, aiIcpFit, aiSeniority, aiDepartment, and aiReasoning. It is not sentiment analysis, despite that word appearing in the Actor's folder name and input-form title — there is no tone/emotion score anywhere in the output. The real feature is an LLM-based ICP-fit and lead-scoring classification run on the profile's headline text. It is off by default, so a run with no API key supplied produces zero AI calls and leaves these fields null.
Does it capture full work history or past employers?
No — only the current employer. current_company and companies_detected reflect the company link(s) shown on the profile's top card; the Actor does not parse a full past-positions/experience timeline.
Does LinkedIn Company Employees: AI & Lead Enrichment Scraper return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with consistent field names across runs — no HTML parsing, no selectors. Pass rows directly to an LLM, index them into a vector store, or feed them to an agent tool.
What happens when LinkedIn changes its layout or anti-bot system?
The Actor is maintained and the output schema is designed to stay stable across LinkedIn markup changes, since most fields are read from multiple fallback selectors (meta tags, JSON-LD, and page markup). No specific update turnaround time is published or guaranteed.
Can I use it without managing proxies or browser infrastructure?
Yes. Apify Proxy (residential, US, by default) is wired in and requires no setup of your own; you can override it with your own proxy configuration in the connectionProxy input if you prefer.
Which fields work best for AI training data and RAG indexing?
For RAG, index headline, decisionMakerReason, and aiReasoning — the highest-information free text. For structured training features, use seniorityTier, departmentGuess, isDecisionMaker, and aiLeadScore — all typed primitives that are populated consistently across every row.