# LinkedIn Sales Navigator Scraper — Lead URL, Account Filters (`steadyfetch/linkedin-sales-navigator-scraper`) Actor

LinkedIn Sales Navigator scraper: paste a lead search URL and get one row per lead — name, title, company, location, tenure and profile link. Or search accounts by headcount, revenue, industry and hiring signals. No cookie, no login, no start fee.

- **URL**: https://apify.com/steadyfetch/linkedin-sales-navigator-scraper.md
- **Developed by:** [Steadyfetch Team](https://apify.com/steadyfetch) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 leads

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 Sales Navigator Scraper — Lead URL, Account Filters

**Paste a LinkedIn Sales Navigator lead search URL and get one row per lead: name, job title, company, industry, location, months in role, the profile link and the lead's rank in your search. Or find accounts by headcount, revenue, industry and hiring signals. No cookie, no login, no start fee — from $9 per 1,000 leads.**

Run your lead search in Sales Navigator with the filters you want — title, region, industry, seniority, company size, any of them. Copy the address of the results page from the browser bar and paste it here. The actor reads the same search, page by page, without your LinkedIn account: no cookie to export, no session to risk, nothing installed. The account search takes filters instead of a URL (company keywords, headquarters location, industry, headcount and its growth, revenue, department size, hiring on LinkedIn, leadership changes, funding, Fortune rank).

**Using an AI agent?** Pin this actor in Apify's MCP server with one link: `https://mcp.apify.com?tools=steadyfetch/linkedin-sales-navigator-scraper`

- **Actor id:** `steadyfetch/linkedin-sales-navigator-scraper`
- **Input:** `{ "salesNavigatorUrl": "https://www.linkedin.com/sales/search/people?query=(...)", "maxResults": 100 }` — or account fields such as `{ "accountKeywords": "software", "accountHeadcount": ["51-200"] }`.
- **Cap the bill:** set `maxTotalChargeUsd` on the run (a run option, not Actor input), e.g. `1.00` — the run stops when it reaches it.
- **Price:** from $0.009 per lead or account ($0.012 on the Apify free plan); a search page that returns fewer rows than $0.19 is worth is billed one $0.19 search page check instead. Full table below.
- **How often it changes:** people change jobs every day. Re-run the same search weekly, or add Sales Navigator's own "Changed jobs in last 90 days" or "Posted on LinkedIn in past 30 days" filters to catch the movers.

*Unofficial. Not affiliated with, endorsed by, or sponsored by LinkedIn or Microsoft.*

### What you get

One row per lead:

| Column | What it holds |
|---|---|
| `fullName` · `firstName` · `lastName` | the person |
| `jobTitle` · `companyName` · `companyUrl` · `companyId` · `companyIndustry` · `companyLocation` | their current role and company (the one Sales Navigator matched, listed first) |
| `location` | where they are, as LinkedIn shows it |
| `roleStartedOn` · `monthsInRole` · `monthsAtCompany` · `roleDescription` | when they started, and how long they have been there |
| `about` · `isPremium` · `isOpenProfile` · `profilePictureUrl` | their summary; Premium and Open Profile (Open Profile members take InMail from anyone) |
| `profileUrl` · `leadId` | the public LinkedIn profile link and the lead's id |
| `currentPositions` | every current role, not only the first |
| `searchRank` · `searchTotal` · `searchPage` | where the lead sits in your search, and how many leads match it |

One row per account (from the account filters): `accountName` · `companyUrl` · `accountId` · `industry` · `employeeCountRange` · `employeesOnLinkedIn` · `description` · `logoUrl` · `hiringOnLinkedIn` · `seniorLeadershipChange` · `strategicPriorities` · `signals`, plus the same `searchRank` / `searchTotal`. Sales Navigator filters on its own headcount figure, so an account can carry a neighbouring headcount band on its page.

Every row also carries `charged`, `chargedEvents`, `status` and `statusReason`, so you can reconcile your bill from the dataset itself. **No e-mail addresses and no phone numbers** — LinkedIn does not show them in a search, and this actor does not guess them.

### How to use it

1. In Sales Navigator, open **Lead filters**, set the filters and run the search.
2. Copy the whole address from the browser bar — it starts `https://www.linkedin.com/sales/search/people?query=`.
3. Paste it into **Sales Navigator lead search URL**, set **Max results per search** (results come 25 to a page; a search holds at most 2,500) and press Start.

Want accounts instead (or as well)? Fill any of the account fields; each search gets its own **Max results per search**. A pasted Sales Navigator *account* search link is not read from a URL — use the account fields.

Refused before anything is read, and never charged: a link that is not a Sales Navigator lead search, a saved lead list (it needs your own login), a saved-search link with no filters in it, and an account filter value that names nothing (the row names the field and the values that work).

### Pricing

Pay per result, all-inclusive (no platform usage on top), no start fee:

| Event | Apify Free plan | Bronze | Silver | Gold and up |
|---|---|---|---|---|
| Lead (one delivered lead row) | $0.012 | $0.011 | $0.010 | $0.009 |
| Account (one delivered account row) | $0.012 | $0.011 | $0.010 | $0.009 |
| Search page check | $0.19 | $0.19 | $0.19 | $0.19 |

**The search page check.** Each search page is read whole, whatever it returns. A page bills **either** its rows **or** one check — whichever is more — never both. A full page of 25 leads at $0.009 is $0.225 and pays no check. The last page of a search (say 8 leads), a search that matches nobody, or a page that only repeats leads already delivered in the run is billed one $0.19 check on its own row, and its rows say `charged: false`. To pay only per lead, set **Max results per search** to a multiple of 25.

Examples: 100 leads at Gold = $0.90. A 33-lead search at Gold = 25 × $0.009 + one $0.19 check = $0.415.

### Good to know

- **Exact limits.** The run stops at your **Max results per search** and never reads a page past the last one of your search.
- **How long it takes:** LinkedIn's search returns about one page of 25 rows a minute, slower when it is busy. 100 leads take a few minutes; 2,500 leads (100 pages) can take two hours or more, so for a big search set the run timeout to 3–5 hours (5 hours is the most a run reads for).
- **A time limit ends the collecting, never the delivering**: rows already read are delivered, and the receipt says which limit stopped the run.
- **Free plan:** on the Apify free plan a run reads one search page (25 rows) per 24 hours; the row says when it resets. Paid plans have no daily allowance.
- **Standby endpoint:** the same search is available as one HTTP request (`GET /?salesNavigatorUrl=...`), up to 100 rows a request, at the same prices. One request has about 3 minutes and a search page takes one to three, so a request usually returns one to three pages (25–75 rows); the response says so, and a run from the actor's page collects the rest.
- **Honest rows:** a search with fewer rows than you asked for ends on one `no_data` row; a page LinkedIn did not answer within 4 minutes ends that search on a `feed_unavailable` row naming the page. Neither is charged. A new run starts again from page 1, so if rows were already delivered, narrow the filters to the part you still need.
- The receipt is the last row (`run_summary`) and the run's `OUTPUT` record.

### Support

Questions, a search that returns something odd, or a column you need: open an issue on the Issues tab and it will be looked at.

If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.

# Changelog

This Actor's version history is a separate document: https://apify.com/steadyfetch/linkedin-sales-navigator-scraper/changelog.md

# Actor input Schema

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

Run a lead (people) search in LinkedIn Sales Navigator with the filters you want, then copy the whole address of the results page from the browser bar and paste it here. It looks like https://www.linkedin.com/sales/search/people?query=(…). No cookie or login is needed. An account search link, a saved lead list or a link with no filters is refused before anything is read, and nothing is charged for it.

## `accountKeywords` (type: `string`):

Words to search company names and descriptions for, for example software. Setting any account field runs an account (company) search beside the lead search.

## `accountLocations` (type: `array`):

One headquarters location per entry, without commas, for example United States, Germany or San Francisco Bay Area.

## `accountIndustryIds` (type: `array`):

LinkedIn industry ID numbers, for example 4 (Software Development) or 96 (IT Services and IT Consulting).

## `accountHeadcount` (type: `array`):

One or more of: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+.

## `accountHeadcountGrowth` (type: `string`):

A percent range written min-max, for example 5-50.

## `accountAnnualRevenue` (type: `string`):

A range in millions written min-max, for example 10-100. US dollars unless you add a currency code: 10-100;EUR.

## `accountDepartmentHeadcount` (type: `string`):

A department's headcount written min-max;Department, for example 10-100;Engineering or 5-50;Sales.

## `accountHiringOnLinkedIn` (type: `boolean`):

Only companies that are hiring on LinkedIn right now.

## `accountActivities` (type: `array`):

Only companies with a recent signal: SENIOR_LEADERSHIP_CHANGES_LAST_3_MONTHS and/or FUNDING_EVENTS_PAST_12_MONTHS.

## `accountFortune` (type: `array`):

Fortune 500 bands: 50, 51_100, 101_250, 251_500.

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

The most rows to return for each search (the lead search and the account search each get this many). Results come 25 to a page and a search holds at most 2,500, so a multiple of 25 uses every page fully. A page that returns fewer rows than one search page check is worth is billed one check instead of per row.

## `maxRunSeconds` (type: `integer`):

Stop collecting after this many seconds. Rows already collected are still delivered. Leave empty for no limit beyond the run timeout.

## Actor input object example

```json
{
  "maxResults": 100
}
```

# Actor output Schema

## `rows` (type: `string`):

One row per lead from your Sales Navigator search (name, title, company and its link, industry, location, months in role and at the company, the role description, premium and open-profile flags, the public profile link and the lead's rank in the search) and one row per account from the account filters (name, industry, headcount band, employees on LinkedIn, description, hiring and leadership-change signals). Every row carries `charged`, `chargedEvents` and `status`, so the invoice reconciles from the dataset itself. A lead row is charged once, as a `lead`; an account row once, as an `account`. A search page that returns fewer rows than one search page check is worth (the last page of a search, a search that matches nobody) is billed one `check` on its own row instead, and its rows say charged: false. No e-mail addresses or phone numbers are returned.

## `misses` (type: `string`):

One uncharged row for each search that returned less than you asked for, saying why: `no_data` (the search has fewer rows than your limit, or none), `skipped.page_cap` (a search returns at most 2,500 rows and this one holds more — split it with narrower filters), `input_error` (the URL is not a Sales Navigator lead search, or an account filter value names nothing — the row names the field), `feed_unavailable` (LinkedIn did not answer a page within 4 minutes — the row names the page and what a new run repeats), `limit_reached` (this run or this actor reached its collection limit — the row gives the next step), `skipped_max_items` / `skipped_budget` / `skipped_deadline` (your own limit, maximum charge or the run clock stopped it first) and `skipped.free_plan_allowance` (Apify free plan only: the plan's daily allowance on this actor; the row names the reset time).

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

The run's receipt: rows delivered, what was asked for, how many rows match the search, the charged events and what stopped the run. Uncharged.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("steadyfetch/linkedin-sales-navigator-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("steadyfetch/linkedin-sales-navigator-scraper").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 '{}' |
apify call steadyfetch/linkedin-sales-navigator-scraper --silent --output-dataset

```

## MCP server setup

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

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/wwYkb6DyWP9VRfH2x/builds/Lq40S7KjfDgrchsjf/openapi.json
