# LinkedIn Profile Search: Candidates by Title and City (`transparent_meteorite/linkedin-profile-search`) Actor

Build candidate and prospect lists from public LinkedIn profiles by job title, location, company, school or industry. Short mode returns name, headline, title, company, location and profile URL. No login.

- **URL**: https://apify.com/transparent_meteorite/linkedin-profile-search.md
- **Developed by:** [Detroit Web Agent - Open Data](https://apify.com/transparent_meteorite) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 profile (short)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Candidate Sourcing List Builder

Use this to build candidate and prospect lists from public LinkedIn profiles by job title, location, company, school or industry.

![LinkedIn Profile Search: features, price and a real output row](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-linkedin-profile-search-banner-10132140.png)

[![Run it free on Apify](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-cta.png)](https://console.apify.com/actors/C6jYzTo4SVqHNe7bk/input)

| Price per 1,000 profiles | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| **This Actor** | **$2.00** | **$1.80** | **$1.60** | **$1.50** |

<sub>Pay per event, no monthly rental. Prices read from each Actor's public Apify pricing on 2026-10-13; check the Pricing tab for the current figure.</sub>

![LinkedIn Profile Search sample output table from a real run](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-linkedin-profile-search-output-10132140.png)

Find public LinkedIn profiles the way you would on LinkedIn search, without a LinkedIn account: give job titles, locations, companies, schools, industries or names, and get one row per person with name, headline, current title, current company, location, followers and the profile URL. Full mode also reads each public profile for current and past companies, education, about, exact follower count, languages, awards and recent posts. No login, no cookies, no emails or phone numbers.

- **In short:** LinkedIn Profile Search (Apify actor `transparent_meteorite/linkedin-profile-search`) finds public LinkedIn profiles through Google search and returns one row per person; optional full mode reads the public profile page.
- **Who it is for:** recruiters and sourcers, sales prospecting (find the marketing managers at a company or in a city), founders building lead lists, market researchers.
- **Input:** free-text query, job titles, locations, companies, schools, industries, first and last names, short or full mode, max profiles, monitor mode (only new profiles).
- **Output:** linkedinUrl, publicIdentifier, fullName, firstName, lastName, headline, currentTitle, currentCompany, location, followersText, snippet, searchQuery; full mode adds worksFor, education, about, followers, connectionsText, addressLocality, addressCountry, languages, awards, sameAs, profilePictureUrl, recentPosts.
- **Pricing:** pay per event. Short profile $0.002 free plan, $0.0018 Bronze, $0.0016 Silver, $0.0015 Gold and above. Full profile $0.0035 / $0.0033 / $0.003 / $0.0028. Plus $0.00005 per run start.
- **Limits:** Google shows about 10 profiles per search page, so the actor widens each search (recency, country, exclusions) to find more; very large lists need several titles or locations. About half of LinkedIn profiles are hidden from logged-out visitors: in full mode those come back with search data and are charged the short price.

**Type a job title and a city, press Start, get a table of people with their LinkedIn URLs in about a minute.**

### What is LinkedIn Candidate Sourcing List Builder?

Find public LinkedIn profiles by job title, location, company, school, industry or name. Short mode: name, headline, current title and company, location, followers, profile URL. Full mode adds companies, education, about, exact followers and recent posts. No LinkedIn login or cookies. Run it from the Apify Console, the API or a schedule, and export the results as JSON, CSV, Excel or HTML.

### Run in 30 seconds

1. Open the actor in [Apify Console](https://console.apify.com/actors?search=transparent_meteorite%2Flinkedin-profile-search) (a free Apify account is enough).
2. Press **Start** with the prefilled input: marketing managers in Detroit, 10 short profiles, about $0.02 on the free plan.
3. Open the **Output** tab: the **Profiles** view is a table. Download as CSV, Excel or JSON.

```json
{
  "currentJobTitles": ["marketing manager"],
  "locations": ["Detroit"],
  "profileScraperMode": "short",
  "maxItems": 10
}
```

An empty input `{}` also works: it runs that same example search.

### Why choose this over alternatives

- **Cheaper per person.** The most-used profile search actor charges $0.05-0.10 per page of 25 short profiles ($0.002-0.004 per person) plus $0.004 per full profile. Here a short profile is $0.0015-0.002 and a full profile $0.0028-0.0035.
- **No LinkedIn account at risk.** Nothing logs in to LinkedIn, so no cookies, no account bans, no Sales Navigator seat.
- **You pay for people, not pages.** Duplicates, non-profile results and profiles already delivered in monitor mode are never charged. A full profile that LinkedIn hides is charged the short price, not the full one.
- **Monitor mode.** Save a search, schedule it weekly, get only the people who appeared since last time.

### What you get: output fields

| Field | Meaning |
|---|---|
| linkedinUrl, publicIdentifier | Public profile URL and its slug |
| fullName, firstName, lastName | Name as shown on LinkedIn |
| headline | Headline as shown in search |
| currentTitle, currentCompany | Current role and employer |
| location | Location as shown on LinkedIn |
| followersText | e.g. "1.6K+ followers" |
| snippet | Text from the profile shown in search |
| searchQuery | Which of your searches found this person |
| fullProfileLoaded | true = public profile read (full price) |
| worksFor, pastOrganizations, education | Full mode: companies (name, URL, location) and schools |
| about, followers, connectionsText | Full mode: about section, exact followers, "500+ connections" |
| addressLocality, addressCountry, languages, awards, sameAs, profilePictureUrl, recentPosts | Full mode extras |

No email addresses or phone numbers are collected.

### Sample output

Illustrative row (real field names and shapes; the person is made up):

```json
{
  "linkedinUrl": "https://www.linkedin.com/in/jane-example-12345",
  "publicIdentifier": "jane-example-12345",
  "fullName": "Jane Example",
  "firstName": "Jane",
  "lastName": "Example",
  "headline": "Digital Marketing Manager at Example Motors",
  "currentTitle": "Digital Marketing Manager",
  "currentCompany": "Example Motors",
  "location": "Detroit Metropolitan Area",
  "followersText": "1.6K+ followers",
  "snippet": "Digital Marketing Manager at Example Motors · Experienced digital marketer ...",
  "searchQuery": "marketing manager | Detroit",
  "fullProfileLoaded": true,
  "followers": 1605,
  "connectionsText": "500+ connections",
  "worksFor": [{ "name": "Example Motors", "url": "https://www.linkedin.com/company/example-motors", "location": "Detroit, Michigan, United States" }],
  "education": [{ "name": "Michigan State University", "url": null }],
  "addressLocality": "Detroit Metropolitan Area",
  "addressCountry": "US",
  "languages": ["English"],
  "recentPosts": [{ "url": "https://www.linkedin.com/posts/...", "text": "Gearing up for our 90th season.", "datePublished": "2023-04-12T14:46:32.558Z", "likes": 23 }]
}
```

### Input options

- **searchQuery**: free text matched on the profile (skills, tagline words).
- **currentJobTitles, locations, currentCompanies, schools, industries**: lists; each combination is its own search (up to 40 combinations per run).
- **firstNames, lastNames**: look up specific people.
- **profileScraperMode**: `short` (search data) or `full` (also read the public profile).
- **maxItems**: cap on profiles and cost. **maxSearchPagesPerQuery**: how hard to widen each search (1-8).
- **onlyNew** + **monitorStoreName**: monitor mode.

### Pricing

| Event | Free | Bronze | Silver | Gold, Platinum, Diamond |
|---|---|---|---|---|
| Short profile | $0.002 | $0.0018 | $0.0016 | $0.0015 |
| Full profile (replaces short) | $0.0035 | $0.0033 | $0.003 | $0.0028 |
| Run start | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

100 short profiles cost $0.15-0.20. Set **Maximum cost per run** in the run options and the actor stops before going over it.

### What it does and who it is for

The actor turns your filters into Google searches restricted to `linkedin.com/in`, reads every result (name, headline, location, current title and company as LinkedIn shows them to Google), resolves the real profile URL, removes duplicates, and in full mode opens each public profile page. Recruiters build candidate long-lists, sales teams find decision makers by title and company, agencies map a local market, researchers count roles in a region.

### Use cases

- **Recruiting long-lists:** search a job title in one or several cities and export candidate names, headlines and profile URLs to a spreadsheet or your ATS.
- **Sales prospecting:** find the marketing managers, founders or ops leads at target companies, then enrich the company side with [Company Enrichment by Domain](https://apify.com/transparent_meteorite/company-enrichment-by-domain) or [LinkedIn Company Scraper](https://apify.com/transparent_meteorite/linkedin-company-scraper).
- **Market mapping:** count how many people hold a role in a region, or which employers and schools show up most, to size a market or a hiring plan.
- **Content and outreach research:** pair the people list with [LinkedIn Posts Search](https://apify.com/transparent_meteorite/linkedin-posts-search) to see who is publicly posting about your topic.
- **Weekly automation (n8n, Make, Zapier):** schedule a saved search in monitor mode, send the new rows to a sheet or CRM, and review them before anyone is contacted.

### Use it from AI assistants (MCP)

LinkedIn Profile Search works as a tool for AI assistants through the official Apify MCP server. Add this URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

```
https://mcp.apify.com/?actors=transparent_meteorite/linkedin-profile-search
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?actors=transparent_meteorite/linkedin-profile-search",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask, for example: "Find 20 HR directors in Chicago on LinkedIn and list their companies."

### Limits

- Results come from what Google has indexed from public LinkedIn profile pages, about 10 profiles per search page. Very large lists need several titles or locations.
- Roughly half of LinkedIn profiles are hidden from logged-out visitors. In full mode those rows keep the search data and are charged the short price.
- Headlines and locations are as LinkedIn showed them to Google, usually days to weeks old. Full mode reads the live public page.
- No emails, phone numbers, private profiles or anything behind a LinkedIn login. The actor does not accept cookies or credentials.
- Search engines can throttle heavy use: if a run returns fewer profiles than maxItems, narrow the search or add more titles and locations.

### Is it legal? Personal data notice

Our scrapers are ethical and do not extract private user data such as email addresses or phone numbers, or anything behind a login. They only extract what people have chosen to share publicly. We therefore believe that our scrapers, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by GDPR (EU Regulation 2016/679), by the CCPA in California and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You can also read the Apify blog post on the legality of web scraping: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Terms and responsible use

The actor reads only what LinkedIn shows publicly to search engines and logged-out visitors. You are responsible for lawful use (GDPR, CCPA and similar laws) of the personal data you collect. Do not use it for spam, harassment or to build profiles of private individuals beyond a legitimate business purpose.

### Support

Found a bug or need a field? Open an issue on the Issues tab with the run URL. We reply there.

### More resources

- Guide & examples: [mamoo85.github.io/open-data-actors/linkedin-profile-search.html](https://mamoo85.github.io/open-data-actors/linkedin-profile-search.html)

### FAQ

**Do I need a LinkedIn account?** No. Nothing logs in to LinkedIn.

**Why fewer profiles than maxItems?** Google lists about 10 profiles per search page, and a narrow search (one title, one small town) may only have a few dozen public profiles. Add more titles, nearby locations or companies.

**Why is fullProfileLoaded false on some rows?** LinkedIn hides some profiles from logged-out visitors. Those rows keep the search data and cost the short price.

**Can I get emails or phone numbers?** No. The actor does not collect contact details of people.

**How fresh is the data?** Search data is what Google last saw on LinkedIn (usually days to weeks old); full mode reads the live public profile.

### Changelog

- 2026-10-14: Initial release.
- 2026-10-25: Documentation updated: README refreshed.
- 2026-10-25: Listing refresh: new Store icon, README reorganised (overview, data fields, pricing, FAQ) and changelog tab added. No code change.

### Example input

A small run that finishes quickly (this is also the prefilled input in the Apify Console). Values come from the input schema:

```json
{
  "currentJobTitles": [
    "marketing manager"
  ],
  "locations": [
    "Detroit"
  ],
  "fillMissingDetails": true,
  "profileScraperMode": "short",
  "maxItems": 10,
  "maxSearchPagesPerQuery": 8,
  "onlyNew": false,
  "monitorStoreName": "linkedin-profile-search-monitor"
}
```

### Alternatives to LinkedIn Profile Search

Other ways to get similar data, so you can choose what fits:

- **LinkedIn Sales Navigator**: official, login and seat required
- **Apollo.io**: B2B contact database
- **Lusha**: contact data platform

This actor's edge is pay-per-result pricing, no login and ready-to-use structured output. Compare on a small test run before you commit.

# Changelog

This Actor's version history is a separate document: https://apify.com/transparent_meteorite/linkedin-profile-search/changelog.md

# Actor input Schema

## `searchQuery` (type: `string`):

Any words to match on the profile, e.g. "Salesforce admin" or "founder fintech". Combined with the filters below.

## `currentJobTitles` (type: `array`):

Job titles to search for. Each title is searched separately (and combined with each location / company).

## `locations` (type: `array`):

Cities, metro areas, states or countries, e.g. "Detroit", "Austin, Texas", "Germany".

## `currentCompanies` (type: `array`):

Company names, e.g. "Ford Motor Company". Matches people who list that company.

## `schools` (type: `array`):

Schools or universities, e.g. "University of Michigan".

## `industries` (type: `array`):

Industry words or skills, e.g. "SaaS", "healthcare", "PPC".

## `firstNames` (type: `array`):

Find people by first name (combine with last names to look up a specific person).

## `lastNames` (type: `array`):

Find people by last name.

## `fillMissingDetails` (type: `boolean`):

When the fast search route returns profiles without location or follower counts, re-read that page through Google directly (up to 40 s per page) to fill them in.

## `profileScraperMode` (type: `string`):

Full reads each public profile page. If LinkedIn refuses one, that row comes back with the search data and is charged the short price.

## `maxItems` (type: `integer`):

Hard cap on profiles (and cost) for the whole run.

## `maxSearchPagesPerQuery` (type: `integer`):

Each search is asked up to this many times with different recency and country settings to find more people (about 10 profiles per page). The actor stops early when pages stop finding new people.

## `onlyNew` (type: `boolean`):

Remembers profiles already delivered (named key-value store) and returns only new ones next run. Already-seen profiles are not charged. Schedule it weekly.

## `monitorStoreName` (type: `string`):

Use a different name per saved search.

## Actor input object example

```json
{
  "currentJobTitles": [
    "marketing manager"
  ],
  "locations": [
    "Detroit"
  ],
  "fillMissingDetails": true,
  "profileScraperMode": "short",
  "maxItems": 10,
  "maxSearchPagesPerQuery": 8,
  "onlyNew": false,
  "monitorStoreName": "linkedin-profile-search-monitor"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `full` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "currentJobTitles": [
        "marketing manager"
    ],
    "locations": [
        "Detroit"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/linkedin-profile-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "currentJobTitles": ["marketing manager"],
    "locations": ["Detroit"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/linkedin-profile-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "currentJobTitles": [
    "marketing manager"
  ],
  "locations": [
    "Detroit"
  ],
  "maxItems": 10
}' |
apify call transparent_meteorite/linkedin-profile-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,transparent_meteorite/linkedin-profile-search"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/C6jYzTo4SVqHNe7bk/builds/L7WkT0o9XpESSYPog/openapi.json
