Linkedin Lead Scraper: Seniority & Department Filters avatar

Linkedin Lead Scraper: Seniority & Department Filters

Pricing

$19.99/month + usage

Go to Apify Store
Linkedin Lead Scraper: Seniority & Department Filters

Linkedin Lead Scraper: Seniority & Department Filters

LinkedIn Lead Scraper extracts targeted leads from LinkedIn profiles, company pages, and search results. Collect names, job titles, companies, profile URLs, locations, and other public details to build qualified B2B prospect lists for sales, recruitment, networking, and marketing campaigns. 💼📊

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

8 days ago

Last modified

Share

LinkedIn Lead Scraper — Seniority, Department and Public Email Data

This LinkedIn lead scraper finds publicly indexed LinkedIn profiles and posts and returns whatever title, description snippet, email address, and URL each result exposes — tagged with the exact seniority level and department you searched for. Instead of hand-typing role phrases like "VP Sales" or "Marketing Director", pick a seniority level (C-Level, VP, Director, Manager, Founder) and a department (Sales, Marketing, Engineering, HR, Operations) from structured dropdowns, and every combination is searched automatically. Built for sales development reps, recruiters, and account-based-marketing teams building targeted contact lists — streamed straight to your dataset, one lead at a time.

What is the LinkedIn Lead Scraper?

This Actor does not call LinkedIn directly and needs no LinkedIn account, cookie, or API key. It runs Google Search queries scoped to site:linkedin.com, then parses the organic results page for anchors that resolve to a real linkedin.com URL and extracts the title, snippet text, and any email address visible in that snippet. Results are streamed to the dataset row by row as they're found.

Key capabilities, all read from the source:

  • 🎯 Structured decision-maker targeting — select one or more seniority levels and/or departments and the Actor cross-builds every combination (e.g. selecting VP + Director with Sales + Marketing produces four separate searches: VP Sales, VP Marketing, Director Sales, Director Marketing).
  • 🔑 Plain keyword search — a free-text keywords list still works on its own, or alongside the seniority/department selectors, in the same run.
  • 📧 Email domain filtering — keep only leads whose extracted email ends in a domain you specify (e.g. @gmail.com).
  • 📍 Location filtering — narrow every underlying search to a location string, or leave it empty to search globally.
  • 🧹 Noise filtering built into the query — LinkedIn's own marketing, help, careers, and developer-portal subdomains (11 of them) and non-content paths (login, legal, groups, job-collection hubs, etc.) are excluded from results, so generic role searches don't surface LinkedIn's corporate pages instead of real profiles.
  • 🌐 Proxy rotation on block — requests run through Apify Proxy's GOOGLE_SERP group by default and rotate to a fresh IP automatically on a detected block or failed request, retrying up to 3 times per page.

What data can I extract with the LinkedIn Lead Scraper?

Every pushed row carries the same nine fields — no hidden columns, no dataset-view subset:

FieldExample ValueUse Case
network"Linkedin.com"Constant source label — useful when unioning with other scrapers' output
keyword"VP Sales"The literal keyword or auto-built role phrase that produced this row
seniorityLevel"vp"Seniority level searched for (c_level/vp/director/manager/founder), or null for a plain-keyword row
department"sales"Department searched for (sales/marketing/engineering/hr/operations), or null for a plain-keyword row
title"Jane Doe - VP of Sales - Acme Corp | LinkedIn"The result's headline as rendered by Google
description"Leading enterprise sales for Acme Corp across North America..."The public snippet text below the headline
url"https://www.linkedin.com/in/jane-doe-example"Direct link to the profile or post
email"jane.doe@acmecorp.com"The public email address found in the result's title or snippet
scrapedAt"2026-07-30T12:00:00+00:00"ISO-8601 UTC timestamp of when the row was collected

🎯 Seniority and department tags

The seniorityLevel and department columns describe what was searched for, not a verified attribute of the person the row belongs to. LinkedIn's public search results carry no confirmed job-title field this Actor can read — a row tagged seniorityLevel: "vp" simply means it came back from a search built around the VP targeting term. This lets you segment a single run's output by targeting combination (e.g. pull just the department: "marketing" rows) without re-running anything, but it is a targeting label, not a validated claim about the individual.

📧 Email and keyword targeting fields

email is what you filter and segment on downstream — the emailDomains input narrows collection to leads whose address ends in a domain you list, and any row without a discoverable email is never pushed at all. keyword records which of your search targets (a plain keyword or an auto-built seniority/department phrase) produced each row, so results from a multi-target run can be split back out by origin.

Why not build this LinkedIn scraper yourself?

Google actively blocks scripted search traffic, so a DIY version needs proxy rotation, IP-retry logic, and randomized headers just to keep pulling pages — this Actor rotates to a fresh proxy IP and retries up to 3 times whenever a response comes back small and carries a block signal ("unusual traffic", /sorry/) or the request itself fails. Google also renders organic results with obfuscated, frequently-changing CSS class names, so the parser here scans every anchor structurally (via stable container attributes like data-sncf and <h3>-boundary detection) rather than relying on class selectors that break on the next layout change, and unwraps Google's /url?q= tracking redirects to recover the real destination.

On top of that, LinkedIn itself hosts 11 non-profile subdomains — business., learning., help., careers., developer., press., news., blog., sales., about., and their alternates — plus login walls, legal pages, group and job-collection hubs on the main domain, all of which rank highly for generic role/seniority searches and would otherwise crowd out genuine profile and post results. And a usable email still has to be pulled out of rendered snippet text, which means handling whitespace-obfuscated addresses, stray "@" mentions in unrelated prose, and placeholder addresses like yourname@example.com without either missing real emails or returning junk.

Building and maintaining all of that yourself is a standing engineering cost. This Actor exists so you don't have to — you configure seniority, department, or keyword targets and get structured rows back.

How to use data extracted from LinkedIn

Sales development and prospecting teams

Set seniorityLevel and department to your ideal-customer profile (e.g. ["vp", "director"] and ["sales", "marketing"]), add location if you're targeting a region, and set emailDomains to exclude free-mail providers if you only want corporate addresses. The run searches every seniority/department combination, tags each row with the combination that produced it, and streams results to the dataset — ready to export into an outbound sequencing tool or CRM import.

Recruiting and staffing agencies

Run one Actor call per open role, per client, using department (e.g. engineering) alone or combined with a seniority level, and a keywords entry for a specific skill. Because every row is tagged with the search that produced it, results for different clients or roles collected in separate runs stay cleanly attributable without cross-contamination.

Market research and account-based marketing

Run the same seniority/department combination across a list of location values (one run per city or region) to compare how many discoverable leads with public emails a role/department combination surfaces per market, using the keyword and department fields to group the resulting dataset rows.

AI agents and automated pipelines

Because the Actor takes structured JSON input and returns structured JSON rows, it can be called as a tool inside an agent pipeline — an agent supplies seniorityLevel/department/location and reads back email/title/url for downstream enrichment or outreach-drafting steps, with no HTML parsing on the agent's side.

🔼 Input sample

ParameterRequiredTypeDescriptionExample Value
keywordsNoarrayFree-text keywords to search for on LinkedIn. Each keyword is searched independently; matching rows are tagged with null seniority/department.["marketing", "founder"]
locationNostringRestrict results to a location. Default "" (search globally)."New York"
emailDomainsNoarrayOnly keep leads whose email ends in one of these domains. Leave empty to collect all domains.["@gmail.com"]
maxEmailsNointegerMaximum leads to collect per keyword and per seniority/department combination. Minimum 1, maximum 5000, default 20.20
seniorityLevelNoarray (enum)One or more of: c_level, vp, director, manager, founder. Default []. Combined with department to auto-build the search.["vp", "director"]
departmentNoarray (enum)One or more of: sales, marketing, engineering, hr, operations. Default []. Combined with seniorityLevel to auto-build the search.["sales", "marketing"]
proxyConfigurationNoobjectProxy settings. Prefilled with the Actor's working default (useApifyProxy: true, apifyProxyGroups: ["GOOGLE_SERP"]); override only for a specific requirement.{ "useApifyProxy": true }
{
"seniorityLevel": ["vp", "director"],
"department": ["sales", "marketing"],
"location": "New York",
"emailDomains": ["@gmail.com"],
"maxEmails": 20
}

Common pitfall: maxEmails is a per-target cap, not a run-wide total. Selecting seniorityLevel: ["vp", "director"] and department: ["sales", "marketing"] builds four search targets (VP Sales, VP Marketing, Director Sales, Director Marketing); at maxEmails: 20 the run can push up to 80 rows, not 20. Add plain keywords on top and each keyword adds its own maxEmails budget as well.

🔽 Output sample

Results are typed, flat JSON with a consistent 9-key schema on every row — no nested objects. As with any Apify dataset, results can be exported as JSON, CSV, Excel, XML, or RSS directly from the Console or via the API. Only rows where an email address was actually found in the search result are pushed; a matching profile or post with no discoverable email in its snippet is discarded before it reaches the dataset, and a URL already returned once in a run is not returned again for a later search target.

{
"network": "Linkedin.com",
"keyword": "VP Sales",
"seniorityLevel": "vp",
"department": "sales",
"title": "Jane Doe - VP of Sales - Acme Corp | LinkedIn",
"description": "Leading enterprise sales for Acme Corp across North America...",
"url": "https://www.linkedin.com/in/jane-doe-example",
"email": "jane.doe@acmecorp.com",
"scrapedAt": "2026-07-30T12:00:00+00:00"
}

How do you filter and target specific leads?

Free text vs. structured selectors. keywords lets you search any phrase, including terms the Actor's dropdowns don't model (e.g. "chief of staff" or "growth lead"). seniorityLevel/department instead cross-build every seniority × department combination for you and tag each result with exactly which combination produced it — more reliable when your target is a standard role/department pairing, since you don't have to guess the right phrasing.

Scope precision. location adds a quoted location term to every underlying query, scoping all targets — plain keywords and structured combinations alike — to that location at once. emailDomains is applied after the page is parsed, keeping only rows whose extracted email ends in one of the domains you list.

Quality threshold. The only quality gate this Actor applies is the email itself: a result with no extractable email is dropped before it's pushed, so every row in your dataset already has a usable contact address.

Volume controls. maxEmails (1–5000, default 20) caps collection per search target, not per run. Each target pages through results 10 at a time and gives up on that target after 5 consecutive pages return no new, non-duplicate leads — so a narrow target can return fewer rows than maxEmails even at a high setting.

{ "keywords": ["chief of staff", "growth lead"], "maxEmails": 50 }
{
"seniorityLevel": ["c_level", "founder"],
"department": ["engineering"],
"location": "Berlin",
"maxEmails": 25
}
{
"department": ["sales"],
"emailDomains": ["@gmail.com", "@outlook.com"],
"maxEmails": 200
}

▶️ Want to try other LinkedIn scrapers?

Scraper NameWhat it extracts
LinkedIn Company Profile Scraper & Ad Library CreativesLinkedIn company pages plus their Ad Library creatives
LinkedIn Mass Company Profile Finder By Country & NameBulk LinkedIn company profile discovery by country and name
TikTok User Profile Scraper: Business LeadsTikTok profile data framed for business-lead discovery
Realtor.com Agents by Zip Code Scraper With Market AnalyticsReal-estate agent contact directory by zip code, with market analytics

How to extract LinkedIn lead data programmatically

This Actor runs as a standard Apify Actor: one API call with your JSON input, one Apify API token, structured JSON back — no separate signup or credential system.

Python example

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("<your-username>/linkedin-lead-scraper-seniority-and-department-filters").call(
run_input={
"seniorityLevel": ["vp", "director"],
"department": ["sales"],
"maxEmails": 20,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["email"], item["url"])

Export to spreadsheets or CRM

Export the dataset as CSV directly from the Apify Console or via the API, then map columns straight across: title → Contact/Company field, email → Email field, url → LinkedIn Profile URL field, and seniorityLevel/department → segment or list-tag columns for your CRM's targeting filters.

Scraping publicly accessible LinkedIn search results is generally lawful — this Actor reads only pages that are already indexed and publicly visible, it does not log in, bypass an authentication wall, or access private profile data. Because the output includes personal data (individual names, titles, and email addresses), GDPR and CCPA govern how you may store and use it once collected, regardless of how it was gathered: you need a lawful basis for processing, and data-subject rights (access, deletion) still apply. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

No. The Actor searches publicly indexed LinkedIn content through Google Search — no LinkedIn login, cookie, or API key is required, only an Apify account to run it.

Does selecting a seniority level or department guarantee the person actually holds that title?

No. The seniorityLevel and department output fields record what was searched for, not a confirmed fact about the person found — LinkedIn's public search results carry no verified job-title field this Actor can read. Treat them as targeting labels, not validated attributes.

Can I get seniority-level and department tags along with plain-keyword results?

Yes. keywords, seniorityLevel, and department can all be set in the same run — plain-keyword rows are tagged with null seniority/department, and every structured combination is searched and tagged independently, each against its own maxEmails cap.

How accurate is the email data?

The Actor returns the email exactly as it appears in the public search result at request time; it does not verify deliverability. Only results where an email was actually found are pushed, so run a downstream email-verification step before using addresses for outreach at scale.

How many leads can I get per run?

maxEmails (1–5000, default 20) sets the cap per search target — per keyword, and per seniority/department combination — not per run. A run with several keywords and several structured combinations can return several multiples of maxEmails. Each target also stops early after 5 consecutive pages with no new leads, so results can come in below the cap for narrow targets.

What's the difference between using free-text keywords and the seniority/department selectors?

keywords searches whatever phrase you type, independently per entry. seniorityLevel/department instead cross-build every seniority × department combination automatically (selecting 2 seniority levels and 2 departments produces 4 searches) and tag each result with the exact combination that produced it — useful when you want that targeting metadata on the row itself rather than reconstructing it from a keyword string.

Does the Actor flag leads whose profile has since gone private or changed?

No. Each row's scrapedAt timestamp records when it was collected, but the Actor does not re-check or flag profiles after that point — treat older rows as a snapshot and re-run the search targets you rely on periodically for fresher data.

Does this Actor work with Claude, ChatGPT, and AI agent frameworks?

It has no dedicated MCP server. It is a standard Apify Actor reachable over HTTP through the Apify API, so any agent framework that can call a REST endpoint or use the apify-client SDK can invoke it as a tool and read back the JSON dataset.

Conclusion

The LinkedIn Lead Scraper turns seniority and department targeting into a structured input instead of a hand-typed search string, cross-building every combination you select and tagging each result so it stays segmentable after the run. It returns consistent, flat JSON — email, title, snippet, and URL — with no login, cookie, or API key required. Configure your targets, add a location or domain filter if you need one, and run it directly from the Apify Console or the API to start collecting leads.