LinkedIn Sales Navigator Scraper (Leads & Accounts) avatar

LinkedIn Sales Navigator Scraper (Leads & Accounts)

Pricing

from $4.00 / 1,000 results

Go to Apify Store
LinkedIn Sales Navigator Scraper (Leads & Accounts)

LinkedIn Sales Navigator Scraper (Leads & Accounts)

DEEP profile information faster than any other scraper! Turn LinkedIn Sales Navigator lead and account searches into clean, flat rows: names, titles, companies, locations and profile links, with optional full profile or company details.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

Denys Petrenko

Denys Petrenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

6 days ago

Last modified

Categories

Share

What it does

Turn your LinkedIn Sales Navigator searches into clean, flat data. Give the Actor one or more search links and your own Sales Navigator session, and it saves one row per lead or per company: name, job title, company, location and links to the LinkedIn and Sales Navigator pages. It's built for sales, recruiting and research teams that already have a Sales Navigator seat and want their searches in a spreadsheet, a CRM or an automation.

  • Works with lead searches and account (company) searches, saved searches, recent searches and lists. You can mix them in one run.
  • Big search links are split automatically. A search link is the address of a lead or account search with your filters, copied from the address bar. When it holds more than a single search can page (2,500 leads, about 1,670 companies), the Actor splits it into smaller searches and saves all of them into the same dataset: lead searches by location, function and seniority, account searches by industry and then headquarters country. You get far more than a single search would give, though a big account search can still leave many companies out (see Limits). Saved searches, recent searches and lists aren't split.
  • Every row has readable field names such as firstName, jobTitle and company. There's no nested JSON, so the data opens cleanly in Excel and Google Sheets.
  • Deep mode adds each lead's full profile (headline, full position history, education, skills, languages, connection counts, last activity, and the contact details LinkedIn shows you) or each company's details (type, founding year, revenue range, headcount growth, headquarters, website).
  • A result that appears under two of your links is saved once.
  • Rows are saved as they're found, so a run that stops early keeps everything it already saved.

This Actor uses your own LinkedIn account. It signs in to Sales Navigator with the session you paste in, so every request counts as yours. LinkedIn's User Agreement prohibits automated access, and heavy use can get your account restricted. Keep your volumes moderate and read the Limits section before your first run. This Actor is not affiliated with or endorsed by LinkedIn.

How to run it

  1. Click Try for free (or Start if you've used the Actor before).
  2. In Sales Navigator links, paste the address of each search or list, one per line. Run the search in Sales Navigator first and copy the address bar once the results have loaded.
  3. In LinkedIn session (Copy as cURL), paste your session. How to copy your session takes about a minute.
  4. Choose fast (the default) or turn on Deep, and set Max results, in total. For a first run, keep the default of 100.
  5. Under Proxy, keep the residential proxy and pick the country you normally log in to LinkedIn from.
  6. Optional but recommended: set a maximum cost for the run in the run options. The run stops itself before it goes over (see Pricing).
  7. Click Start. The status line shows progress, for example Link 1 of 3: 250 of 1,234 leads saved.
  8. When the run finishes, open the Output tab and download the rows as CSV, Excel or JSON.

To reuse the same links and settings, save them as a task and start the task whenever you need fresh data.

On a schedule

Attach a task to an Apify schedule to run it daily or weekly. Each scheduled run starts from the first result of each link and is charged like any other run, so point scheduled tasks at searches that only return what's new to you, for example with Sales Navigator's filters for recent job changes. When LinkedIn ends your session, scheduled runs fail with a message saying so: copy a fresh session into the task.

Through the API

The API tab on this page shows ready-made calls for your account, in several languages. The input is the same JSON as the form:

{
"searchUrls": ["https://www.linkedin.com/sales/search/people?savedSearchId=1234567890"],
"browserRequest": "curl 'https://www.linkedin.com/sales-api/salesApiLeadSearch?...' -H '...' ...",
"deepProfile": false,
"maxResults": 100,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Add maxTotalChargeUsd to the run call to cap what the run can cost. The session field is stored encrypted, also when you pass it through the API.

With your other tools

Apify's integrations start runs from n8n, Make or Zapier, and send the results to Slack, a webhook or your own workflow when a run finishes. Set them up on the Integrations tab of this Actor or of your saved task.

How to copy your session

The Actor needs one real Sales Navigator request from your browser. It holds your login, so treat it like a password. The field is stored encrypted.

  1. Open your search in Sales Navigator in Chrome.
  2. Open DevTools (⌥⌘I on Mac, Ctrl+Shift+I on Windows), open the Network tab and type salesApi into its filter box.
  3. Reload the page, right-click a salesApiLeadSearch row (or salesApiAccountSearch for company searches), and choose Copy → Copy as cURL (bash).
  4. Paste it into the LinkedIn session (Copy as cURL) field.

Choose Copy as cURL (bash), not the cmd or PowerShell versions. What you paste should start with curl '. A cookie export, a file path or a link won't work.

A session lasts until LinkedIn ends it. If a run says the session ended, log in to Sales Navigator in Chrome again and copy a fresh request.

Input

FieldWhat it doesDefault
Sales Navigator links (required)One link per search, copied from the address bar of a Sales Navigator lead or account search. Saved searches, recent searches and lists work too. Lead and account links can be mixed.none
LinkedIn session (Copy as cURL) (required)The request you copied in the steps above.none
Deep: full profiles or company detailsAlso fetch each lead's full profile or each account's company details. Slower, and it adds a charge for each row that gets the extra details.off
Max results, in totalStop after this many rows, counted across all your links. Use 0 for no limit. It also decides whether a big search link is split: only when this is 0, or more than one search can page (2,500 leads, about 1,670 companies).100
ProxyResidential proxies are used by default. Choose your own country so the run looks like it comes from where you normally log in to LinkedIn.Apify residential proxy
Pause between batches (Advanced)Seconds to wait between batches of deep lookups, at least 1. The real wait is random, between this and twice this. Only used when Deep is on. Raise it if LinkedIn starts slowing you down.3
Add every raw LinkedIn field (Advanced)Adds a raw field to each row with everything LinkedIn returned. Makes the dataset much larger.off

Pricing

You pay per event. The exact prices are on this Actor's Pricing tab. There may also be a small start fee, charged once when a run starts; if there is one, the Pricing tab shows it.

EventWhen you're charged
Result (result)Once for every lead or account saved to your dataset.
Deep details (deep-details)Once more for each result that also got its full profile or company details. Only when Deep is on and LinkedIn returned the details. If LinkedIn refused the details for a result, that row is saved with the reason and you pay only the result charge.

With Deep off, 1,000 rows are 1,000 result events. With Deep on and every detail fetched, they're 1,000 result events plus 1,000 deep details events.

Counting and splitting requests aren't charged. When a big search link is split, you pay only for the rows that get saved.

Maximum cost. Set a maximum cost for the run before you start it. The Actor works out how many results that pays for and stops itself there, with Stopped at your spending limit: N results saved. Everything saved up to that point is kept. If the limit can't pay for a single result, the run fails straight away, before it contacts LinkedIn. The run also stops at Max results, in total, whichever comes first.

A run that fails because a link or the session can't be used saves no rows, so no result is charged. A start fee, if the Pricing tab shows one, still applies.

A new run charges again. Every run starts at the first result of each link and charges for every row it saves, including rows an earlier run already saved. It doesn't look at your earlier runs. To avoid paying twice, make a new run's links cover only what's still missing, using extra filters in Sales Navigator such as a location, an industry or a company size (see the FAQ on getting more than 2,500 results from one search). To merge datasets from different runs and remove duplicates, match on linkedinMemberId for leads and linkedinCompanyId for accounts; they stay the same for the same person or company in every run. If a lead's linkedinMemberId is empty, match on its salesNavigatorUrl instead.

Output

Results go to the run's dataset. On the Output tab, the Leads and Accounts views show them as tables. Both views list every row of the run (Apify views can't filter rows), so they differ only in their columns: in a run that mixes lead and account links, filter on type after you download. You can download the rows as CSV, Excel or JSON, or read them through the API.

Every row has:

  • id: identifies the row within this run. It includes a token from the search, so the same lead can have a different id in another run.
  • type: lead or account.
  • The columns for that kind, with plain-English names. In a run that mixes lead and account links, each row has only the columns of its own kind.
  • raw: only if you turn on Add every raw LinkedIn field.

Example rows (made-up data, shortened by leaving out searchUrl, the link the row came from). A lead, fast mode:

{
"id": "urn:li:fs_salesProfile:(ACwAAA00000001xyz,NAME_SEARCH,t001)",
"type": "lead",
"firstName": "Jane",
"lastName": "Example1",
"fullName": "Jane Example1",
"jobTitle": "Head of Sales",
"company": "Acme Robotics",
"timeInRole": "1 yr 2 mos",
"timeAtCompany": "3 yrs",
"location": "Berlin, Germany",
"linkedinUrl": "https://www.linkedin.com/in/ACwAAA00000001xyz",
"salesNavigatorUrl": "https://www.linkedin.com/sales/lead/ACwAAA00000001xyz",
"companyLinkedinUrl": "https://www.linkedin.com/company/4242",
"connectionDegree": 2,
"premium": false,
"savedLead": false,
"spotlights": "Recently hired",
"about": "Builds robots.",
"previousPositions": "AE @ Old Co",
"linkedinMemberId": "100001",
"fetchedDate": "2026-10-21"
}

An account, fast mode:

{
"id": "urn:li:fs_salesCompany:9001",
"type": "account",
"companyName": "Widget Works 1",
"industry": "Computer Hardware Manufacturing",
"employees": 119,
"headcountRange": "51-200",
"linkedinUrl": "https://www.linkedin.com/company/9001",
"salesNavigatorUrl": "https://www.linkedin.com/sales/company/9001",
"description": "We make widgets.",
"saved": true,
"lists": 1,
"spotlights": "",
"linkedinCompanyId": "9001",
"fetchedDate": "2026-10-21"
}

What Deep adds.

  • Leads: headline, email, otherEmails, phone, websites, connections, sharedConnections, openProfile, education, skills, languages, lastActivity and deepProfileError. linkedinUrl becomes the public /in/name link. Email and phone are only filled for people whose contact details LinkedIn shows you, usually your 1st-degree connections.
  • Accounts: companyType, founded, revenueRange, headcountGrowth6MonthsPct, headcountGrowth1YearPct, headcountGrowth2YearsPct, fundingEvents, location, hqStreet, hqCity, hqStateRegion, hqPostalCode, hqCountry, website, starred, notes and deepProfileError.

If LinkedIn refuses the details for one result, the row is still saved, and deepProfileError says why.

Limits

  • Saved searches, recent searches and lists still stop at LinkedIn's paging limit. Sales Navigator pages through at most 2,500 results for a lead search and about 1,670 for an account search. Search links you paste from a lead or account search are split automatically, but these three aren't. To get more from one of them, split it with extra filters, for example by region or company size, and add each part as its own link.

  • LinkedIn can stop paging earlier. Sometimes LinkedIn stops serving a search before it reaches that limit. The run keeps what it has, and the run's final status message says where it stopped, for example LinkedIn stopped paging … at result 1200 of 1800; split it with extra filters to get the rest.

  • A split link can still leave results out. Lead search links are split by location, then function, then seniority. Account search links are split by industry, then headquarters country, and no further. LinkedIn's counts aren't exact, and one of the smaller searches can still hold more than LinkedIn pages. Most lead searches lose only a handful of people that way, but an account search can lose many companies: one industry in one country with more than about 1,650 companies still stops at LinkedIn's paging limit, and the run's final status message reports the rest as search cap. A very broad lead search can do the same when one location, function and seniority together hold more than 2,500 people. For each split link, the run's final status message says how many were found of how many, and how many couldn't be reached and why. For example: Lead search: CFO: found 9,000 of 9,070; 70 couldn't be reached (count drift, search cap). The reasons it can give:

    • search cap: one smaller search still holds more than LinkedIn will page, and the Actor can't narrow it further, so the rest of it is out of reach. For an account search, that's one industry in one country.
    • count drift: LinkedIn counted these people for your search, but none of the smaller searches listed them. LinkedIn's counts can also shift while a run is going.
    • leaky split: LinkedIn lists a few people under none of the functions or seniority levels the Actor splits a lead search by, so they fall between the smaller searches. leaky split (upper bound) means the same for a very big search, where the number is the most that could be missing.
    • short after re-page: a smaller search returned fewer people than LinkedIn counted for it, even when the Actor paged it a second time.
    • filters dropped by LinkedIn: LinkedIn ignored one of your filters and widened the search, so the Actor stopped that part instead of saving the wrong people.

    To try for the people or companies who couldn't be reached, run a narrower search link: add a filter such as a location, an industry or, for companies, a company size. A new run charges for every row it saves, including rows an earlier run already saved (see Pricing).

  • Your maximum cost. The run caps itself at what your maximum cost can pay for, as described under Pricing.

  • One IP per run. The Actor uses one residential IP for the whole run. Apify keeps an IP for about 30 minutes, so a longer run changes IP partway through, which LinkedIn may notice. A big search link that's split automatically can run for hours. To keep runs short instead, split the job yourself: run narrower links, for example one region each, in separate runs.

  • Rate limits end the run. If LinkedIn slows the session down, the Actor retries up to four times, waiting from 15 seconds up to 2 minutes. If that doesn't help, it stops and keeps what it saved. You can start a new run later; it starts over (see Pricing).

  • Deep is slower. It makes about one extra request for every 25 results.

  • One run at a time per LinkedIn login. Parallel runs on one login are a quick way to get logged out.

Your LinkedIn account. The Actor uses your own LinkedIn account and your own session. LinkedIn's User Agreement prohibits automated access, and heavy use can get your account restricted or logged out. The Actor can't prevent that. Keep volumes moderate, prefer small batches over large ones, don't lower the pause between batches, and use a proxy in the country you normally log in from. Splitting a big search link adds counting requests on your session on top of the pages it saves, so a split link uses your session more than its rows alone suggest. You're responsible for how you use your account.

FAQ

The run says LinkedIn ended the session. What now?

LinkedIn logged your session out, so it won't accept more requests. The run's final status message says: LinkedIn ended the session after N results. Log in to Sales Navigator in Chrome, copy a fresh request (Copy as cURL) and run again. Log in again, check LinkedIn for any security notice, wait a while, then copy a fresh request and start a new run (or update the session in your task).

My run stopped early. Why?

The run's final status message always says why. A run that saved at least one result ends as Succeeded, even if it stopped early; a run that saved nothing ends as Failed. If you stop a run yourself, Apify marks it Aborted.

  • Stopped at your spending limit: N results saved. Your maximum cost was reached.
  • LinkedIn is rate-limiting this session; N results saved. Run again later. LinkedIn is slowing your session down. Wait a few hours before the next run, and use smaller links.
  • LinkedIn or the connection failed; N results saved. Run again later. The connection kept failing after the retries.
  • LinkedIn stopped paging … at result X of Y; split it with extra filters to get the rest. See the next question.
  • Skipped …: … LinkedIn refused one of your links, for example a saved search that was deleted. The other links still ran.
  • Aborted: N results saved. You stopped the run. Results saved so far stay saved and charged.
  • Stopped by an unexpected error; N results saved. Run again later. Something unexpected went wrong, for example LinkedIn changed the shape of its answers. The run log has the details. If it keeps happening, report it on the Issues tab.
  • Your spending limit doesn't cover a single result. Raise the run's maximum charge and try again. The run failed without contacting LinkedIn.

Before you start a new run to get the rest, remember that it starts over: it charges for every row it saves, including rows an earlier run already saved. Narrow its links to what's still missing. To merge the datasets afterwards, match on linkedinMemberId for leads and linkedinCompanyId for accounts, or on salesNavigatorUrl for a lead whose linkedinMemberId is empty.

Search links, the addresses of lead or account searches with your filters copied from the address bar, are split automatically. When a link holds more than one search can page (2,500 leads, about 1,670 companies), the Actor splits it into smaller searches (by location, function and seniority for leads, by industry and then headquarters country for accounts) and saves all of them into one dataset. A result that appears in two of them is saved once. A link is only split when Max results, in total is higher than one search can page, so with the default of 100 nothing is split: set it to the number you want, or to 0 for no limit. Counting and splitting requests aren't charged. When the run ends, the run's final status message says how many were found of how many, and how many couldn't be reached and why. An account search can still leave many companies out: one industry in one country with more than about 1,650 companies stops at LinkedIn's paging limit (see Limits).

Saved searches, recent searches and lists aren't split. Saved searches and lists can still be split manually with filters in Sales Navigator, such as region, industry or company size, and so can a recent search: add each part as its own link in Sales Navigator links. All links go into one dataset. The same works when LinkedIn stops paging a search early.

The Actor checks your input before it contacts LinkedIn, so a run that fails here saves and charges no results. The message says what to fix:

  • Add at least one Sales Navigator link. The links field is empty.
  • Link N isn't a Sales Navigator link. Link number N isn't a Sales Navigator search or list. Run the search in Sales Navigator and copy the address bar once the results have loaded.
  • Paste your LinkedIn session (Copy as cURL) first. The session field is empty.
  • Paste the request copied with Copy as cURL (bash); it starts with curl '… You pasted something else, such as a cookie export, a file path or a link.
  • Paste a fresh Copy as cURL (bash) from Chrome: … The request couldn't be used. The rest of the message says why: it may be the Windows format (use the bash version), cut off, missing your login, or from a session LinkedIn has already ended. Copy a new one.

What happens if Apify restarts my run?

The run carries on where it stopped. Rows already saved aren't saved or charged again. This applies only to the same run; a new run you start yourself starts over (see Pricing).

Does this collect personal data?

Yes. The results are names, jobs and profile details of real people. You're responsible for using them in line with LinkedIn's terms and the privacy laws that apply to you.