# LinkedIn Profile Scraper API: Search Email Leads (No Cookies) (`lurkapi/linkedin-profile-scraper-api`) Actor

\[FREE] Scrape LinkedIn leads without a login or cookies. Search by name, job title, or location, or paste profile links, and get names, companies, emails, and phone numbers, ready for Excel, CSV, or JSON.

- **URL**: https://apify.com/lurkapi/linkedin-profile-scraper-api.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Scrape LinkedIn leads without risking your account. No login, no cookies, no session token. Just paste profile links or a keyword search and get names, headlines, companies, and the emails and phone numbers people publish on their own profile, ready for Excel, CSV, or JSON.

### 🎯 What it does

Give it a list of profiles to look up, or search LinkedIn to find new people. Search works three ways:

- **By name.** First name, last name, or both.
- **By job title or keyword.** For example "marketing manager", "founder", or "CTO".
- **By location.** Add a city, region, or country to any name or job search to keep results local.

You get one clean row per person: name, headline, company, location, connection and follower counts, plus any email and phone number they published on their own profile. Switch on optional extras for full work history and company details. Export to Excel, CSV, or JSON, or pull through the Apify API.

### 📋 How to use it

#### Step 1: Say who to look up

Paste LinkedIn profile links or handles to look up people you already have, or type a name or job title to search for new ones. Add a location to keep results in one city or country.

```
Profile links:   linkedin.com/in/janesmith
Or search:       marketing manager
Location:        London, United Kingdom
```

#### Step 2: Choose what to collect

Every profile comes with the core details: name, headline, current company, location, and connection and follower counts. Add any of these extras when you need more; each fills in only where the data is available:

- **Email and phone.** The contact details the person listed on their own profile.
- **Full profile.** Their complete work history, education, certifications, languages, and recent posts.
- **Company details.** The current employer's website, size, industry, and head office.

#### Step 3: Press Start and download

Rows appear as each profile is scraped, so you can watch the list fill up. When it finishes, open the Output tab and download as Excel, CSV, or JSON, or pull it through the Apify API.

#### Example output

One row per person. This is a basic row with no extras switched on:

```json
{
  "status": "success",
  "fullName": "Jane Smith",
  "headline": "Marketing Manager at Acme",
  "currentCompanyName": "Acme",
  "location": "London, United Kingdom",
  "country": "United Kingdom",
  "connectionCount": 500,
  "followerCount": 1240,
  "isVerified": true,
  "openToWork": false,
  "publicIdentifier": "janesmith",
  "url": "https://www.linkedin.com/in/janesmith"
}
```

Switch on the email, phone, full profile, or company extras and those fields join the same row.

### 💎 Add-ons

Switch these on only when you need them. Each adds data only where it exists, so a miss just leaves the field empty.

- **Full profile.** Experience, education, certifications, languages, volunteer work, recommendations, publications, awards, recent posts, and summary.
- **Company details.** The current employer's website, employee count, industry, head office, description, and founded year.
- **Email.** The email the person published on their own profile, when they listed one.
- **Phone number.** A phone number the person published, in standard international format, when they listed one.

Email validation, confirming an address actually works, is coming soon.

### 🤖 Use it from AI clients (MCP)

Call this Actor from Claude Code, Claude Desktop, Codex, Cursor, or any client that speaks the Model Context Protocol. Then just ask: *"Find 50 marketing managers in London with their emails and phone numbers."*

Every example needs an `APIFY_TOKEN` from [console.apify.com/settings/integrations](https://console.apify.com/settings/integrations).

**Claude Code**

```bash
claude mcp add apify -- npx -y @apify/actors-mcp-server \
  --actors lurkapi/linkedin-profile-scraper-api
```

**Claude Desktop**

Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server",
               "--actors", "lurkapi/linkedin-profile-scraper-api"]
    }
  }
}
```

Then add your token to that server's `env` block as `APIFY_TOKEN`.

**Codex CLI**

Edit `~/.codex/config.toml`:

```toml
[mcp_servers.apify]
command = "npx"
args = ["-y", "@apify/actors-mcp-server",
        "--actors", "lurkapi/linkedin-profile-scraper-api"]
```

Add your token to the same block as an `APIFY_TOKEN` environment variable.

**Cursor**

Edit `~/.cursor/mcp.json` using the same shape as the Claude Desktop example.

### 💰 Pricing

**Free.** This actor has no per-result or per-event fees. You only pay for the Apify platform usage each run consumes (compute and proxy) on your own Apify plan.

Every field and add-on is included at no extra charge during this period.

### 💡 Good to know

- **Not every profile has an email or phone.** Most people do not publish contact details on LinkedIn, so expect these on a minority of rows.
- **About 9 in 10 public profiles return data.** The rest are usually deleted profiles, name typos, or profiles LinkedIn has removed from public view.
- **Search returns 50 people per query.** To go past 50, set Max profiles above 50 and the tool searches deeper automatically. You can pull up to 5,000 profiles in a single run.
- **A few results may be businesses, not people.** Some LinkedIn accounts are companies running a personal profile, with the business name split into a first and last name to look like an individual. On LinkedIn these pages are built exactly like a real person's profile, so they cannot be told apart with certainty. The obvious ones are removed automatically; a few well-disguised ones may still slip through.
- **Location covers 199 countries and over 1,400 cities and metros.** Unrecognized places fall back to a worldwide search.
- **Each person appears once.** Duplicate inputs are merged automatically.
- **Your data stays in your Apify dataset.** How long it is kept depends on your Apify plan.

### ❓ FAQ

**Do I need a LinkedIn account or cookies?**
No. It never asks you to log in and never uses cookies, so there is no risk of your account being banned.

**Do I get emails and phone numbers?**
Yes, when the person published them on their own profile. Email validation is coming soon.

**Can I search by job title?**
Yes. One and two word titles like "founder", "CTO", or "marketing manager" return 50 real people per search.

**Can I filter by city or country?**
Yes. Set a location and results are limited to that city, metro, or country. 199 countries and over 1,400 metros are supported.

**Why did some profiles come back empty?**
The handle does not exist, was a name typo, or LinkedIn removed it from public view.

**Can I use it from the API, n8n, or Make?**
Yes. It runs on the standard Apify API, so you can trigger it from n8n, Make, or your own code and pull the results straight into your workflow.

### 🔗 Other tools you might like

- **[Yelp Business Leads Scraper API](https://apify.com/lurkapi/yelp-business-leads-scraper-api)**: local business leads with emails and phone numbers.
- **[Google Maps Business Leads Scraper](https://apify.com/lurkapi/google-maps-business-leads-scraper)**: business contacts straight from Google Maps.
- **[Tripadvisor Email Leads Scraper](https://apify.com/lurkapi/tripadvisor-email-leads-scraper-api)**: hotel and restaurant leads with contact details.

### ⚖️ Disclaimer

Use this Actor in line with LinkedIn's Terms of Service and the data protection laws that apply to you (such as GDPR and CCPA). It only collects data that LinkedIn shows publicly. You are responsible for how you use the data, and the developer is not liable for misuse. What is available depends on LinkedIn at the time you run it.

**Keywords:** linkedin scraper, linkedin profile scraper, linkedin email finder, linkedin phone number scraper, linkedin lead generation, no cookies linkedin scraper, linkedin search export, recruiter sourcing tool, b2b lead list, linkedin data extractor

# Actor input Schema

## `searchQueries` (type: `array`):

Search by job title. One or two words work best, like "founder", "CTO", or "marketing manager". Returns up to 50 people per search; set Max profiles above 50 to search deeper.

## `firstName` (type: `string`):

Search for people by first name. Combine with Last name for an exact match, or use it alone. Returns up to 50 people per search.

## `lastName` (type: `string`):

Search by last name. Combine with First name for an exact match, or use it alone.

## `namePairs` (type: `array`):

Search many people at once. Put one full name per line, for example "John Smith". Results are shared across all names, up to your Max profiles limit.

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

Keep results to one place. Type a city, region, or country, for example "London", "Paris, France", or "United States". Leave empty to search everywhere.

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

The most profiles to return. In search mode, a value above 50 searches deeper to go past LinkedIn's 50-per-search limit. Up to 5,000.

## `urls` (type: `array`):

Paste public LinkedIn profile links, one per line. Full links like https://www.linkedin.com/in/janesmith/ work, and so do country links like fr.linkedin.com/in/janesmith. Up to 5,000 per run.

## `publicIdentifiers` (type: `array`):

The short handle from a profile link, the part after /in/. Example: janesmith. Same result as pasting the full link, just quicker to type.

## `profileIds` (type: `array`):

LinkedIn's own internal profile IDs. Only useful if you already have them. Enter them as text, never as numbers.

## `outputVerifiedEmail` (type: `boolean`):

Add the email the person published on their own profile, when they listed one. Email validation is coming soon.

## `outputPhoneNumber` (type: `boolean`):

Add a phone number the person published, in standard international format, when they listed one.

## `outputFullProfile` (type: `boolean`):

Add the person's full history: experience, education, certifications, languages, volunteer work, recommendations, publications, awards, recent posts, and summary. Added only where this history is available. Job titles, dates, past jobs, and skills need a login, so they are not included.

## `outputCompanyDetails` (type: `boolean`):

Add the current employer's website, employee count, industry, head office, description, founded year, and logo. Added only where the company details are available.

## `outputHeadline` (type: `boolean`):

Include the headline.

## `outputCurrentCompany` (type: `boolean`):

Include the current company name and link.

## `outputLocation` (type: `boolean`):

Include the location and country.

## `outputLanguage` (type: `boolean`):

Include the profile language.

## `outputConnections` (type: `boolean`):

Include the connection count.

## `outputFollowers` (type: `boolean`):

Include the follower count.

## `outputVerified` (type: `boolean`):

Include the verified badge.

## `outputOpenToWork` (type: `boolean`):

Include the open-to-work badge.

## `outputHiring` (type: `boolean`):

Include the hiring badge.

## `outputPhoto` (type: `boolean`):

Include the profile photo URL.

## Actor input object example

```json
{
  "searchQueries": [
    "marketing manager"
  ],
  "maxItems": 25,
  "outputVerifiedEmail": true,
  "outputPhoneNumber": true,
  "outputFullProfile": true,
  "outputCompanyDetails": true,
  "outputHeadline": true,
  "outputCurrentCompany": true,
  "outputLocation": true,
  "outputLanguage": true,
  "outputConnections": true,
  "outputFollowers": true,
  "outputVerified": true,
  "outputOpenToWork": true,
  "outputHiring": true,
  "outputPhoto": true
}
```

# Actor output Schema

## `results` (type: `string`):

One row per person, plus explanatory status rows.

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

Name, headline, company, location, and counts at a glance.

## `profile` (type: `string`):

The full identity details for each person.

## `contacts` (type: `string`):

Email, phone, and websites for outreach.

## `experience` (type: `string`):

Work history, education, certifications, and more.

## `company` (type: `string`):

Current employer details for each person.

# 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 = {
    "searchQueries": [
        "marketing manager"
    ],
    "location": "",
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/linkedin-profile-scraper-api").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 = {
    "searchQueries": ["marketing manager"],
    "location": "",
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/linkedin-profile-scraper-api").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 '{
  "searchQueries": [
    "marketing manager"
  ],
  "location": "",
  "maxItems": 25
}' |
apify call lurkapi/linkedin-profile-scraper-api --silent --output-dataset

```

## MCP server setup

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

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/CLhu3S8P3W2dsltGD/builds/BPTLsJKoQuop7mMmy/openapi.json
