LinkedIn People Search: Name, Title, Company, No Login avatar

LinkedIn People Search: Name, Title, Company, No Login

Pricing

from $2.80 / 1,000 profiles

Go to Apify Store
LinkedIn People Search: Name, Title, Company, No Login

LinkedIn People Search: Name, Title, Company, No Login

Find people on LinkedIn by name, job title, company and location with no login or cookies. One row per person: profile URL, headline, current title and company, location, connections, plus followers, photo, school and recent posts from the public profile. Profile URLs work too.

Pricing

from $2.80 / 1,000 profiles

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Share

10 Stripe marketing leaders with headline, title, company and followers in 35 seconds

From The Mine Works, makers of B2B Leads Finder and LinkedIn Employees Scraper, with over 245,000 runs across 280+ public actors.

Updated 27 Oct 2026: first release. Search LinkedIn people by any mix of name, job title, company, location and keywords, run up to 100 searches in one go, or look up profile links you already have. One flat row per person, with the public profile page read too when LinkedIn shows it. Bookmark this Actor on its Store page so it is one click away next time.

Why choose this actor?

  • Built for one call per person. A name plus a company returns that person's profile link, headline, current title, employer and location in about 10 seconds, 256 MB, no start up work. That is the shape Clay tables, n8n flows and AI agents call thousands of times a day. Batches of up to 100 searches work too.
  • The right person, not a lookalike. Search engines fill a page with near matches. With strictMatch on (the default) a row is kept only when the name holds every word you searched and, for a company search, LinkedIn's own line says that company is the current employer. People who used to work there ("ex Stripe") or only mention it are left out, and are never charged.
  • No LinkedIn account, no cookies, no ban risk. Nothing logs in. The actor reads the search engine's public results and the public profile page that LinkedIn shows to anyone who is not signed in.

Run it on Apify

Part of The Mine Works LinkedIn family: LinkedIn Company Scraper, LinkedIn Post Scraper, LinkedIn Employees Scraper, LinkedIn Profile Scraper, LinkedIn Email Finder, LinkedIn Newsletter Scraper.

Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 10 people who head marketing at Stripe, with their public profile pages read. It took 35 seconds in our latest test run:

{
"jobTitle": "head of marketing",
"company": "Stripe",
"maxResultsPerSearch": 10
}

To find one person, give the name and the company: {"name": "Stephen Wu", "company": "Notion", "maxResultsPerSearch": 1} took 9 seconds in our test (12 seconds for Patrick Collison at Stripe).

Apify's free plan includes $5 of credit every month, which covers about 1,200 people at this actor's price.

Copy to your AI assistant

themineworks/linkedin-people-search on Apify. Finds people on LinkedIn by name, job title, company, location and keywords, or looks up LinkedIn profile links, with no login, and returns one flat row per person. Call ApifyClient("TOKEN").actor("themineworks/linkedin-people-search").call(run_input={"name": "Stephen Wu", "company": "Notion", "maxResultsPerSearch": 1}), then client.dataset(run["defaultDatasetId"]).list_items().items. Input: any of name, jobTitle, company, location, keywords (one search); searches (list of objects with those keys, up to 100); profileUrls (list of linkedin.com/in links, up to 1000). Optional: maxResultsPerSearch (default 10, 1 to 100), enrichProfiles (default true; reads the public profile page), strictMatch (default true; drops other names and other current employers), fillFromGoogle (default true; for profileUrls, fills headline and title). The dataset holds person rows only, each with profile_url, public_identifier, name, first_name, last_name, headline, headline_truncated, job_title, company, company_linkedin_url, location, country_code, education, connections, connections_count, followers, photo_url, about, about_truncated, languages, current_positions, past_positions, past_positions_total, schools, recent_posts, last_post_at, snippet, profile_page (read, not_public, failed, skipped), source (search or profile_url), match (name, company, job_title, location as true or false), search, search_index, search_query, position, page, scraped_at. Empty dataset = nobody matched. The run summary and every input that could not be read are in the key-value store record OUTPUT. Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-people-search/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • Search by any mix of fields. name, jobTitle, company, location and keywords are combined into one search. Use one, two or all five: a name alone, a title at a company, a title in a city, a skill plus a school.
  • Company as a name, a website or a LinkedIn link. Stripe, stripe.com and https://www.linkedin.com/company/stripe all mean Stripe. Legal suffixes such as Inc. and GmbH are dropped before searching.
  • Search fields on every row. Profile link, headline, current job title, current employer, location, top school and connections come from the search result itself, so a row has them whether or not LinkedIn shows the profile page (the stable fields list below says how often each one is filled).
  • Profile page fields when LinkedIn shows the page. With enrichProfiles on (the default) the actor reads each person's public profile page and adds the exact follower count, the employer's LinkedIn page, the photo, schools with years, languages, the start of the About text, and up to 4 recent posts with dates and likes. In our tests LinkedIn showed this page for 38 of 50 Datadog engineers, 7 of 10 Stripe marketers, 0 of 10 people named Priya Sharma at Infosys, and 58 of 86 people across all test runs; profile_page says read or not_public on every row.
  • Profile links in, rows out. profileUrls takes links from any country site (ie.linkedin.com, de.linkedin.com) or just the part after /in/. A profile LinkedIn does not show is still filled from the search engine's entry for that exact profile.
  • Stops cleanly and never bills a miss. A search ends when a page brings nobody new or the results run out; the run stops searching if the search engine stops answering, and keeps every row it found. Duplicates across searches are delivered once.

How to use it

Find one person (enrichment step in Clay, n8n or Make)

{
"name": "Patrick Collison",
"company": "Stripe",
"maxResultsPerSearch": 1
}

One row, or an empty dataset when nobody matched. Map profile_url, headline, job_title and location back into your table. In Clay, use an HTTP API column that starts this actor with the row's name and company and reads the dataset items; in n8n, the Apify node's "Run actor and get dataset" does the same.

Build a prospect list: a title at a company

{
"jobTitle": "account executive",
"company": "HubSpot",
"location": "Dublin",
"maxResultsPerSearch": 50
}

Up to 50 people, 10 per results page. Rows whose current employer is not HubSpot are dropped. match.location says whether the location you asked for appears on the profile.

Many searches in one run

{
"searches": [
{ "name": "Patrick Collison", "company": "Stripe" },
{ "jobTitle": "CFO", "company": "Notion" },
{ "jobTitle": "recruiter", "company": "Canva", "location": "Sydney" },
"python developer Berlin"
],
"maxResultsPerSearch": 10
}

Each item is its own search, numbered in search_index and echoed in search. A plain string is used as keywords.

{
"profileUrls": [
"https://www.linkedin.com/in/satyanadella",
"https://ie.linkedin.com/in/shane-nolan-48743b58",
"wustep"
]
}

One row per profile that exists. LinkedIn hides job titles on most public pages, so with fillFromGoogle on (the default) the headline and title come from the search engine's entry for that profile. A link to a profile that does not exist gets no row and no charge, and is listed in the OUTPUT record.

See everything the search engine found

{
"jobTitle": "nurse practitioner",
"location": "Houston",
"maxResultsPerSearch": 30,
"strictMatch": false,
"enrichProfiles": false
}

No rows are dropped, and the run is faster without the profile pages. Each row's match object still says which of your fields matched.

Input parameters

ParameterTypeDefaultWhat it does
namestringemptyFull name of the person to find.
jobTitlestringemptyJob title or role, for example head of marketing.
companystringemptyCurrent employer: a name, a website or a LinkedIn company link.
locationstringemptyCity, region or country.
keywordsstringemptyAny other words, for example a skill or a school.
searchesarrayemptyMany searches, each an object with the five fields above, or a string of keywords. Up to 100.
profileUrlsarray of stringsemptyLinkedIn profile links to look up directly. Up to 1,000.
maxResultsPerSearchinteger10Most people per search, 1 to 100.
enrichProfilesbooleantrueReads each person's public profile page for followers, photo, schools, languages, About and posts.
strictMatchbooleantrueDrops results with another name or another current employer.
fillFromGooglebooleantrueFor profileUrls: fills headline, title, company and location from the search engine's entry for the profile.

Give at least one search field, searches, profileUrls, or any mix.

What data do you get?

One row per person in the default dataset, nothing else, so a pipeline can map the dataset as is.

FieldWhat it is
profile_url, public_identifierhttps://www.linkedin.com/in/<id> and the id itself, the key to store and join on
name, first_name, last_nameName as LinkedIn shows it, and split
headline, headline_truncatedProfile headline, and whether the search engine cut it short
job_title, companyCurrent job title and current employer
company_linkedin_urlThe employer's LinkedIn page (profile page)
location, country_codee.g. San Francisco, California, United States, US
education, schoolsTop school; all schools shown, with LinkedIn link and years (profile page)
connections, connections_counte.g. 500+ and 500
followersExact follower count (profile page)
photo_url, about, about_truncated, languagesPhoto, start of the About text, languages (profile page)
current_positions, past_positions, past_positions_totalEmployers LinkedIn shows logged out, and how many past positions the profile has (profile page)
recent_posts, last_post_atUp to 4 recent posts with link, date, likes and text, and the newest date (profile page)
snippetThe search engine's text for the profile
profile_pageread, not_public, failed or skipped
sourcesearch or profile_url
matchWhich of your fields matched: name, company, job_title, location
search, search_index, search_query, position, pageThe search that found the person, its number in your input, the query sent, the rank and the results page
scraped_atWhen the row was written

OUTPUT record (key-value store, never charged): searches_requested, searches_read, searches_without_match, profiles_delivered, charged_for, rejected_name_mismatch, rejected_company_mismatch, duplicates_skipped, profile_pages_read, profile_pages_not_public, google_pages_billed, stopped_by_max_cost, shortfall_reason when fewer people came back than asked, per_search with query, results, matched, delivered and why each search stopped, and errors, one entry per input that could not be read (invalid_url, invalid_search, not_public, not_found, google_error).

What LinkedIn shows without login

LinkedIn hides part of every profile from visitors who are not signed in. On the public page of most members the job titles, past employers and descriptions are replaced by asterisks; the name, current employer, location, top school, follower count, photo, languages and recent posts stay visible. Public figures keep everything. Some members show no public page at all (profile_page: "not_public"); their rows still carry the search fields. This actor never returns masked text as data. Full work history with dates, skills and emails are not public and are not in the output.

Stable fields for automations

These were present in every row of our test runs (86 people from 6 runs), and their names will not change:

FieldWhat it is
profile_urlProfile link
public_identifierThe key to store and join on
name, first_name, last_nameName, and split
headlineProfile headline
profile_pageWhether the public page was read
sourcesearch or profile_url
scraped_atWhen the row was written

Present when there is a value: company (82 of 86 rows; missing when neither LinkedIn's line nor the headline names an employer), location (80 of 86), job_title (71 of 86; missing when LinkedIn's line has only a place and an employer), connections (66 of 86), and every profile page field, which needs profile_page: "read" (58 of 86).

Output examples

One person from the "head of marketing" at Stripe search, profile page read (test run, 27 Oct 2026, trimmed):

{
"profile_url": "https://www.linkedin.com/in/peter-di-pietrantonio-1b5183a",
"public_identifier": "peter-di-pietrantonio-1b5183a",
"name": "Peter Di Pietrantonio",
"first_name": "Peter",
"last_name": "Di Pietrantonio",
"headline": "Marketing Leader: Build Brands",
"job_title": "Head of Asia Pacific Marketing",
"company": "Stripe",
"company_linkedin_url": "https://www.linkedin.com/company/stripe",
"location": "Singapore, Singapore",
"country_code": "SG",
"education": "Monash University",
"connections": "500+",
"connections_count": 500,
"followers": 4197,
"past_positions_total": 9,
"schools": [
{ "school": "Monash University", "school_linkedin_url": "https://au.linkedin.com/school/monash-university/", "start": "1987", "end": "1989" }
],
"last_post_at": "2026-10-27T04:07:32.733Z",
"profile_page": "read",
"source": "search",
"match": { "company": true, "job_title": true },
"search": { "jobTitle": "head of marketing", "company": "Stripe" },
"search_query": "site:linkedin.com/in \"Stripe\" \"head of marketing\"",
"position": 2,
"page": 1
}

A profile link whose public page LinkedIn does not show, filled from the search engine (same day, trimmed):

{
"profile_url": "https://www.linkedin.com/in/shane-nolan-48743b58",
"public_identifier": "shane-nolan-48743b58",
"name": "Shane Nolan",
"headline": "Senior Account Executive Mid-Market",
"job_title": "Senior Account Executive - Mid-Market UK/I",
"company": "HubSpot",
"location": "Ireland",
"profile_page": "not_public",
"source": "profile_url"
}

The OUTPUT record of the one-person lookup, trimmed:

{
"searches_requested": 1,
"profiles_delivered": 1,
"charged_for": 1,
"rejected_name_mismatch": 9,
"profile_pages_read": 1,
"per_search": [
{ "query": "site:linkedin.com/in \"Stephen Wu\" \"Notion\"", "pages": 1, "results": 10, "matched": 1, "delivered": 1, "rejected_name": 9, "stopped": "max_results_reached" }
],
"run_seconds": 9
}

Pricing

Pay per event: you pay for the people you receive, plus a flat $0.001 per run that delivered at least one person, whatever memory you choose. Reading profile pages and filling profile links from the search engine cost nothing extra.

EventWhen it is chargedFree planBronze (Starter)Silver (Scale)Gold (Business)
profile-scrapedOnce per person row stored in your dataset$4.00 per 1,000$3.60 per 1,000$3.20 per 1,000$2.80 per 1,000
run-startOnce per run, right after the first person is delivered$0.001$0.001$0.001$0.001

The price of one person is the price per 1,000 divided by 1,000.

Never charged:

  • search results with another name or another current employer (with strictMatch on);
  • a person that a second search of the same run finds again;
  • profile links that do not exist or cannot be read, and inputs that are not searches or LinkedIn links;
  • people past your maxResultsPerSearch;
  • the OUTPUT record;
  • a run that delivers nobody: the start fee is charged only after the first person is in your dataset;
  • anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

Run it on a schedule

  1. Open the actor in Apify Console, set your input and click Save as a new task.
  2. In the task, open Schedules, click Add schedule and pick how often (every Monday at 08:00, the first of the month and so on).
  3. Compare runs on public_identifier and company to see who joined or left a target account, or who changed title.
  4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

FAQ

What does this actor read?

Two public sources, without logging in: the search engine's results for LinkedIn profiles (site:linkedin.com/in searches, read through Apify Proxy), and each person's public LinkedIn profile page as anyone who is not signed in sees it. It does not use a LinkedIn account, cookies or LinkedIn's internal API, does not send connection requests or messages, and does not read anything behind the sign in.

Why do some rows have no followers, photo or schools?

Those come from the public profile page, and LinkedIn does not show that page to logged-out visitors for every member. In our tests it showed it for 58 of 86 people; for tech company staff it was 7 or 8 in 10, for some groups (nurses in Houston, IT staff in India) none. Those rows say profile_page: "not_public" and keep the search fields: profile link, headline, title, company, location.

Why is the job title sometimes missing?

job_title comes from LinkedIn's own one line summary under each search result (place, title, employer). When that line shows only a place and an employer, the title is in headline instead. LinkedIn masks titles on most public profile pages, so the page cannot fill it.

How does strict match decide the company?

It reads LinkedIn's own line under the result, which names the current employer, and the headline and snippet when that line is missing. "Head of Marketing at Stripe" passes; "ex Stripe", "Former CMO", "designs with Canva" and "Notion Capital" for Notion do not. Turn strictMatch off to receive every result with a match object instead.

Up to 100 per search and 100 searches per run. The search engine shows 10 people per page; a search ends when a page brings nobody new, a page holds fewer than 7 results, or maxResultsPerSearch is reached. For a very large list, split it into several searches, for example by city or by title.

How long does a run take?

In our tests: 9 to 12 seconds for one person by name and company, 35 to 48 seconds for 10 people with profile pages read, 138 seconds for 50 people (6 results pages), 22 seconds for 5 profile links. Most of the time is the search engine page, 3 to 15 seconds each, sometimes 30 seconds when it answers slowly.

Do I need an account, cookies or a proxy?

No. The actor uses Apify Proxy, which is included. Nothing to set up.

Can it find emails or phone numbers?

No. They are not public on LinkedIn. Pass profile_url or name and company to LinkedIn Email Finder for a work email.

Which actor should I use for a whole company?

LinkedIn Employees Scraper walks a company's staff by role. B2B Leads Finder builds lead lists across many companies. LinkedIn Company Scraper returns the company page itself.

Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has three ready views: People, Search and match, and Profile page details. In CSV and Excel, schools, recent_posts and match are flattened into columns such as schools/0/school.

Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/linkedin-people-search

  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http linkedin-people-search "https://mcp.apify.com/?tools=themineworks/linkedin-people-search"

The actor reads only what LinkedIn and the search engine show to anyone without logging in, mostly professional information people publish to be found. LinkedIn's and Google's terms and robots.txt files restrict automated access, and personal data is covered by laws such as GDPR and CCPA. You are responsible for how you use the data, including a lawful basis for contacting people. This is general information, not legal advice.

Integrations

  • Clay: an HTTP API column that runs the actor with the row's name and company and reads the dataset items, one call per row.
  • Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new head of sales at our target accounts every Monday to the CRM".
  • Google Sheets: send each run's people to a sheet with Apify's Google Sheets integration; one row per person fits a sheet as is.
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
  • MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

More from The Mine Works

LinkedIn

Social media and video

Leads and business directories

Marketing, SEO and reviews

Real estate

Science, health and government data

Jobs and hiring

Company and business data

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools

Support

Found a person the actor missed, or a field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

Search LinkedIn people by name, job title, company and location with no login, and get each person back as one row with profile link, headline, current title and company, location and, when LinkedIn shows it, followers, photo, schools and recent posts.