DEV Community

Cover image for LinkedIn people search without login: same 3 searches, 5 matches last week and 0 this week
Agnes the Dev
Agnes the Dev

Posted on

LinkedIn people search without login: same 3 searches, 5 matches last week and 0 this week

I ran the same three LinkedIn people searches a week apart. Stripe and Asana executives, no login, just job titles and company names.

Last week 5 of 35 results passed the title and employer checks. This week, same inputs, 0 of 30.

Then I typed CEO instead of Chief Executive Officer, and a match came back.

The problem

Searching LinkedIn by title and company without an account means going through Google's index of public profiles. What comes back is messy. Former employees. Assistants whose headline has "CEO" in it. Companies with a similar name. People whose whole headline is just the company name.

There was a thread in r/sales a few days ago, 36 comments, about doing targeted outreach instead of mass volume. Targeted only works if the list is right. A "VP of Sales" who left two years ago is a wasted message and a slightly embarrassing one.

Limits first. This only gives you what's on public profiles. No emails, no phone numbers, no private profiles, nobody Google hasn't indexed. And a headline is whatever the person typed into it.

How a profile gets checked before it counts

Same searches, one week apart

Search (titles as typed) 2026-09-27 results / passed 2026-10-03 results / passed
Stripe: Chief Executive Officer, CFO, VP of Sales 10 / 1 10 / 0
Stripe: VP of Sales, Head of Sales, VP of Marketing, Head of Marketing 15 / 3 11 / 0
Asana: Chief Executive Officer, CFO, VP of Sales 10 / 1 9 / 0
Total 35 / 5 30 / 0

The matching code is the same both weeks. What changed is who Google returned.

Last week the first Stripe search had Stripe's CEO in its top 10 and he passed both checks. This week he wasn't in the results. Last week the VP and Head search returned three Heads of Sales and Marketing at Stripe. This week it returned eleven people, and only one of them mentions Stripe in the headline, a Sales Director. The Asana search came back with nine people, none with a title I asked for.

Then one word

I'd also run the two executive searches with "CEO" typed instead of "Chief Executive Officer". The checker treats those as the same title. Google doesn't. It returns different people for different words.

Search Results / passed
Stripe: CEO, CFO, VP of Sales 10 / 0
Asana: CEO, CFO, VP of Sales 10 / 1

The one that passed: "Chief Financial Officer, Asana". Title in the headline, and the public profile lists Asana as a current employer. So across five searches today, 50 results, one passed.

Why the other 49 didn't:

Reason Results
title not in own headline 35
current company not confirmed 10
past or support role, not a current title 2
profile is not publicly readable, so the match is not verified 2
passed, charged 1

Some real headlines from those rows, names left out:

  • "Chief Executive Officer at STRIPE PAYMENTS UK LTD". The checker didn't accept that as Stripe. It might be a real Stripe person. The checker doesn't guess.
  • "Chief Operations Officer at Stripe TV" and "Chief Executive Officer - Supreme Stripe". Not Stripe.
  • "Chief Financial Officer at Asana Partners". Not Asana.
  • "Chief of Staff to the CEO @ Asana" and "Executive Business Partner to CEO at Asana". The word CEO is right there. Neither is the CEO.
  • "VP of Sales @ Suger | ex-Asana, ex-Opower ...". Right title, former employer.
  • "Chief Executive Officer at Stripe". Title and company both in the headline, but the profile behind it wasn't publicly readable, so it was delivered free instead of charged on a claim that couldn't be checked.

It also misses people. Several headlines were just "Stripe" or "Asana", and one said "San Francisco Bay Area | Professional Profile". Some of those are probably exactly who you want, with a headline that doesn't say so. They aren't charged, but you still get the rows with the reason, so you can look.

The practical bit: if a search comes back thin, run it again with the other spelling of the title. And Head of titles did better than C level for me last week, because big company execs rarely put the literal title in their headline.

The solution

That's the LinkedIn People Search Scraper on Apify. Titles and companies go in, public profiles come out, no LinkedIn login or cookies.

Before a row is charged it has to pass two checks. The person's own headline has to name a title you searched, with your company in the employer spot. Then, with strict match on (the default), their public profile has to list that company as a current employer. Everything else is still delivered, free, with the reason.

Titles match their common forms, so a CFO search also accepts "Chief Financial Officer", and "VP of Sales" also accepts "Vice President, Sales".

The per row scrapers I compared on the Store would have billed for all 50.

Quick start (3 minutes)

  1. Open the LinkedIn People Search Scraper and click Try for free.
  2. Put the titles you sell to in Titles, one per line, and your target companies in Companies as names or LinkedIn company URLs. Leave strict match on.
  3. Click Start. Filter the dataset on charged: true for the confirmed list and read reason on the rest.

Code example

Run one search, keep the confirmed rows, count why the rest were dropped:

from collections import Counter
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("agnes.developer.queen/linkedin-people-search-scraper").call(
    run_input={"titles": ["CEO", "CFO", "VP of Sales"], "companies": ["Asana"],
               "maxResults": 10, "strictMatch": True}
)
rows = client.dataset(run["defaultDatasetId"]).list_items().items

confirmed = [r for r in rows if r["charged"]]
print(len(confirmed), "confirmed of", len(rows))
for r in confirmed:
    print(r["headline"], r["profileUrl"])

print(Counter(r["reason"] for r in rows if not r["charged"]))
Enter fullscreen mode Exit fullscreen mode

Every row also has seniorityBand, department and isDecisionMaker, read from the headline, so you can sort the free rows too.

Use cases

  • Account based lists. Your 20 target accounts and the titles you sell to, export only the charged rows.
  • Checking a list someone sold you. Run their companies and titles and see how many pass.
  • Hiring research. Find who runs a team before you reach out about a role.
  • Fewer bad sends. A "VP of Sales" whose profile says otherwise never makes it into your sequence.

Pricing

$0.015 per confirmed profile, plus $0.005 per run. Every other row costs $0.

This week's five runs cost $0.04: five run fees and one confirmed profile. Last week's three runs, 35 results with 5 confirmed, would have been $0.09. 100 confirmed profiles cost $1.505. Apify's free $5 monthly credit covers more than 300 confirmed profiles.

FAQ

Does it return emails or phone numbers?

No. Public profile data only.

Why wasn't a real executive charged?

Their headline doesn't name the title, their profile doesn't list the company as current, or the profile isn't publicly readable. It only charges what it can check. The row is still in your dataset, free.

Why did the same search give different people a week later?

The results come from Google's index of public profiles, and what Google returns for a query moves. The checks were the same code both weeks.

Do I need a LinkedIn account?

No. Nothing logs in.

Get started

Open the LinkedIn People Search Scraper, click Try for free, and try your own target accounts. Keep strict match on, and try both spellings of the title.

Run on Apify

When you build a lead list, how many rows do you actually check before you send?

Top comments (0)