LinkedIn Profile Search Scraper
Find public LinkedIn profiles by keyword, title, company, school or location: name, headline, role, profile URL. No login. $0.50 per 1,000.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQuery,locations,currentJobTitles(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0005 per profile found = $0.5 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Profile found | One matching public LinkedIn profile saved to the dataset - name, headline, location, current role, company, education and profile URL. Sample rows and diagnostic rows are never charged. | $0.0005 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-15, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQuery | Free-text people search, e.g. "software engineer" or "head of growth fintech". Combine it with the filters below or use it on its own. | string |
locations | Keep profiles whose public page mentions one of these places, e.g. "San Francisco". Several values are searched as OR, and are also used to widen the search when you ask for a lot of profiles. This is a text match against the whole public page, not a geo radius. | array |
currentJobTitles | Keep profiles whose public page mentions one of these job titles, e.g. "Senior Software Engineer". Several values are searched as OR. | array |
currentCompanies | Keep profiles that mention one of these companies. A company name or a full LinkedIn company URL both work. | array |
schools | Keep profiles that mention one of these schools or universities, e.g. "Stanford University". | array |
maxItems | How many profiles to return in total. Maximum 120, the box stops there because 120 is the figure that has actually been delivered in full on the cloud (measured 2026-08-17: "marketing manager" + London, 120 requested -> 120 distinct profiles in 18 seconds). A narrow or unusual search returns everything the public index holds for it and then stops early, you are charged per profile actually delivered, never for the number you asked for, so asking for 120 and getting 40 costs you 40. | integer |
What you get
A structured dataset — each result includes fields like:
recordTypefullNameheadlinelocationcurrentPositioncurrentCompanyprofileUrlpublicIdentifierfirstNamelastNameeducationconnectionssnippetsearchQueryfoundViaExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
2 ready-to-run use cases
LinkedIn Alumni Search by School and Job Title
Find alumni on LinkedIn without logging in. Pair a university with a job title and get names, headlines, current employers and public profile URLs.
LinkedIn Search by Job Title and Location, No Login
Search LinkedIn people by job title and city without an account or cookies. Returns name, headline, location, current role, company and the profile URL.
Ready-made automation using this tool
A finished workflow you can import into n8n and run — this tool does the data-gathering inside it. Free, and yours to change.
Turn a LinkedIn search into a scored lead list
Runs the LinkedIn people search you describe, then reads each profile and scores how well it fits what you sell, with a first line you could actually send. The scores and the reasoning land in a Google Sheet.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
YouTube Shorts Scraper
Scrape YouTube Shorts by channel or keyword. Titles, ids, URLs, exact views and likes, publish dates, thumbnails. No API key. $0.40/1k.
TikTok Scraper - Profiles, Videos, Hashtags & Search
Scrape TikTok profiles, videos, hashtags and search. Play, like, comment and share counts. No login needed from you. $0.25 per 1,000.
Instagram Scraper - Profiles, Posts & Reels (No Login)
Scrape Instagram profiles, posts and reels as JSON: followers, caption, likes, comments, media URLs. No login or API key. $0.45 per 1,000 items.
Tweet Scraper
Scrape X (Twitter) tweets by handle or URL, no API key. Rows carry text, likes, retweets, views and author. Search needs your X cookie.
Twitter (X) User Scraper - Profiles & Followers, No Login
Scrape X (Twitter) profiles: followers, following, post count, name, bio and verification. No API key, no login. $0.14 per 1,000 profiles.
TikTok User Scraper - Profiles, Followers & Stats (No Login)
Scrape TikTok profiles without a login. Get follower, following, likes and video counts, bio, verified flag and avatar. $0.35 per 1,000 profiles.
Where this tool sits
- Categories
- Social Media Scrapers
LinkedIn Profile Search Scraper: find people by title, company or school, no login
Type a job title, a skill or a name, narrow it with a city or a company if you want, and get public LinkedIn profiles back as rows. Full name, headline, location, current role, current company, education, connection count and the profile URL.
No LinkedIn account and no session cookie are involved, so there is nothing for you to paste in and nothing that quietly expires a week later. The trade is that a profile which opted out of public visibility never appears at all.
| Input | A search query, filters, or both |
| Output | One row per public profile |
| Ceiling | 120 profiles per run |
| Account needed | None |
| Price | $0.50 per 1,000 profiles, flat on every plan |
🔍 What LinkedIn Profile Search Scraper does
LinkedIn's own people search sits behind the login wall. You cannot open linkedin.com/search/results/people/ signed out, and you cannot script it without an account.
Profile pages are a different matter. LinkedIn publishes every /in/<name> page to the open web so search engines can index it, with the name and headline in the page title and a description spelling out experience, education and location. That published version is what this reads. Your keywords and filters become a search over those public pages, and each match becomes a row.
Nothing here ever requests linkedin.com, so there is no account of yours at risk.
📥 What you give it
Everything is optional. Give it a searchQuery, or filters, or both.
{
"searchQuery": "software engineer",
"locations": ["San Francisco"],
"currentCompanies": ["Stripe"],
"maxItems": 50
}
| Field | Default | What it is |
|---|---|---|
searchQuery | none | Free text. "software engineer", "head of growth fintech", "Sarah Chen". Up to 300 characters. |
locations | none | Up to 20. A profile is kept if its public page mentions one of them. Several values are OR'd. |
currentJobTitles | none | Same, for job titles. |
currentCompanies | none | A company name or a full LinkedIn company URL, either works. |
schools | none | School or university name. |
maxItems | 20 | 1 to 120. |
Two things worth knowing about how matching works. Words of four letters or more in your searchQuery become mandatory, so every row you get back genuinely contains them. And a query made entirely of short words, "CTO" for instance, has no such guard, so add a filter to keep it tight.
A company URL is reduced to its name. If a company's URL slug is an abbreviation that does not match how people write it on their profile, you will get fewer matches. Use the name people actually type.
📤 What you get back
A real row from a recent run:
{
"ok": true,
"charged": true,
"recordType": "profile",
"profileUrl": "https://www.linkedin.com/in/brianql",
"publicIdentifier": "brianql",
"fullName": "Brian Le",
"firstName": "Brian",
"lastName": "Le",
"headline": "Software Engineer @ Stripe",
"location": null,
"currentPosition": "Software Engineer",
"currentCompany": "Stripe",
"education": null,
"connections": null,
"snippet": "Software Engineer @ Stripe · I solve problems (often using software)! ...",
"searchQuery": "site:linkedin.com/in software engineer Stripe",
"foundVia": "secondary-index",
"scrapedAt": "2026-09-21T01:45:12.585Z"
}
Note the three nulls. That profile's published page carries no location, education line or connection count, so those fields come back empty rather than guessed. Nothing is inferred or padded, on any row.
| Field | What it is |
|---|---|
publicIdentifier | The slug after /in/. Use it as your dedupe key across runs. |
profileUrl | Country subdomains like uk.linkedin.com are kept, because that is where the page lives. The same person is never returned twice. |
currentPosition, currentCompany | Split out of the headline on "at" or "@", or read from the published Experience line. A headline written as a keyword list is left alone, so you get null rather than a guessed employer. |
connections | A string, because LinkedIn publishes "500+" as often as a number. |
snippet | The raw indexed description, so you can see what the match was based on. |
lastName | null for single-word names. |
🧾 Reading the output
Three kinds of row, and only profiles cost anything.
| Row | How to spot it | Charged |
|---|---|---|
| A profile | recordType: "profile" | yes |
| The sample row | _sample: true, and it only appears when you run with empty input | no |
| A diagnostic | recordType: "diagnostic" and ok: false | no |
Filter on recordType == "profile" and you have your people.
A diagnostic row carries a code, plus requestsMade and droppedOffTarget so you can see what the run actually did:
| Code | What it means |
|---|---|
NO_RESULTS | The search ran and nothing matched, or everything that matched failed your filters. droppedOffTarget tells you which. Loosen a filter. |
BLOCKED | The search could not be completed this time. Nothing is billed. Try again in a few minutes. |
NOT_FOUND | Nothing at all for those terms. |
RATE_LIMITED | Too many searches too close together. Space them out. |
TARGET_ERROR, NETWORK | Something upstream answered badly. Re-run it. |
Neither a sample nor a diagnostic row fails the run.
▶️ How to run it
1. Open LinkedIn Profile Search Scraper and click Try for free. 2. Put your terms in Search query, for example head of growth fintech. 3. Add a Locations or Company filter if you want to narrow it. 4. Set Maximum number of profiles, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.50 per 1,000 profiles. Flat on every Apify plan, no volume tiers.
One charge per profile written to your dataset. Duplicates are removed before anything is billed, and sample rows and diagnostic rows are never charged. A search that comes back empty costs you nothing for results.
💡 What people use it for
- Building a shortlist of people with a given title in a given city, then working through it by hand.
- Finding alumni of a university who now work in a particular industry.
- Mapping who holds a role across a set of named companies before a sales push.
- Checking how a job title is actually worded in a market before writing a job ad for it.
🚧 What it does not do
- No email addresses or phone numbers. They are not on the public profile page, so they are not
here. This is people search, not contact enrichment.
- No full work history, skills, certifications or recommendations. Current role and headline as
published, not the whole CV.
- No profile photos.
- No connection degree, no "who viewed you", no InMail. All of that needs an account.
- Private and unindexed profiles are invisible, and there is no keyless way around it.
- Location is a text match, not a geo radius. "San Francisco" will not pull in Oakland, and
"Greater London Metropolitan Area" matches far less than plain "London". Use the short, common form of a place name.
- Ordering is relevance, not recency, and you cannot control it.
- 120 per run, and the input box stops there on purpose. An attempt at 200 came back with 169
and spent more than twice the work getting there.
- A narrow search returns what exists and then stops. If only 40 public profiles match your
terms, you get 40 and pay for 40.
- Going deep trades precision for volume. The first results are the closest matches. The further
down the list you go, the looser they get: your terms are genuinely on the page, but the person may not live in the city you typed. Ask for fewer and add a job-title filter when precision matters more than count.
🧭 Which LinkedIn scraper do you need?
| If you want | Use |
|---|---|
| Find people by keyword, title, company or school | This one |
| Profiles when you already have the URLs | LinkedIn Profiles Scraper |
| Everyone who works at one company | LinkedIn Company Employees Scraper |
| Posts matching a keyword | LinkedIn Post Search Scraper |
| Job listings | LinkedIn Jobs Scraper |
| Company pages | LinkedIn Companies Scraper |
❓ Questions people ask
Do I need a LinkedIn account? No, and there is no cookie field either. Nothing to paste and nothing to renew.
Will my account get restricted? Yours is never used, so there is nothing to restrict.
Why did I get fewer profiles than I asked for? Because that many exist for your terms, or because the search stopped early. Either way you pay only for rows delivered.
Can I get their email? Not from here. Public profile pages do not publish contact details.
Is scraping LinkedIn legal? This reads only pages LinkedIn publishes to the open web for search engines to index. Results still contain personal data, which GDPR and similar laws cover, so have a lawful reason for collecting it. Apify's write-up on scraping and the law is a reasonable starting point, and we are not lawyers.
Can I run several big searches back to back? Space them out. Several 120-profile runs within a few minutes of each other will start returning less.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search query you used and the run ID. The diagnostic row's code and requestsMade usually say what happened on their own.