# LinkedIn Profile Search Scraper (`khadinakbar/linkedin-profile-search-scraper`) Actor

Search public LinkedIn profiles by keyword, job title, location, company, and school. Cookieless, MCP-ready.

- **URL**: https://apify.com/khadinakbar/linkedin-profile-search-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Social media, MCP servers
- **Stats:** 11 total users, 8 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 profile founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## LinkedIn Profile Search Scraper

Search **public LinkedIn profiles** by keyword, job title, location, company, and school — and get back clean, structured records with name, headline, location, company, and profile URL. No LinkedIn login, no cookies, no Sales Navigator seat. Built for recruiters and B2B sales who need to **source people**, not just enrich URLs they already have.

### What it does

You give it people-search filters. It runs a precise public-web search restricted to LinkedIn personal profiles, parses each result into a structured record, and (optionally) deep-enriches each profile with about, experience, education, and skills.

| You provide | You get back |
|---|---|
| `keywords` — free text (e.g. `head of growth`) | One record per matching public profile |
| `jobTitle` — e.g. `product manager` | `fullName`, `firstName`, `lastName` |
| `location` — e.g. `San Francisco Bay Area` | `headline`, `currentCompany`, `location` |
| `currentCompany` — e.g. `Stripe` | `profileUrl`, `publicIdentifier` |
| `school` — e.g. `Stanford University` | `snippet`, `rank`, `source`, `scrapedAt` |
| `country` — 2-letter code, default `us` | + (enrich) `about`, `experience[]`, `education[]`, `skills[]`, `connectionsCount`, `followerCount` |

### When to use it

- **Recruiters** sourcing candidates by title + location + company without a LinkedIn seat.
- **B2B sales / SDRs** building targeted prospect lists by role and company.
- **Market & talent research** mapping who holds a given role in a given place.
- **AI agents** that need a clean "find people on LinkedIn" tool returning structured JSON.

**When NOT to use it:**
- You already have profile URLs and just need emails → use **linkedin-profile-email-scraper**.
- You want everyone at one company → use **linkedin-company-employee-scraper**.
- You need private, login-only fields (private connections, private emails). This actor returns **public** data only.

### Pricing (Pay Per Event)

| Event | Price | When charged |
|---|---|---|
| Actor start | $0.00005 | Once per run |
| Profile found | **$0.01** | Per unique public profile returned |
| Profile enriched | **$0.02** | Per profile, only when `enrich = true` |

A typical 25-profile search run costs about **$0.25**. With enrichment on, about **$0.75**. The actor prints an upfront cost cap at the start of every run and the actual billed amount at the end, and it never charges past your `maxResults`.

### Example input

Search only (fast, cheap):

```json
{
  "keywords": "head of growth",
  "jobTitle": "VP Marketing",
  "location": "New York",
  "currentCompany": "SaaS",
  "country": "us",
  "maxResults": 25
}
````

Search + deep enrichment:

```json
{
  "jobTitle": "software engineer",
  "currentCompany": "Stripe",
  "enrich": true,
  "maxResults": 10
}
```

### Example output

```json
{
  "query": "site:linkedin.com/in head of growth",
  "fullName": "Andrew Capland",
  "firstName": "Andrew",
  "lastName": "Capland",
  "headline": "Helping Heads of Growth have more impact",
  "currentCompany": "Wistia",
  "location": null,
  "profileUrl": "https://www.linkedin.com/in/andrewcapland",
  "publicIdentifier": "andrewcapland",
  "snippet": "Director of Growth at Wistia, and Head of Growth at Postscript...",
  "rank": 1,
  "source": "serpapi",
  "enriched": false,
  "scrapedAt": "2026-06-19T07:20:36.094Z"
}
```

In **search mode**, `location` and full `experience` are often unavailable from the public search snippet — enable `enrich` to fill them in from the public profile page.

### Use from an AI agent (MCP)

This actor is MCP-ready and exposed in the Apify MCP server as `apify--linkedin-profile-search-scraper`. Give it narrow filters; it returns a compact JSON array of profiles. Errors and empty results come back as actionable diagnostic records rather than hard failures.

```
https://mcp.apify.com?tools=khadinakbar/linkedin-profile-search-scraper
```

### How it works

1. Your filters are folded into a single precise query restricted to LinkedIn personal profiles (`/in/`).
2. The query is run through a managed, cookieless search layer and paginated until `maxResults` unique profiles are collected.
3. Each result is parsed into a structured record. Duplicate profiles are removed.
4. If `enrich = true`, each profile URL is additionally fetched from its **public** LinkedIn page for about / experience / education / skills.

No LinkedIn credentials are ever required or stored. The search layer is fully managed — you do not supply any API key.

### FAQ

**Do I need a LinkedIn account or cookies?** No. Everything is public-data, cookieless.

**Why is `location` sometimes empty in search mode?** Public search snippets don't always expose location. Enable `enrich` to pull it from the public profile.

**Can it return private data (private emails, private connections)?** No. Public profile data only.

**What happens on a search with no matches?** The run succeeds and returns one diagnostic record explaining that nothing matched — so an agent can react instead of crashing.

**Does it respect my result cap?** Yes. It never returns or charges for more than `maxResults` profiles.

### Legal & compliance

This actor collects only **publicly available** information from public search results and public LinkedIn profile pages. It does not log in, bypass authentication, or access private data. You are responsible for using the output in compliance with LinkedIn's Terms of Service, the GDPR/CCPA, and any other applicable laws and regulations in your jurisdiction. Use the data lawfully — for legitimate recruiting, sales, and research purposes — and honor opt-out and data-subject requests.

# Actor input Schema

## `keywords` (type: `string`):

Free-text people-search terms run against public LinkedIn profiles (e.g. 'growth marketing SaaS' or 'fractional CFO'). Combined with the other filters into one Google query. Defaults to empty. NOT a profile URL — to enrich known profile URLs use the linkedin-profile-email-scraper actor.

## `jobTitle` (type: `string`):

Current or past job title to match in the profile headline (e.g. 'Product Manager'). Quoted automatically so multi-word titles stay intact. Defaults to empty. NOT a company name — use 'Current company' for that.

## `location` (type: `string`):

City, region, or country the person is based in (e.g. 'San Francisco Bay Area' or 'London'). Used both in the search text and as the SerpApi geo hint. Defaults to empty. NOT a country code — use 'Country' for Google domain routing.

## `currentCompany` (type: `string`):

Company name the person currently or previously works at (e.g. 'Stripe'). Quoted automatically. Defaults to empty. NOT a LinkedIn company URL — this is a plain company name matched in profile text.

## `school` (type: `string`):

University or school the person attended (e.g. 'Stanford University'). Quoted automatically. Defaults to empty. NOT a degree or field of study — those should go in 'Keywords'.

## `country` (type: `string`):

Two-letter country code used to route the Google domain and result language (e.g. 'us', 'gb', 'de'). Defaults to 'us'. NOT a free-text country name — must be an ISO 3166-1 alpha-2 code.

## `maxResults` (type: `integer`):

Maximum number of unique public profiles to return. Each profile returned is billed as one 'profile-found' event. Defaults to 25, max 500. Set lower to cap cost on exploratory searches.

## `enrich` (type: `boolean`):

When true, each found profile is additionally fetched from its public LinkedIn page (about, experience, education, skills) via ScrapeCreators and billed as one extra 'profile-enriched' event. Defaults to false (search-only). Leave off for fast, cheap discovery.

## Actor input object example

```json
{
  "keywords": "head of growth",
  "jobTitle": "product manager",
  "location": "San Francisco Bay Area",
  "currentCompany": "Stripe",
  "school": "Stanford University",
  "country": "us",
  "maxResults": 25,
  "enrich": false
}
```

# Actor output Schema

## `profiles` (type: `string`):

Dataset of public LinkedIn profiles returned by the search.

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

Key-value summary of the run (query, counts, billed estimate).

# 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 = {
    "keywords": "head of growth",
    "jobTitle": "",
    "location": "",
    "currentCompany": "",
    "school": "",
    "country": "us",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/linkedin-profile-search-scraper").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 = {
    "keywords": "head of growth",
    "jobTitle": "",
    "location": "",
    "currentCompany": "",
    "school": "",
    "country": "us",
    "maxResults": 25,
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": "head of growth",
  "jobTitle": "",
  "location": "",
  "currentCompany": "",
  "school": "",
  "country": "us",
  "maxResults": 25
}' |
apify call khadinakbar/linkedin-profile-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/linkedin-profile-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Profile Search Scraper",
        "description": "Search public LinkedIn profiles by keyword, job title, location, company, and school. Cookieless, MCP-ready.",
        "version": "0.1",
        "x-build-id": "juwzHKZunHEPy42fw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~linkedin-profile-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-linkedin-profile-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~linkedin-profile-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-linkedin-profile-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~linkedin-profile-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-linkedin-profile-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Free-text people-search terms run against public LinkedIn profiles (e.g. 'growth marketing SaaS' or 'fractional CFO'). Combined with the other filters into one Google query. Defaults to empty. NOT a profile URL — to enrich known profile URLs use the linkedin-profile-email-scraper actor."
                    },
                    "jobTitle": {
                        "title": "Job title",
                        "type": "string",
                        "description": "Current or past job title to match in the profile headline (e.g. 'Product Manager'). Quoted automatically so multi-word titles stay intact. Defaults to empty. NOT a company name — use 'Current company' for that."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, or country the person is based in (e.g. 'San Francisco Bay Area' or 'London'). Used both in the search text and as the SerpApi geo hint. Defaults to empty. NOT a country code — use 'Country' for Google domain routing."
                    },
                    "currentCompany": {
                        "title": "Current company",
                        "type": "string",
                        "description": "Company name the person currently or previously works at (e.g. 'Stripe'). Quoted automatically. Defaults to empty. NOT a LinkedIn company URL — this is a plain company name matched in profile text."
                    },
                    "school": {
                        "title": "School",
                        "type": "string",
                        "description": "University or school the person attended (e.g. 'Stanford University'). Quoted automatically. Defaults to empty. NOT a degree or field of study — those should go in 'Keywords'."
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country code used to route the Google domain and result language (e.g. 'us', 'gb', 'de'). Defaults to 'us'. NOT a free-text country name — must be an ISO 3166-1 alpha-2 code."
                    },
                    "maxResults": {
                        "title": "Max profiles",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of unique public profiles to return. Each profile returned is billed as one 'profile-found' event. Defaults to 25, max 500. Set lower to cap cost on exploratory searches.",
                        "default": 25
                    },
                    "enrich": {
                        "title": "Deep enrich each profile",
                        "type": "boolean",
                        "description": "When true, each found profile is additionally fetched from its public LinkedIn page (about, experience, education, skills) via ScrapeCreators and billed as one extra 'profile-enriched' event. Defaults to false (search-only). Leave off for fast, cheap discovery.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
