# LinkedIn Sales Navigator Scraper — No Cookies, No Account (`b2bsearch/sales-navigator-search`) Actor

Paste a Sales Navigator lead-search URL, get the matching people without cookies, a login or a seat. Current company, job title, location, industry and headcount carry over from the URL. Free count first, then $0.95 per 1,000 people; full profiles and emails on request.

- **URL**: https://apify.com/b2bsearch/sales-navigator-search.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Social media, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.76 / 1,000 person delivereds

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

### What does LinkedIn Sales Navigator Scraper do?

**LinkedIn Sales Navigator Scraper** turns a Sales Navigator lead-search URL
into a list of the people it describes — without cookies, a login, a browser
or a Sales Navigator seat. Build the search the way you always do, copy the
address of the results page, paste it here.

- The filters are read out of the URL: current company, current job title,
  region, industry, company headcount and keywords.
- The search runs on our own database of professional profiles, so a run
  answers in seconds and never touches your account.
- **Count first, free.** Set *What to return* to *Count* to see how many
  people match before you buy a row.
- A filter this listing cannot read yet stops the run **before anything is
  charged**, and the status line names it. A dropped filter would sell you
  people you excluded, so nothing is ever dropped quietly.

### Which filters carry over

| Sales Navigator filter | How it is read |
|---|---|
| Current company | the companies you picked from the suggestions, by their company id; excluded companies too |
| Current job title | included titles match the current title as text; excluded titles are removed |
| Region | a country, a "City, State, Country" place, or a metro area as written ("San Francisco Bay Area"); excluded countries |
| Industry | the current employer's industry, by the same industry id |
| Company headcount | one range of adjacent bands (51-200 and 201-500 read as 51-500) |
| Keywords | plain words, matched in the headline |

Refused, by name, with nothing charged: seniority, function, past company,
school, years in role, spotlights (changed jobs, posted recently), first and
last name, groups, boolean keywords, a company typed as text instead of picked
from the suggestions, and continents ("Europe", "EMEA"). Remove them from the
search, copy the URL again, and run.

A saved-search link (`savedSearchId=`) carries no filters: open the saved
search and copy the address of its results page instead.

### Input

| Field | What it does |
|---|---|
| `salesNavigatorUrl` | The address of the results page, unchanged. |
| `mode` | `people` (rows, paid per person) or `count` (how many match, free). |
| `maxResults` | How many people to deliver. You pay only for these. |
| `profileDetail` | `row` (search row), `profile` (full career profile) or `contacts` (profile + an email or phone that reaches the person today). |
| `maxPerCompany` | At most N people per company. |
| `excludeDatasets` | Datasets of earlier runs: those people are skipped for free. |

### What you get

The same rows as [People Database Search](https://apify.com/b2bsearch/people-database-search):

| Group | Fields |
|---|---|
| Identity | full name, headline, `profileUrl`, slug, `personId` |
| Current role (flat columns) | `jobTitle`, `companyName`, `companyDomain`, `companyIndustry`, `companyEmployeeCount` — the role at the company your search named |
| All current positions | title, seniority, start year, and a live employer card for each |
| Location | city, `countryCode` |
| Email flags | `hasPersonalEmail`, `hasWorkEmail` |
| Richer tiers | the career profile, plus `email`, `emailType`, `workEmails`, `personalEmails`, `phone`, `phones` |
| Freshness | `_freshness` bucket and the exact `updatedAt` |

### Pricing

| Event | Price | When |
|---|---|---|
| Person delivered | $0.00095 | one distinct person, search row |
| Person delivered (full profile) | $0.0032 | `profile`, or `contacts` without a working contact |
| Person delivered (profile + contacts) | $0.008 | `contacts`, with a contact that reaches the person today |
| Counts, refused searches, repeats, skipped people | **$0** per row | always; a run pays only the platform start fee |

Prices above are for Apify's Free and Starter plans. Scale plans pay 10%
less and Business plans and up 20% less, applied by Apify automatically.

### Honest limits

- **It is a snapshot, not a live scrape** of Sales Navigator. Every row says
  how fresh it is, and the totals will not equal the number Sales Navigator
  shows for the same search.
- **Titles match as text.** "Head of Growth" finds that phrase in the current
  title; short titles such as "CTO" match whole words.
- **Keywords match the headline only,** not the whole profile, so a keyword
  search returns fewer people than Sales Navigator does — never other people.
- **A metro area matches the location as written** on the profile; people who
  wrote their city instead are missed. Pick the country for full coverage.

### FAQ

#### Do I need a Sales Navigator subscription?

To build the search URL, yes — or anyone who has one can send you the link.
The run itself uses no account, cookies or seat.

#### Why did my run stop with "cannot be read yet"?

The URL contains a filter from the refused list above. Remove it in Sales
Navigator, copy the new URL and run again; nothing was charged.

#### How do I get emails?

Set `profileDetail` to `contacts`: a person with an email or phone that
reaches them today is charged $0.008, anyone else ships as a full profile at
$0.0032.

### Which actor in this family?

| Actor | Input → output |
|---|---|
| **LinkedIn Sales Navigator Scraper** (this one) | Sales Navigator search URL → people |
| [People Database Search](https://apify.com/b2bsearch/people-database-search) | 35+ filters → people, counts and market breakdowns |
| [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) | filters → leads with a work or personal email |
| [Company Employees](https://apify.com/b2bsearch/company-employees) | company domain → current staff |
| [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) | profile URL → full career profile |

### Free Apify plan

On a free Apify plan a run you start in Apify Console delivers the first 100
results; a run started through the API, a schedule or an integration delivers
the first 25. The run's status line says so, and any paid Apify plan lifts the
cap. The rows are the same rows a paid run returns.

### Feedback and reviews

How did it go? A rating in the **Reviews** tab of this Actor tells the next
buyer what to expect; we read every word, good or bad. Got a wrong or stale
row? Open the **Issues** tab with the run ID. Issues are public, so leave out
emails, phones and names; the run ID is enough for us to find the row. We
check every report, fix what is ours to fix and answer in the thread.

### Disclaimer

This Actor is an independent product. It is not affiliated with, endorsed by
or sponsored by LinkedIn, and Sales Navigator is LinkedIn's product. It does
not access, crawl or scrape LinkedIn or Sales Navigator at run time: it reads
the filters written in the URL you paste, and answers come from our own
database of publicly available professional data. To have a person's data
removed, open an issue on this Actor with only the profile link — nothing else
is needed, and it is removed from every listing.

# Actor input Schema

## `salesNavigatorUrl` (type: `string`):

The address of a Sales Navigator lead search, copied from the browser bar while the results are open. Read: current company, current job title, region, industry, company headcount and keywords. Any other filter stops the run before anything is charged and names it.

## `mode` (type: `string`):

people = the rows, paid per person. count = how many people the search matches, with no per-row charge: size a search before you buy it.

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

Stop after this many people (default 500, maximum 50,000; 10,000 on the profile tiers). You pay per person delivered — $0.95 per 1,000 in the row tier — so set it to the number you need. Ignored by count and market modes. Free Apify plan: up to 100 from Console, 25 via the API.

## `profileDetail` (type: `string`):

Paid per person, never per search. row = name, title, employer, location and email flags, $0.95 per 1,000; profile = the full career profile, no contacts, $3.20 per 1,000; contacts = plus emails, phones and social links, $8 per 1,000 people with a contact that reaches them today (the rest at the profile price). Profile tiers cap a run at 10,000.

## `compact` (type: `boolean`):

Returns a short row instead of the full record: identity, current role, location, the 5 latest positions, education, top skills and any contacts — about 2 KB per person instead of 10+ KB. Made for AI agents and LLM pipelines with a context limit. Same price. Off by default: a run returns the complete record.

## `maxPerCompany` (type: `integer`):

Account-based lists: deliver at most this many people per current employer across the whole run. The rest are skipped free and counted in one note row.

## `excludeDatasets` (type: `array`):

Pick datasets of earlier runs of this Actor: everyone in them is left out of this run and never charged again. Run the same search weekly and get only the new people.

## Actor input object example

```json
{
  "salesNavigatorUrl": "https://www.linkedin.com/sales/search/people?query=(recentSearchParam%3A(doLogHistory%3Atrue)%2Cfilters%3AList((type%3ACURRENT_TITLE%2Cvalues%3AList((text%3AHead%2520of%2520Growth%2CselectionType%3AINCLUDED)))%2C(type%3AREGION%2Cvalues%3AList((id%3A103644278%2Ctext%3AUnited%2520States%2CselectionType%3AINCLUDED)))%2C(type%3ACOMPANY_HEADCOUNT%2Cvalues%3AList((id%3AD%2Ctext%3A51-200%2CselectionType%3AINCLUDED)%2C(id%3AE%2Ctext%3A201-500%2CselectionType%3AINCLUDED)))))",
  "mode": "people",
  "maxResults": 25,
  "profileDetail": "row",
  "compact": false
}
```

# Actor output Schema

## `results` (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 = {
    "salesNavigatorUrl": "https://www.linkedin.com/sales/search/people?query=(recentSearchParam%3A(doLogHistory%3Atrue)%2Cfilters%3AList((type%3ACURRENT_TITLE%2Cvalues%3AList((text%3AHead%2520of%2520Growth%2CselectionType%3AINCLUDED)))%2C(type%3AREGION%2Cvalues%3AList((id%3A103644278%2Ctext%3AUnited%2520States%2CselectionType%3AINCLUDED)))%2C(type%3ACOMPANY_HEADCOUNT%2Cvalues%3AList((id%3AD%2Ctext%3A51-200%2CselectionType%3AINCLUDED)%2C(id%3AE%2Ctext%3A201-500%2CselectionType%3AINCLUDED)))))",
    "maxResults": 25,
    "profileDetail": "row"
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/sales-navigator-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 = {
    "salesNavigatorUrl": "https://www.linkedin.com/sales/search/people?query=(recentSearchParam%3A(doLogHistory%3Atrue)%2Cfilters%3AList((type%3ACURRENT_TITLE%2Cvalues%3AList((text%3AHead%2520of%2520Growth%2CselectionType%3AINCLUDED)))%2C(type%3AREGION%2Cvalues%3AList((id%3A103644278%2Ctext%3AUnited%2520States%2CselectionType%3AINCLUDED)))%2C(type%3ACOMPANY_HEADCOUNT%2Cvalues%3AList((id%3AD%2Ctext%3A51-200%2CselectionType%3AINCLUDED)%2C(id%3AE%2Ctext%3A201-500%2CselectionType%3AINCLUDED)))))",
    "maxResults": 25,
    "profileDetail": "row",
}

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/sales-navigator-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 '{
  "salesNavigatorUrl": "https://www.linkedin.com/sales/search/people?query=(recentSearchParam%3A(doLogHistory%3Atrue)%2Cfilters%3AList((type%3ACURRENT_TITLE%2Cvalues%3AList((text%3AHead%2520of%2520Growth%2CselectionType%3AINCLUDED)))%2C(type%3AREGION%2Cvalues%3AList((id%3A103644278%2Ctext%3AUnited%2520States%2CselectionType%3AINCLUDED)))%2C(type%3ACOMPANY_HEADCOUNT%2Cvalues%3AList((id%3AD%2Ctext%3A51-200%2CselectionType%3AINCLUDED)%2C(id%3AE%2Ctext%3A201-500%2CselectionType%3AINCLUDED)))))",
  "maxResults": 25,
  "profileDetail": "row"
}' |
apify call b2bsearch/sales-navigator-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2bsearch/sales-navigator-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/kKGz2s1RtpaPR9JTE/builds/5J44q8dzMlfbFCqme/openapi.json
