LinkedIn Public Profile Search Scraper
Pricing
from $0.03 / 1,000 profile results
LinkedIn Public Profile Search Scraper
Find public LinkedIn people profile URLs from keyword, title, company, and location searches. Export names, headlines, snippets, query, and rank.
Pricing
from $0.03 / 1,000 profile results
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
9
Monthly active users
11 days ago
Last modified
Categories
Share
Find public LinkedIn people profile URLs from keyword, title, company, and location searches. This actor is built for top-of-funnel discovery: give it recruiter or sales queries and it returns public search-result metadata for LinkedIn /in/ profiles.
It does not log in to LinkedIn, does not scrape private LinkedIn people search pages, and does not require cookies. The actor uses public search-result surfaces to discover profile URLs and useful snippets.
What does LinkedIn Public Profile Search Scraper do?
LinkedIn Public Profile Search Scraper searches the public web for LinkedIn profile results that match your query.
Typical input queries include:
software engineer Berlinhead of sales SaaS Londonfounder fintech New Yorksite:linkedin.com/in product manager climate tech
For each public result, the actor saves:
- profile URL
- parsed name
- parsed headline or title
- best-effort company
- best-effort location
- public search snippet
- source query
- result rank
- timestamp
Who is it for?
This actor is useful for teams that need repeatable profile discovery without maintaining their own SERP parser.
- 🧑💼 Recruiters building candidate sourcing lists
- 📣 SDRs searching for decision makers by role and market
- 🏢 Agencies preparing lead lists for niche campaigns
- 📊 Data teams enriching an existing company or keyword workflow
- 🧪 Growth teams testing ICP and persona keywords
Use this actor when you do not yet know the exact LinkedIn profile URLs. If you already have URLs and need profile enrichment, use a profile enrichment actor instead.
Why use this actor?
LinkedIn's native people search is login-gated. Many workflows only need public profile discovery, not private LinkedIn data.
This actor focuses on the public discovery step:
- no LinkedIn account required
- no browser automation required
- transparent source query for each result
- deduped profile URLs
- simple dataset rows for CRM and spreadsheet workflows
Public-search approach
The actor automatically adds site:linkedin.com/in to your queries by default.
That means a query like:
software engineer Berlin
is executed as:
site:linkedin.com/in software engineer Berlin
You can disable this if you want to write your own advanced query operators.
Input
The input is intentionally small and search-focused.
{"queries": ["software engineer Berlin","head of sales SaaS London"],"maxItems": 25,"maxPagesPerQuery": 2,"forceLinkedInSiteSearch": true,"market": "en-US","requestDelayMillis": 1000}
Input fields
| Field | Type | Description |
|---|---|---|
queries | array | Search queries such as title, company, seniority, industry, and location. |
maxItems | integer | Maximum profile results to save across all queries. |
maxPagesPerQuery | integer | Maximum search result pages to inspect per query. |
forceLinkedInSiteSearch | boolean | Adds site:linkedin.com/in unless already present. |
market | string | Search localization code such as en-US, en-GB, or de-DE. |
requestDelayMillis | integer | Polite delay between search result requests. |
Output
Each dataset item represents one public LinkedIn profile search result.
{"profileUrl": "https://www.linkedin.com/in/example-person/","name": "Example Person","headline": "Head of Sales - Example SaaS","company": "Example SaaS","location": "London","snippet": "Experience: Example SaaS · Location: London...","title": "Example Person - Head of Sales - Example SaaS | LinkedIn","sourceQuery": "head of sales SaaS London","normalizedQuery": "site:linkedin.com/in head of sales SaaS London","searchEngine": "brave","searchResultRank": 1,"pageNumber": 1,"resultUrl": "https://www.linkedin.com/in/example-person/","scrapedAt": "2026-06-24T05:32:22.425Z"}
Output fields
| Field | Description |
|---|---|
profileUrl | Normalized LinkedIn /in/ profile URL. |
name | Best-effort name parsed from the result title. |
headline | Best-effort headline or job title. |
company | Best-effort company when the title exposes one. |
location | Best-effort location from the public snippet. |
snippet | Public search result snippet. |
title | Raw search result title. |
sourceQuery | Original user query. |
normalizedQuery | Query actually sent to search. |
searchEngine | Search surface used by the actor. |
searchResultRank | Deduped output rank. |
pageNumber | Search results page inspected. |
resultUrl | Cleaned result URL. |
scrapedAt | ISO timestamp. |
How much does it cost to search public LinkedIn profiles?
The actor uses live pay-per-event pricing on Apify. You pay one small run-start event plus one event for each profile result saved to the dataset.
| Event | When it is charged | Live price |
|---|---|---|
| Actor start | Once when a run starts | $0.005 per run |
| Profile result | Per saved LinkedIn public profile result | Tiered by your Apify plan |
| Apify plan tier | Profile result price |
|---|---|
| Free | $0.000054817 per result |
| Bronze | $0.000047667 per result |
| Silver | $0.000037180 per result |
| Gold | $0.000028600 per result |
| Platinum | $0.000019067 per result |
| Diamond | $0.000013347 per result |
Example costs using the Free tier price:
| Run size | Cost formula | Estimated cost |
|---|---|---|
| 25 profiles | $0.005 + 25 × $0.000054817 | ~$0.0064 |
| 100 profiles | $0.005 + 100 × $0.000054817 | ~$0.0105 |
| 1,000 profiles | $0.005 + 1,000 × $0.000054817 | ~$0.0598 |
Higher Apify plan tiers pay less per saved profile result. The actor stops charging per-item events when it stops saving new dataset rows.
How to search LinkedIn profiles by role and location
- Add one or more role/location queries.
- Keep
forceLinkedInSiteSearchenabled. - Start with
maxItems25-100. - Export the dataset to CSV, JSON, Google Sheets, or your CRM pipeline.
Example:
{"queries": ["vp engineering healthcare Boston"],"maxItems": 50,"maxPagesPerQuery": 3}
How to search LinkedIn profiles by company
Use company names with a target role.
{"queries": ["data engineer Snowflake Berlin","product marketing manager Stripe London"],"maxItems": 100}
Query tips
Better queries produce better leads.
- Add geography when location matters.
- Use seniority words such as
founder,director,vp, orhead of. - Add niche terms such as
climate tech,B2B SaaS, orcybersecurity. - Split unrelated personas into separate queries.
- Keep broad discovery runs moderate, then refine.
Integrations
The output works well with common Apify integrations.
- Export profile URLs to Google Sheets.
- Send datasets to Make or Zapier.
- Feed URLs into a separate LinkedIn profile enrichment actor.
- Join results with company-domain or email-pattern workflows.
- Store query/rank data in your warehouse for sourcing analytics.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/linkedin-public-profile-search-scraper').call({queries: ['head of sales SaaS London'],maxItems: 25,});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/linkedin-public-profile-search-scraper").call(run_input={"queries": ["software engineer Berlin"],"maxItems": 25,})print(run["defaultDatasetId"])
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~linkedin-public-profile-search-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"queries":["founder fintech New York"],"maxItems":25}'
MCP usage
Use this actor from Apify MCP tools when you want to ask an AI assistant to build a lead list.
MCP endpoint:
https://mcp.apify.com/?tools=automation-lab/linkedin-public-profile-search-scraper
Claude Code setup:
$claude mcp add apify-linkedin-search "https://mcp.apify.com/?tools=automation-lab/linkedin-public-profile-search-scraper"
Claude Desktop JSON config:
{"mcpServers": {"apify-linkedin-search": {"url": "https://mcp.apify.com/?tools=automation-lab/linkedin-public-profile-search-scraper"}}}
Example prompts:
- "Find 50 public LinkedIn profile URLs for heads of sales at SaaS companies in London."
- "Search for Berlin software engineers and return profile URLs with snippets."
- "Create a sourcing list for fintech founders in New York."
Legality and privacy
This actor is intended for public web search results. It does not bypass LinkedIn login, does not collect private LinkedIn account data, and does not require user cookies.
You are responsible for using the output lawfully, respecting applicable privacy rules, and honoring platform terms and outreach regulations.
Limitations
Public search results are not the same as LinkedIn's internal people search.
- Search engines may omit, reorder, or localize results.
- Some snippets may be stale.
- Name, company, and location parsing is best effort.
- Direct profile enrichment is intentionally excluded from the MVP.
- Search engines can throttle unusually aggressive runs.
Troubleshooting
If you get too few results:
- broaden the query
- increase
maxPagesPerQuery - try another
market - remove overly specific quoted phrases
If results look too broad:
- add location
- add seniority
- add industry keywords
- split multiple personas into separate queries
Related scrapers
Related Automation Lab actors for the same buyer journey:
- https://apify.com/automation-lab/linkedin-profile-scraper
- https://apify.com/automation-lab/linkedin-profile-url-finder
- https://apify.com/automation-lab/company-domain-to-twitter-x-url-resolver
- https://apify.com/automation-lab/email-pattern-finder
Use this actor first for discovery, then use enrichment actors when you already have profile URLs.
FAQ
Does this actor log in to LinkedIn?
No. It only uses public search-result surfaces.
Can it guarantee every matching LinkedIn profile?
No. Search engines rank and filter public results. Treat the output as a discovery list, not an exhaustive LinkedIn database.
Why are some fields null?
Search snippets vary. The actor always returns the profile URL and query metadata when a valid result is found; name, company, and location are best-effort parsed fields.
Can I use advanced search operators?
Yes. Leave forceLinkedInSiteSearch enabled for normal use, or disable it when you want full control over the query.
Data quality checklist
Before using a large list, review a sample of results.
- Confirm profile URLs are relevant.
- Check whether the query is too broad.
- Deduplicate across campaigns if needed.
- Feed only relevant URLs into downstream enrichment.
Operational notes
The actor is HTTP-based and lightweight. Default memory is 256 MB. The built-in request delay is conservative to avoid unnecessary throttling.
Changelog
Initial version: public LinkedIn profile discovery via search-result surfaces with deduped /in/ profile URLs, snippets, source query, rank, and parsed person metadata.