Linkedin Lead Scraper With Advanced Filters
Pricing
from $4.99 / 1,000 results
Linkedin Lead Scraper With Advanced Filters
LinkedIn Lead Scraper extracts professional lead data from LinkedIn profiles and search results. Collect names, job titles, companies, locations, and profile URLs. Ideal for B2B lead generation, sales prospecting, recruitment research, and market outreach.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
LinkedIn Lead Scraper — Extract Profiles, Companies and Posts as JSON
Linkedin Lead Scraper With Advanced Filters searches Google for LinkedIn profiles, company pages, posts, articles, and job postings that match your keywords, then pulls out every public email address it finds on the page. Every result comes back as typed, normalized JSON — no HTML, no CSS selectors, no LinkedIn login. Entity-scope, exclude-keyword, and minimum-snippet-length filters strip noise out before a row is ever saved. After this page you'll know exactly which fields the Actor returns, how its filters and proxy fallback behave, and how to wire it into a lead-generation pipeline.
🧭 What is Linkedin Lead Scraper With Advanced Filters?
Linkedin Lead Scraper With Advanced Filters is an Apify Actor that runs keyword searches against Google's index of linkedin.com, reads the title and snippet text Google shows for each matching page, and extracts any public email address that appears in that text. Every row is labelled with the LinkedIn entity type the URL belongs to — profile, company, post, article, or job posting. No LinkedIn account, login, or session cookie is used anywhere in the run, because the Actor never sends a request to linkedin.com itself — only to Google Search.
- 🎯 Scope a run to one entity type — profiles, companies, posts, articles, or job postings
- 🚫 Exclude keywords before a matching result ever reaches the dataset
- 📧 Keep only leads whose email ends in domains you choose
- 📏 Drop empty or near-empty snippets automatically
- 🤖 Callable by any AI agent framework as a plain HTTP call through the Apify API
📦 What data does Linkedin Lead Scraper With Advanced Filters collect?
Every row shares the same eight-field shape (title, description, email, url, network, keyword, descriptionLength, entityType) — what differs by entity type is the LinkedIn sub-path the row was found under and, in practice, what kind of text that page carries.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
Profiles (/in/) | Headline/title text, bio snippet, any public email in that text | title, description, email, entityType: "profile" |
Companies (/company/) | Company page title, about snippet, any listed public email | title, description, email, entityType: "company" |
Posts (/posts/) | Post title, post text snippet, any email mentioned in the post | title, description, email, entityType: "post" |
Articles (/pulse/) | Article headline, opening snippet, any email in the excerpt | title, description, email, entityType: "article" |
Job postings (/jobs/) | Job title, description snippet, any contact email in the listing | title, description, email, entityType: "job" |
Every row also carries url (the exact LinkedIn link), network (source label, e.g. Linkedin.com), keyword (the search term that produced it), and descriptionLength (character count of description, the value the minimum-snippet-length filter checks against).
└── Need more LinkedIn data?
If you need structured company firmographics rather than a Google snippet, API-Empire also publishes Linkedin Company Profile Scraper With Firmographic Filters for detailed company-page data, and Linkedin Mass Company Profile Finder With Multi-Engine Search for bulk company discovery across multiple search engines. Both sit alongside this Actor for building out a fuller LinkedIn data pipeline.
How does Linkedin Lead Scraper With Advanced Filters differ from the official LinkedIn API?
LinkedIn's own developer platform splits access into separate business lines — Consumer, Marketing, Sales, Learning, Talent, and Compliance — each gated behind its own "Apply for Access" or "Request Access" step before you can call anything (LinkedIn API documentation, learn.microsoft.com/en-us/linkedin, checked 2026-07-30); Linkedin Lead Scraper With Advanced Filters runs immediately from an Apify account, with no LinkedIn-side approval at all.
| Feature | LinkedIn's Official API | Linkedin Lead Scraper With Advanced Filters |
|---|---|---|
| Access model | Per-business-line approval (Consumer, Marketing, Sales, Learning, Talent, Compliance) | Runs immediately with any Apify account |
| Keyword search across public content | Not offered as a general endpoint — each business line only covers its own scoped data | searchTerms lets you query any keyword across LinkedIn's Google-indexed pages |
| Email discovery | Not part of any published business line | Extracts any public email address found on the page; the row is only saved when one is found |
| Entity coverage | Scoped per business line (e.g. Talent for jobs, Marketing for ad accounts) | Profiles, companies, posts, articles, and job postings in a single run, labelled by entityType |
| Setup time | Application/approval process documented per business line | No LinkedIn-side approval — set input and start the run |
If you already hold approved access to one of LinkedIn's partner APIs for your specific use case (ads reporting, applicant tracking, sign-in), that API is the right and compliant choice for that workflow. For keyword-driven public lead discovery across profiles, companies, posts, articles, and jobs — something LinkedIn's own API does not offer as a self-serve product — Linkedin Lead Scraper With Advanced Filters is the practical option.
Why do developers and teams scrape LinkedIn for leads?
├── For sales and business development teams
A sales team building an outbound list feeds searchTerms like "head of growth" or "founder", sets entityScope to profiles, and adds leadEmailDomains to keep only work-domain addresses. excludeKeywords such as "recruiter" or "agency" filters out noise before a row is ever saved, so the dataset that lands in the CRM already matches the ICP rather than needing a manual cleanup pass after export.
├── For recruiters and talent sourcers
Setting entityScope to jobs surfaces public job postings matching a role and location, while a separate run scoped to profiles with matching keywords finds candidates who list relevant skills in their headline or summary text. Because only rows with a found public email are kept, a sourcer gets a contactable shortlist rather than a list of names with no way to reach them.
├── For AI engineers and agent builders
An outbound or research agent can call this Actor as a tool step, pass searchTerms and entityScope as parameters the agent itself decides, and receive typed JSON rows (title, description, email, url, entityType) it can push straight into a vector store or a CRM write step — no HTML parsing or selector maintenance inside the agent loop.
└── For marketers and growth teams
Scoping to posts or articles with topic keywords finds people actively publishing about a subject, which is useful for identifying warm engagement targets or tracking who is discussing a competitor or category term in public LinkedIn content — combined with minDescriptionLength to skip one-line, low-context hits.
How to scrape LinkedIn leads (step by step)
- Open Linkedin Lead Scraper With Advanced Filters on the Apify Store and start a new run from the Apify Console.
- Add at least one term to Search Terms (
searchTerms) — the run logs an error and exits with zero leads if this list is empty. - Set Entity Scope, Exclude Keywords, Minimum Snippet Length, Target Location, and Lead Email Domains to narrow the search — all optional; defaults keep the original unrestricted behavior.
- Start the run.
- Download the dataset as JSON, CSV, or Excel from the Apify Console, or pull it programmatically with the Apify API or
apify-client.
└── What to do when Google or LinkedIn change their page structure
The Actor reads Google's result markup structurally — it locates each result's own <h3> heading and its bounding container rather than matching Google's rotating CSS class names — so routine layout tweaks don't require a rebuild. It is maintained, and output field names stay stable, so integrations built against entityType, title, description, url, and email keep working without changes on your end.
⬇️ Input
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
searchTerms | No | array | stringList | List of terms to search for (e.g. ["marketing", "founder", "business"]). Extracts any public email found in matching results. Legacy alias: keywords. |
targetLocation | No | string | textfield | Narrow the search to a location (e.g. "London", "New York"). Empty = global. Legacy alias: location. |
leadEmailDomains | No | array | stringList | Keep only leads whose email ends with one of these domains (e.g. ["@gmail.com"]). Empty = keep every domain. Legacy alias: emailDomains. |
maxLeadsPerTerm | No | integer | min 1, max 5000 | Maximum leads to collect per search term. Default applied in code: 20. Legacy alias: maxEmails. |
entityScope | No | string (enum) | any, profiles, companies, posts, articles, jobs; default any | Restrict results to one LinkedIn entity type instead of a mixed set. |
excludeKeywords | No | array | stringList | Terms that must NOT appear in a result; matching results are skipped before they reach the output. |
minDescriptionLength | No | integer | min 0, max 1000, default 20 | Drop results whose text snippet is empty or shorter than this many characters. 0 disables the filter. |
keywords | No | array | stringList (legacy) | Same as searchTerms. Kept for backward compatibility. |
location | No | string | textfield (legacy), default "" | Same as targetLocation. |
emailDomains | No | array | stringList (legacy) | Same as leadEmailDomains. |
maxEmails | No | integer | min 1, max 5000, default 20 (legacy) | Same as maxLeadsPerTerm. |
platform | No | string (enum) | Linkedin; default Linkedin (legacy) | Kept for backward compatibility; only Linkedin is a valid value. |
engine | No | string (enum) | legacy; default legacy | Kept for backward compatibility; only legacy is currently supported. |
proxyConfiguration | No | object | proxy editor, prefill {"useApifyProxy": true} | Proxy source for the underlying search requests. Honored as configured; if left at the default (or no explicit group/URL/country is set), the Actor falls back to its own GOOGLE_SERP proxy group so runs still return results out of the box. |
No parameter is schema-required, but the run has no effect without at least one value in searchTerms (or its legacy alias keywords).
Example input:
{"searchTerms": ["marketing director", "growth lead"],"targetLocation": "London","leadEmailDomains": ["@gmail.com"],"maxLeadsPerTerm": 50,"entityScope": "profiles","excludeKeywords": ["recruiter"],"minDescriptionLength": 20,"proxyConfiguration": { "useApifyProxy": true }}
Common pitfall: leadEmailDomains (and its legacy alias emailDomains) is matched with a plain string suffix check, not a validated domain parser — always include the leading @, as in the "@gmail.com" prefill. A bare fragment like "ail.com" would also match every "gmail.com" address, since the check only tests whether the email string ends with what you typed.
⬆️ Output
Every pushed row is typed JSON with a stable, eight-field schema, exportable as JSON, CSV, or Excel directly from the dataset. Only rows where a public email address was actually found are saved — a matching page with no visible email in its title or snippet is discarded before it ever reaches the dataset, so email is never blank in the output.
└── Scraped lead
{"entityType": "profile","network": "Linkedin.com","keyword": "marketing director","title": "Jane Doe - Marketing Director - Example Co | LinkedIn","description": "Marketing director with 10+ years experience in B2B growth. Contact: jane.doe@examplecorp.com","descriptionLength": 96,"url": "https://www.linkedin.com/in/jane-doe-example","email": "jane.doe@examplecorp.com"}
The shape above is identical for every entityType value — only url, title, description, and entityType change in practice when a row is a company page, post, article, or job posting instead of a profile (e.g. "entityType": "job" with a url under /jobs/ and a job-listing snippet in description).
How does Linkedin Lead Scraper With Advanced Filters compare to other LinkedIn scrapers?
| Feature | Linkedin Lead Scraper With Advanced Filters | Generic hand-rolled scraper |
|---|---|---|
| Output format | Typed, normalized JSON with a stable 8-field schema | ❌ Raw HTML you parse yourself, re-parsed after every layout change |
| Entity coverage | ✅ Profiles, companies, posts, articles, and jobs in one run, labelled by entityType | Usually built for one URL pattern at a time |
| Precision filters | ✅ entityScope, excludeKeywords, minDescriptionLength, leadEmailDomains built in | Hand-coded and separately maintained |
| Proxy / anti-bot handling | ✅ Built-in GOOGLE_SERP proxy pool with rotation and retry on block | ❌ Sourced, configured, and monitored separately |
| Schema stability | ✅ Field names fixed by the Actor's row-building code | Breaks silently when the scraper author renames a variable |
If you're building an AI agent or RAG pipeline, the output-format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.
How many leads can you scrape with Linkedin Lead Scraper With Advanced Filters?
Up to 5000 leads per search term — maxLeadsPerTerm's schema maximum — multiplied by however many terms you list in searchTerms; there is no additional combined cap across terms in the Actor itself. Results page forward through Google's search results in increments of 10 (Google's own results-per-page size) until either maxLeadsPerTerm leads are collected for that term, or five consecutive pages in a row return zero qualifying leads, whichever happens first. That empty-page cutoff means a narrow or unusual keyword can stop well short of your maxLeadsPerTerm setting — Google's own index coverage of linkedin.com, not the Actor, decides how many matching, email-bearing results exist for a given term.
Integrate Linkedin Lead Scraper With Advanced Filters and automate your workflow
Linkedin Lead Scraper With Advanced Filters works with any language or tool that can send an HTTP request.
├── REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("<your-username>/linkedin-lead-scraper-with-advanced-filters").call(run_input={"searchTerms": ["marketing director"],"entityScope": "profiles","maxLeadsPerTerm": 50,})for lead in client.dataset(run["defaultDatasetId"]).iterate_items():print(lead["title"], lead["email"])
Works in Python, Node.js, Go, Ruby, cURL — anything that can call the Apify API.
└── Automation platforms (n8n, Make)
Apify publishes official integrations for both Make and n8n that can run any published Actor by ID (apify.com/integrations, checked 2026-07-30). In Make, add the Apify module, choose "Run Actor," and point it at this Actor; in n8n, add the Apify node the same way. Map searchTerms from an upstream step — a form submission, a spreadsheet row, or a CRM trigger — so new leads land directly in your pipeline without a manual export step.
Is it legal to scrape LinkedIn for leads?
Scraping publicly available LinkedIn content is generally permitted, but the emails this Actor collects are personal data, so data-protection law — not just LinkedIn's terms — governs what you can do with them afterward. Linkedin Lead Scraper With Advanced Filters returns only content that Google has already indexed and displays without a login; it never accesses login-gated profile details or LinkedIn's own contact-info panel. Because leads are tied to identifiable individuals, using them for outreach falls under GDPR and CCPA: you need a lawful basis to process and store the data (commonly legitimate interest for B2B contact), and must honor opt-out and erasure requests. LinkedIn's own User Agreement separately restricts automated data collection regardless of public accessibility. Consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Linkedin Lead Scraper With Advanced Filters work without a LinkedIn account?
Yes. No LinkedIn account, login, or session cookie is used at any point — the Actor queries Google Search, not linkedin.com, and reads only what Google already shows publicly.
How often is the scraped data updated?
Every run performs a live Google search at that moment — there is no caching layer. How current the result is depends on when Google last crawled and indexed that specific LinkedIn page, not on this Actor.
What happens when a search term returns no leads?
The Actor stops a search term after five consecutive result pages with no qualifying leads (an empty result page, or a page whose only matches fail the domain, description-length, or dedup filters), and moves on to the next term. This is normal for narrow, geography-specific, or highly filtered searches — try a broader or related term rather than assuming an error occurred.
Can I scrape private or login-gated LinkedIn content?
No. Only content Google has publicly indexed is reachable — private profiles, LinkedIn's contact-info panel, InMail, and anything behind LinkedIn's login wall are never accessed.
What do I need to run this Actor?
Just an Apify account and at least one search term. No LinkedIn credentials are required, and if you don't configure a proxy, the Actor falls back to its own built-in GOOGLE_SERP proxy group automatically.
Does Linkedin Lead Scraper With Advanced Filters work for AI agent workflows and LLM pipelines?
Yes — it's callable as a plain HTTP endpoint through the Apify API by any agent framework. Every response is typed JSON (title, description, email, url, entityType) with no parsing step required before passing it to an LLM.
How does Linkedin Lead Scraper With Advanced Filters handle anti-bot defenses?
The Actor's defenses target Google Search's own automated-query detection, since it never sends a request to linkedin.com directly: rotating user agents and accept-language headers per request, randomized delays between requests, up to three attempts per page with a fresh proxy on each retry, and a block detector that checks the response status and page content for known block signals (e.g. a captcha or "unusual traffic" page) before treating a page as valid.
How does Linkedin Lead Scraper With Advanced Filters compare to other LinkedIn scrapers?
See the comparison table above — the concrete, checkable differences are output format (typed JSON vs. raw HTML you parse yourself), entity coverage (five LinkedIn entity types in one run vs. typically one URL pattern), and built-in precision filters and proxy handling vs. building and maintaining those yourself.
Does Linkedin Lead Scraper With Advanced Filters return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names — no HTML, no selectors, no parsing. Pass it directly into an LLM context window, index it into a vector store, or route it through an agent tool call.
Can I use Linkedin Lead Scraper With Advanced Filters without managing proxies?
Yes. If you leave proxyConfiguration at its default or don't set an explicit proxy group, URL, or country, the Actor automatically falls back to its own working GOOGLE_SERP proxy pool so runs still return results out of the box.
What happens when Google changes its search-result layout?
The scraper is maintained, and the output schema stays stable — field names and types don't change on your end. It parses Google's results structurally (by locating each result's own heading and bounding container) rather than by matching specific CSS class names, which is more resilient to routine layout tweaks.
💬 Your feedback
Found a bug or a field that doesn't match what's documented here? We want to know. Reach out through the Actor's page on the Apify Store or your API-Empire support channel — issues get triaged and this README is kept in sync with what the Actor actually returns.