LinkedIn Profile Search Scraper - Find People, No Login
Pricing
from $0.50 / 1,000 profile founds
LinkedIn Profile Search Scraper - Find People, No Login
Find public LinkedIn profiles by keyword, job title, company, school or location. You get the name, headline, location, current role, company, education and profile URL. No LinkedIn account or cookie is used. The limit is 120 profiles per run. $0.50 per 1,000.
Pricing
from $0.50 / 1,000 profile founds
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
178
Total users
92
Monthly active users
a day ago
Last modified
Categories
Share
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
- Open LinkedIn Profile Search Scraper and click Try for free.
- Put your terms in Search query, for example
head of growth fintech. - Add a Locations or Company filter if you want to narrow it.
- Set Maximum number of profiles, then click Start.
- 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.