LinkedIn Sales Navigator Scraping Workflow
Purpose
This recipe produces a cleaned, deduplicated CSV of 200-2,000 leads extracted from LinkedIn Sales Navigator, matching your ICP filters — with names, titles, companies, LinkedIn URLs, and optionally work emails. The output is ready for enrichment pipeline ingestion or direct CRM import.
Prerequisites
- ICP definition available from persona-builder agent — ICP Definition
- LinkedIn Sales Navigator — active Core ($99/mo) or Advanced ($149/mo) subscription
- PhantomBuster account — API key from phantombuster.com (free tier: 2hr/day)
- Sales Navigator cookie — extracted from browser session (required for PhantomBuster)
Constraints
- LinkedIn allows ~80-150 profile views/day on Sales Navigator accounts. Exceeding this triggers temporary restrictions. [src1]
- Connection requests capped at ~100/week across all LinkedIn account types. [src1]
- PhantomBuster processes ~1 profile every 30 seconds. A batch of 500 profiles takes ~4 hours. [src2]
- GDPR applies to personal data of EU residents — B2B work emails are generally permissible under legitimate interest. [src1]
- Apify community scrapers are limited to ~500 profiles per session before LinkedIn detection kicks in. [src2]
Tool Selection Decision
Which path?
├── User is non-technical AND budget = free
│ └── PATH A: Manual Export — Sales Navigator CSV + Google Sheets
├── User is non-technical AND budget > $0
│ └── PATH B: No-Code Paid — PhantomBuster or Evaboot
├── User is semi-technical AND budget = free
│ └── PATH C: Apify Community Scraper (free tier)
└── User is developer AND budget > $0
└── PATH D: PhantomBuster API + Custom Script
| Path | Tools | Cost | Speed | Output Quality |
|---|---|---|---|---|
| A: Manual Export | Sales Navigator + Sheets | $99/mo (Nav only) | 2-3 hours/200 leads | Basic — no emails |
| B: No-Code Paid | PhantomBuster + Nav | $168/mo | 30 min/500 leads | High — with email discovery |
| C: Apify Free | Apify + Nav | $99/mo (Nav only) | 45 min/500 leads | Medium — cap at 500/session |
| D: Code + Paid | PhantomBuster API + script | $168/mo | 15 min/500 leads | Highest — full automation |
Execution Flow
Step 1: Build Sales Navigator Boolean Search
Duration: 10-15 minutes | Tool: LinkedIn Sales Navigator
Translate your ICP into Sales Navigator boolean search queries. Use Lead filters for individual contacts. Save the search in Sales Navigator and copy the full search URL.
Verify: Search returns 200-5,000 results. If fewer than 200, broaden criteria.
Step 2: Extract Sales Navigator Cookie
Duration: 2-3 minutes | Tool: Browser DevTools
Open Sales Navigator in Chrome, press F12, navigate to Application → Cookies → linkedin.com, find the "li_at" cookie and copy its value. Paste into PhantomBuster's LinkedIn Session Cookie field.
Verify: Cookie value starts with "AQ" and is 200+ characters long.
Step 3: Configure and Run Scraper
Duration: 5-10 min setup + 30-120 min runtime | Tool: PhantomBuster
Configure the "Sales Navigator Search Export" phantom with your session cookie, search URL, and 500 profiles per run. Set time between launches to 60+ minutes and 100 lines per launch. [src1]
Verify: Row count matches expected range. No columns with 100% null values.
Step 4: Clean and Deduplicate
Duration: 10-15 minutes | Tool: Python/Sheets
Remove duplicates by LinkedIn URL, drop rows missing critical fields (name, company), normalize titles, and filter to ICP-matching titles only.
Verify: Dedup reduces list by less than 10%.
Step 5: Export Final Lead List
Duration: 5 minutes
Generate CRM-ready CSV with standardized columns: First Name, Last Name, Job Title, Company, LinkedIn URL, Location, Email, Lead Source, Date Scraped.
Output Schema
CSV with columns: First Name, Last Name, Job Title, Company, LinkedIn URL, Location, Email, Lead Source, Date Scraped. Expected 150-2,000 rows, deduplicated on LinkedIn URL, sorted by company ascending.
Quality Benchmarks
| Quality Metric | Minimum | Good | Excellent |
|---|---|---|---|
| ICP title match rate | > 70% | > 85% | > 95% |
| Data completeness (name + company + title) | > 90% | > 95% | > 99% |
| Email discovery rate | > 30% | > 50% | > 70% |
| Duplicate rate post-dedup | < 10% | < 5% | < 2% |
Error Handling
| Error | Cause | Recovery |
|---|---|---|
| LinkedIn account restricted | Exceeded daily profile view limit | Pause 24 hours, reduce batch to 50/launch |
| PhantomBuster "cookie expired" | Session cookie invalidated | Re-extract li_at cookie from browser |
| Empty CSV output | Search URL malformed or cookie rejected | Verify search URL loads in browser, re-paste cookie |
| Partial extraction | Runtime limit hit | Split into multiple smaller runs |
| Email discovery returns 0% | LinkedIn privacy settings | Use enrichment pipeline as fallback |
Cost Breakdown
| Component | Free Tier | Paid Tier | At Scale |
|---|---|---|---|
| Sales Navigator | $0 (30-day trial) | $99/mo (Core) | $149/mo (Advanced) |
| PhantomBuster | 2hr/day, 500 credits | $69/mo (20hr) | $159/mo (80hr) |
| Email discovery | 500 included | Included | $0.10-$0.20/email |
| Total for 500 leads | $0 | $168/mo | $308/mo |
Anti-Patterns
Wrong: Running scraper at maximum speed without delays
Blasting 1,000 profile views in an hour triggers LinkedIn's automated detection. Account gets restricted for 7-30 days. [src1]
Correct: Throttle to 50-100 profiles per session with 60+ minute gaps
Spread extraction across multiple sessions with conservative launch intervals. [src1]
Wrong: Using personal LinkedIn account for scraping
If the account gets restricted, you lose your professional network and messaging history.
Correct: Use a dedicated Sales Navigator seat for scraping
Separate scraping activity from your primary account. [src4]
When This Matters
Use when the agent needs to extract a targeted lead list from LinkedIn Sales Navigator based on ICP criteria. Requires an active Sales Navigator subscription and produces a CSV ready for enrichment or CRM import.