LinkedIn People Search Scraper
Pricing
from $15.00 / 1,000 matched profiles
LinkedIn People Search Scraper
LinkedIn people search scraper with no login or cookies. Give it job titles, companies and locations, and pay $0.015 per profile only when the headline and public profile confirm the match, plus $0.005 per run.
Pricing
from $15.00 / 1,000 matched profiles
Rating
0.0
(0)
Developer
Agnes Maina
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
10 days ago
Last modified
Categories
Share
LinkedIn People Search Scraper: public profiles by job title and company, no login
This LinkedIn people search scraper finds public LinkedIn profiles by job title, company and location. You get one row per person with the name, headline, location, seniority band, department and profile URL, and you pay $0.015 per profile only when the person's own headline confirms the title and their public profile confirms the company as a current employer, plus $0.005 per run. Every other row is delivered free with the reason. There is no LinkedIn login and no cookies.
Limits before you run it: up to 30 titles, 200 companies and 20 locations per run, and up to 2,000 delivered rows. No emails, no phone numbers, no work history, no private profiles, and no people Google does not index. Strict match reads the person's own profile, not the employer, so several people can still list themselves as CTO of the same company.
What you get
One row per person found. Every field comes from the Actor's dataset schema.
fullName: name as shown on LinkedInheadline: the person's own LinkedIn headlinelocation: location when Google shows itprofileUrl: public profile URL, null when the link could not be resolvedisDecisionMaker: true for owner, partner, C level, VP or directorseniorityBand: owner, partner, cxo, vp, director, manager, senior, entry or unknowndepartment: function read from the headline, for example sales or financematchedTitleandmatchedCompany: the searched title and company the headline confirmedverifiedEmployer: with strict match, the searched company the profile names as a current employerprofileEmployers: with strict match, every current employer the public profile listscharged: true when this row was billedreason: why the row was or was not billedsearchedTitles,searchedCompany,searchedLocation: the search that found the personscrapedAt: ISO 8601 collection time
Each run also writes a RUN_SUMMARY record to its key-value store.
Try it in 30 seconds
- Open the Actor page in the Apify Store and click Try for free.
- Paste the titles you sell to or hire for, one per line, for example
VP of Sales. - Paste the companies on your list, as names (
Stripe) or company URLs, then click Start and open the Profiles table.
Every Apify account gets $5 of free platform credit each month, enough for the start fee plus 300 confirmed profiles.
Why you only pay for confirmed matches
A search for CFOs at a company also returns finance analysts, former CFOs, assistants and people at companies with similar names. This Actor reads each headline first and bills only rows that prove the match:
[{ "headline": "Chief Financial Officer, Asana", "matchedTitle": "CFO", "charged": true },{ "headline": "Executive Business Partner to CTO @ Vercel", "matchedTitle": null, "charged": false }]
Those are real headlines from a test run. A match needs the company in the employer spot for that title, as in "CFO at Stripe", "CFO | Stripe" or "Stripe CFO". So "CMO @ G2 || Advisor || Zoom" is not billed as Zoom's CMO, a name cut off with "..." is not trusted, and past or support roles such as "ex-Stripe" or "Assistant to the CFO" never count. Titles match their common forms, so a CFO search also finds "Chief Financial Officer".
Strict match, on by default, then opens the public profile and bills only when LinkedIn's own data lists a company you searched as a current employer. In a test run, four of six rows whose headline said "Chief Executive Officer at Stripe" or "at Asana" were days-old profiles LinkedIn does not show publicly, and those came back free with the reason profile is not publicly readable, so the match is not verified.
Example output
Selected fields from one record of a real run.
{"fullName": "Patrick Collison","headline": "Stripe CEO","profileUrl": "https://www.linkedin.com/in/patrickcollison/","isDecisionMaker": true,"seniorityBand": "cxo","verifiedEmployer": "Stripe","charged": true,"reason": "title in own headline, current employer confirmed on profile","scrapedAt": "2026-09-23T22:44:25.660Z"}
Pricing
Pay per event. No subscription, no monthly rental.
| Event | Price | You pay when |
|---|---|---|
| Actor start | $0.005 | once per run |
| Matched profile | $0.015 | the headline confirms a title you searched and the public profile confirms the company |
| Any other row | $0 | delivered with charged: false and a reason |
That is $15 per 1,000 matched profiles, and a run of 100 confirmed profiles costs about $1.50. If the same run delivered 60 rows that did not confirm, those 60 cost nothing.
Input
{"titles": ["CFO", "VP of Finance"],"companies": ["Asana", "https://www.linkedin.com/company/stripe/"],"locations": ["United States"],"maxResults": 200,"strictMatch": true}
| Field | Type | Default | Description |
|---|---|---|---|
titles | array | required | Job titles to find, 1 to 30, for example VP of Sales |
companies | array | Up to 200 company names or company URLs. A URL is read by its URL name, so use it only when that name is the company. When set, the company must be the current employer for the title in the headline. Past employers and service providers do not count | |
locations | array | Up to 20 cities, regions or countries, for example San Francisco or Germany | |
maxResults | integer | 50 | Stop after this many rows are delivered, matched or not, 1 to 2,000. Only matched profiles are charged |
strictMatch | boolean | true | Open each headline match and charge only when the profile is public and lists a searched company as a current employer |
Use cases
- Outbound lists. Take a target account list, find the VP of Sales and Head of Sales at each company, and send only the charged rows to your sequencer.
- Recruiting. Find CTOs and VPs of Engineering at companies in one city, and skip the people whose headline says "ex-".
- Account-based marketing. Map the CFO and CMO at each named account before a campaign.
- CRM enrichment. Write the profile URL and seniority band back to each company in your CRM.
Integrations
Run it from the Apify API, which returns the dataset in the same request:
curl -X POST \"https://api.apify.com/v2/acts/agnes.developer.queen~linkedin-people-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "titles": ["CMO"], "companies": ["Figma"], "maxResults": 20 }'
The same call works from Python and Node.js with the Apify client, and from Make, n8n or Zapier with the Apify app or node. AI assistants and MCP clients can call the Actor as a tool through the Apify MCP server:
https://mcp.apify.com/?tools=agnes.developer.queen/linkedin-people-search-scraper
FAQ
How do I find LinkedIn people without a LinkedIn account?
Paste the titles and companies into the input and start the run. There is no LinkedIn login and no cookies, so your own account is never at risk and you can run it from any machine.
Why was a row not charged?
Its headline or public profile did not prove the match. The reason field says which part was missing: the title, the current company, a past or support role, or a profile LinkedIn does not show publicly. Free rows are still yours to use.
Is the match verified?
With strict match, yes against the person's own public profile: the Actor opens it and charges only when the profile is public and its employer data names the company you searched. It is not verified with the company itself, and division leaders can still list "CTO" at the parent company. With strictMatch false, the Actor bills on the headline alone.
How many profiles can I get per run, and why is strict match slower?
Up to 2,000, set with maxResults, and that limit counts every delivered row, matched or not. Strict match adds one page fetch per headline hit, about a second. Rows that miss the headline bar are not fetched at all.
Can I search by title only, without companies?
Yes. Leave companies empty. A row then bills when the person's own headline contains the title and, with strict match, the public profile is readable.
Does it return emails or phone numbers?
No. It returns the name, headline, location, seniority, department and profile URL. Run an email finder over the matched rows if you need contact details.
Can I schedule it?
Yes. Save the input as an Apify task and add a schedule, for example weekly, to catch people who changed jobs or updated their headline. Each run returns and bills every match again, because nothing is remembered between runs, so dedupe on profileUrl downstream.
Is scraping LinkedIn people search legal?
The Actor reads public pages only and never logs in. You are responsible for how you use the data, including your jurisdiction's privacy laws such as GDPR or CCPA, and for LinkedIn's terms of service.
Related Actors
- LinkedIn Company Scraper turns company names, slugs and URLs into company facts such as industry, size and headquarters.
- LinkedIn New Hires Finder finds decision makers who joined a company recently, with the month they started.
- B2B Leads Finder finds the same public profiles and adds email evidence for matching rows.
- LinkedIn Jobs Scraper collects public job postings with full descriptions and a new jobs monitor.
Support
Found a bug or a wrong charge? Open an issue on the Issues tab of the Store page with the run ID. Docs and examples: github.com/agnesthedeveloper/linkedin-people-search-scraper.