LinkedIn People Search Scraper avatar

LinkedIn People Search Scraper

Pricing

from $15.00 / 1,000 matched profiles

Go to Apify Store
LinkedIn People Search Scraper

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

Agnes Maina

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

10 days ago

Last modified

Share

LinkedIn People Search Scraper: public profiles by job title and company, no login

Run on Apify

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 LinkedIn
  • headline: the person's own LinkedIn headline
  • location: location when Google shows it
  • profileUrl: public profile URL, null when the link could not be resolved
  • isDecisionMaker: true for owner, partner, C level, VP or director
  • seniorityBand: owner, partner, cxo, vp, director, manager, senior, entry or unknown
  • department: function read from the headline, for example sales or finance
  • matchedTitle and matchedCompany: the searched title and company the headline confirmed
  • verifiedEmployer: with strict match, the searched company the profile names as a current employer
  • profileEmployers: with strict match, every current employer the public profile lists
  • charged: true when this row was billed
  • reason: why the row was or was not billed
  • searchedTitles, searchedCompany, searchedLocation: the search that found the person
  • scrapedAt: ISO 8601 collection time

Each run also writes a RUN_SUMMARY record to its key-value store.

Try it in 30 seconds

  1. Open the Actor page in the Apify Store and click Try for free.
  2. Paste the titles you sell to or hire for, one per line, for example VP of Sales.
  3. 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.

EventPriceYou pay when
Actor start$0.005once per run
Matched profile$0.015the headline confirms a title you searched and the public profile confirms the company
Any other row$0delivered 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
}
FieldTypeDefaultDescription
titlesarrayrequiredJob titles to find, 1 to 30, for example VP of Sales
companiesarrayUp 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
locationsarrayUp to 20 cities, regions or countries, for example San Francisco or Germany
maxResultsinteger50Stop after this many rows are delivered, matched or not, 1 to 2,000. Only matched profiles are charged
strictMatchbooleantrueOpen 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.

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.

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.