Linkedin Lead Scraper By Location & Industry avatar

Linkedin Lead Scraper By Location & Industry

Under maintenance

Pricing

$24.99/month + usage

Go to Apify Store
Linkedin Lead Scraper By Location & Industry

Linkedin Lead Scraper By Location & Industry

Under maintenance

Extract potential leads from LinkedIn profiles with the LinkedIn Lead Scraper. Collect names, job titles, company names, profile URLs, locations, and other public profile details in structured format. Ideal for B2B lead generation, sales prospecting, recruitment, and market research.

Pricing

$24.99/month + usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

1

Bookmarked

6

Total users

2

Monthly active users

6 days ago

Last modified

Share

LinkedIn Lead Scraper — Extract Emails by Location and Industry

Linkedin Lead Scraper By Location & Industry searches Google for public LinkedIn pages — profiles, company pages, posts, articles, and job postings — matching any combination of industry and location you supply, and pulls out the contact email visible on each one. Every industry is automatically crossed with every location, so 2 industries × 3 locations run as 6 separate searches in one job, each result tagged with the exact industryMatched / locationMatched pair that found it. Output is structured JSON, ready to load into a CRM, a cold-outreach tool, or an LLM pipeline. The original single-keyword, single-location input still works unchanged.

🧭 What is Linkedin Lead Scraper By Location & Industry?

Linkedin Lead Scraper By Location & Industry is a LinkedIn lead scraper that queries Google (site:linkedin.com) for every industry/location pairing you provide and extracts the contact email, page title, and snippet from each matching result. No LinkedIn account or login is required — every result comes from Google's public index, not from an authenticated LinkedIn session, and the Actor never touches LinkedIn's login, checkpoint, or authwall pages.

  • 🏭 Crosses a list of industries (or role/keyword groups) with a list of locations, producing one targeted search per combination
  • 📧 Extracts the first plausible email address found in each result's title or snippet text
  • 🌍 Tags every lead with the exact locationMatched and industryMatched values that produced it
  • 🔁 Falls back to the original actor's single keywords / location inputs when the new list fields are left empty
  • 🚫 Filters out LinkedIn's own help, learning, careers, developer, press, and marketing-solutions subdomains and pages so generic industry keywords don't surface corporate noise instead of real profiles, company pages, posts, or job listings
  • 🎯 Filters by email domain and caps the number of emails collected per combination

📊 What data can you get with Linkedin Lead Scraper By Location & Industry?

Every result is one lead: a public LinkedIn page that matched your search and had an extractable email address.

Result TypeExtracted FieldsPrimary Use Case
Lead (LinkedIn page + matched email)network, keyword, title, description, url, email, locationMatched, industryMatchedBuilding a segmented, targeted contact list for outreach or CRM import

🎯 Location × Industry Matrix Tagging

This is the capability the legacy single-keyword actor doesn't have: instead of one query per run, industries and locations are crossed into every combination, and each lead carries the exact pair that produced it. A run with ["marketing", "real estate"] industries and ["London", "New York"] locations searches all four combinations in one job and tags each row accordingly:

{
"keyword": "real estate",
"locationMatched": "New York",
"industryMatched": "real estate",
"email": "contact@example.com"
}

That means a single dataset can be filtered or grouped by territory and vertical without re-running anything — group by industryMatched for a vertical-specific list, or by locationMatched for a regional campaign.

🗂️ Any Public LinkedIn Page Type, Not Just Profiles

No content-type include-list is applied — the Actor accepts profiles, company pages, posts, articles, and job postings alike, and only excludes known non-content paths (login, help, legal, directory, groups, job-search hubs, premium/advertising marketing pages). That means a lead can come from a personal profile headline, a company "About" page, a public post, or a job listing — anywhere LinkedIn happens to render a visible email in the indexed text.

🛠️ Why not build this yourself?

Google's results page markup has no stable class names — it rotates obfuscated CSS on every deploy and varies by locale, so a hand-rolled scraper built against today's HTML breaks on the next Google update. Add in anti-bot escalation (temporary blocks that require a fresh proxy identity and a retry, which this Actor handles with up to 3 attempts per page and automatic proxy rotation), the cost of maintaining a residential/datacenter proxy pool, and the fiddly work of reconciling obfuscated or whitespace-broken email addresses against the surrounding page text — and a one-off script becomes an ongoing maintenance job. Linkedin Lead Scraper By Location & Industry already does all of this, plus the location × industry matrix sweep, in one configurable run.

⚙️ How to scrape LinkedIn for leads by location and industry

  1. Open Linkedin Lead Scraper By Location & Industry on the Apify Console (or via apify_client / the Apify API).
  2. Fill in industries with your target industries or role keywords, and locations with your target territories. At least one industry or keyword is required — leaving both industries and the legacy keywords empty stops the run with an error and no results.
  3. Optionally set emailDomains to keep only specific domains, and maxEmails to cap how many emails are collected per combination (default 20, max 5000).
  4. Start the run.
  5. Download results as JSON or CSV from the run's dataset, or stream them via the API as they're produced.
{
"industries": ["marketing", "real estate"],
"locations": ["London", "New York"],
"emailDomains": ["@gmail.com"],
"maxEmails": 20
}

Running multiple queries in one job

Batching is built into the two list inputs: every value in industries is crossed with every value in locations, so there's no need for multiple runs or an uploaded list — a run with 3 industries and 4 locations searches all 12 combinations sequentially in a single job, each pushing its own tagged results as they're found.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
industriesNoArray of stringsList of industries, roles, or keyword groups to search. Each one is crossed with every location. Leave empty to fall back to the legacy keywords field.["marketing", "real estate"]
locationsNoArray of stringsList of locations/territories to search. Each one is crossed with every industry. Leave empty to search globally, or to fall back to the legacy location field.["London", "New York"]
keywordsNoArray of stringsLegacy input from the original Linkedin Lead Scraper. Only used when industries is left empty.[]
locationNoStringLegacy single-location filter. Only used when locations is left empty. Default: ""."Berlin"
emailDomainsNoArray of stringsOnly keep emails from these domains. Leave empty to collect all email domains.["@gmail.com"]
maxEmailsNoIntegerMaximum number of emails to collect per location+industry combination. Default 20, minimum 1, maximum 5000.20
proxyConfigurationNoObject (proxy editor)Proxy selection, used exactly as configured. Defaults to Apify Proxy with the GOOGLE_SERP group when left empty.{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}

Example input:

{
"industries": ["marketing", "real estate"],
"locations": ["London", "New York"],
"keywords": [],
"location": "",
"emailDomains": ["@gmail.com"],
"maxEmails": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["GOOGLE_SERP"]
}
}

⚠️ Common pitfall: industries takes priority over legacy keywords, and locations takes priority over legacy location — if you fill in both the new and legacy fields, the legacy ones are silently ignored. Fill in one pair or the other, not both.

⬆️ Output

Results are pushed to the Actor's dataset as typed JSON, one row per lead, with a consistent 8-field schema across every run. The dataset can be exported as JSON, CSV, Excel, HTML, RSS, or XML from the Apify Console or API.

Each pushed row is charged once as a row_result event. No accounting or error rows are ever pushed — a row only reaches the dataset (and only gets charged) after it has already passed the email-match and domain filters, so every charged row carries a real, filtered email address.

Scraped results

[
{
"network": "Linkedin.com",
"keyword": "marketing",
"title": "Jane Doe - Marketing Director - Acme Co | LinkedIn",
"description": "Marketing director based in London focused on B2B demand generation. Reach me at jane.doe@example.com for partnership inquiries.",
"url": "https://www.linkedin.com/in/janedoe/",
"email": "jane.doe@example.com",
"locationMatched": "London",
"industryMatched": "marketing"
},
{
"network": "Linkedin.com",
"keyword": "real estate",
"title": "Metro Realty Group | LinkedIn",
"description": "Commercial real estate brokerage serving the New York metro area. Contact: info@metrorealtygroup.com",
"url": "https://www.linkedin.com/company/metro-realty-group/",
"email": "info@metrorealtygroup.com",
"locationMatched": "New York",
"industryMatched": "real estate"
},
{
"network": "Linkedin.com",
"keyword": "marketing",
"title": "John Smith - Growth Marketing Lead | LinkedIn",
"description": "Growth marketer, New York. Open to consulting work — johnsmith.growth@example.com",
"url": "https://www.linkedin.com/in/johnsmithgrowth/",
"email": "johnsmith.growth@example.com",
"locationMatched": "New York",
"industryMatched": "marketing"
}
]

💼 How can I use the data extracted with Linkedin Lead Scraper By Location & Industry?

  • 📈 Sales and business development teams: build a targeted outreach list segmented by industryMatched and locationMatched, and import email, title, and url straight into a CRM or cold-email tool.
  • 📣 Marketing and demand-gen teams: slice a single run's output by territory or vertical to feed account-based marketing lists without launching a separate scrape per segment.
  • 🤖 AI engineers and LLM developers: pass the structured JSON to an agent as grounding context — a lead-qualification agent can read title and description alongside email before drafting outreach.
  • 🔬 Market researchers: track which industries and locations surface the most publicly discoverable contacts, using combo_counts-style grouping of industryMatched × locationMatched.

📈 How do you monitor new leads by location and industry over time?

Public LinkedIn pages change constantly — new profiles get indexed, existing ones update their visible contact info, and old ones drop out of Google's index. Re-running the same industries / locations combination periodically lets you track what's new since the last run, rather than treating each run as a one-off snapshot.

The fields to diff between runs are url and email: a url that didn't appear in the previous run's dataset is a newly discovered lead; an email that changed for the same url means the page's visible contact info was updated. Keep the locationMatched / industryMatched pair as your grouping key so you can alert per segment rather than on the whole dataset at once.

A practical workflow: schedule a run across your standing industry/location list using Apify's Schedule feature, export the new dataset after each run, and diff it against the previous export (by url) to isolate the leads that are genuinely new before pushing them into your outreach pipeline.

🔌 Integrate Linkedin Lead Scraper By Location & Industry and automate your workflow

Linkedin Lead Scraper By Location & Industry works with any language or tool that can send an HTTP request through the Apify API.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("<actor-id>").call(run_input={
"industries": ["marketing", "real estate"],
"locations": ["London", "New York"],
"maxEmails": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["email"], item["industryMatched"], item["locationMatched"])

Scheduled monitoring and delivery

Use Apify's built-in Schedule feature to trigger runs on a recurring cron interval without manual intervention, and Apify webhooks to fire on run completion so a downstream system is notified as soon as a new batch of leads lands in the dataset.

Scraping publicly accessible LinkedIn pages is generally permissible — this Actor only reads what Google has already indexed and what any visitor could see without logging in; it never accesses LinkedIn's login, checkpoint, or authwall pages. In hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019, on remand 2022), the Ninth Circuit held that scraping publicly available LinkedIn profile data did not violate the Computer Fraud and Abuse Act. Because this Actor extracts email addresses tied to identifiable individuals, that output is personal data, and GDPR/CCPA obligations attach to how you store, process, and use it — not to the act of collection alone. Scraping for internal monitoring or one-off prospecting carries a different risk profile than bulk storage or resale of the collected data. Consult your legal team for commercial use cases involving bulk data storage.

❓ Frequently asked questions

Can I target specific cities or countries?

Yes — fill locations with a list of any city, region, or country names (e.g. ["London", "New York", "Berlin"]). Leave it empty to search globally, or use the legacy single location string field instead.

How many industries and locations can I combine in one run?

There's no fixed cap on the length of industries or locations in the input schema — every value in one list is crossed with every value in the other, so the number of searches grows multiplicatively (3 industries × 4 locations = 12 searches). ⚠️ More combinations mean a longer run and more charged row_result events, since each is a separate Google search sequence.

How does Linkedin Lead Scraper By Location & Industry handle Google's anti-bot measures?

It retries up to 3 times per page, rotating to a fresh proxy identity between attempts when a response is flagged as blocked (a non-200 status, or a small response body containing Google's block phrasing). Proxy traffic defaults to Apify Proxy's GOOGLE_SERP group unless you supply your own proxyConfiguration.

Does Linkedin Lead Scraper By Location & Industry tag each lead with the search that found it?

Yes — every row carries locationMatched and industryMatched, the exact pair from your input that produced that result, so a single run's dataset can be filtered or grouped by territory and vertical without re-running anything.

How many results does Linkedin Lead Scraper By Location & Industry return per combination?

Up to maxEmails per industry/location combination (default 20, maximum 5000) — but only pages with an extractable email count toward that limit. The Actor stops searching a combination early after 5 consecutive result pages produce no matching email.

Does this bypass LinkedIn's login or paywalls?

No. The Actor explicitly excludes LinkedIn's login, checkpoint, and authwall URL paths from its results, and never authenticates to LinkedIn — every result comes from Google's public index of already-public pages.

How do I use this to monitor new leads by industry and location over time?

Schedule the same industries / locations combination to run on a recurring basis, then diff the new dataset against the previous one by url to isolate genuinely new leads before adding them to your outreach list. See "How do you monitor new leads over time" above.

Does Linkedin Lead Scraper By Location & Industry work with Claude, ChatGPT, and AI agent frameworks?

Yes, as an HTTP endpoint callable through the Apify API from any agent framework — an agent can trigger a run with a query set, poll the dataset, and use the returned JSON as grounding context before drafting outreach or answering a question about lead coverage.

Can I use this without managing proxies or a LinkedIn account?

Yes. No LinkedIn account, login, or cookies are required — searches run against Google, not LinkedIn directly. Proxy handling is built in via Apify Proxy (GOOGLE_SERP group by default); you only need an Apify account to run the Actor.

What happens to my old keyword/location inputs from the original actor?

They still work. If industries is left empty, the Actor falls back to the legacy keywords list; if locations is left empty, it falls back to the legacy single location string. Existing integrations built against the original single-keyword actor don't need to change.

💬 Your feedback

Found a bug or a field that's missing something you need? Use the Issues tab on this Actor's Apify Console page to let the Scrapier team know — it's the fastest way to get a fix or a new field considered.