Sales Navigator is a filtered search over LinkedIn members, plus saved lists and alerts on the people you save. This guide walks through how it works, then rebuilds the search part as a LeadOcean API query you can size for free.
LinkedIn describes the tool as search with 50+ filters, saved custom filters and real-time lead alerts (September 2026). The same page says you can search 1+ billion members. Most explainers stop at that feature tour. This one shows the queries.
TL;DR
- Sales Navigator has three working parts: filtered search, saved searches and lists, and alerts on saved leads. Only the first is a data query, so only the first can move to an API.
- It takes about 15 minutes. Sizing the audience costs 0 records, and a 25-person test page spends 25 of your 1,000 free records.
- Sales Navigator stays the place for research and alerts. The API is for pulling the same audience as rows, with emails and statuses.
Prerequisites
- A Sales Navigator search you want to reproduce. You need its filter values, not a login in the loop.
- A LeadOcean account. Start free: no card, 1,000 records, one-off, work email required.
- An API key from the app, exported as
$LEADOCEAN_API_KEY. curlandjq.
Step 1: Write down what your Sales Navigator search does
Start from the search, not the screen. Note each filter you set, because each one maps to a field. This is the example used below, as a plain spec.
{
"seniority_level": "VP",
"function": "Sales",
"geography": "Canada",
"result": "people at companies that fit"
}This is how the tool works in practice. You set filters, LinkedIn returns matching members, you save the ones you want, and the saved leads feed alerts. The plan sets how much of that you get. LinkedIn's plans page (September 2026) lists three: Core for individual sellers, Advanced for sales teams, and Advanced Plus for teams on an integrated CRM. Advanced Plus pricing is by demo request.
Two details matter for what comes next. Lead and account alerts fire on job or role changes for saved leads. And per LinkedIn, adding leads to your CRM (September 2026) is available only on Advanced Plus.
Step 2: Map each filter to a LeadOcean field
Each Sales Navigator filter has a matching field in the LeadOcean search body. The body is flat JSON, and every filter is an array of strings.
| Sales Navigator filter | LeadOcean field | Example value |
|---|---|---|
| Seniority level | jobLevel | VP |
| Function | jobFunction | Sales & Business Development |
| Geography | country | CA |
| Current job title | title | Head of Sales |
| Company headcount | employeeRange | 51-200 |
| Industry | industry | resolve with the enum lookup |
Enum values are exact strings, and a near miss returns nothing. Vice President is empty, VP works. List the valid values for free.
curl -s "https://api.leadocean.io/v1/enums/job_level" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq -c '.values'The same lookup works for job_function, employee_range and country. LeadOcean has 50 people filters and 34 company filters. Not every Sales Navigator filter has a twin, and spotlights such as recent posts have no search field here.
Step 3: Size the audience for free
Send count=true as a query parameter with limit at 1. It costs 0 records and data comes back empty.
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["CA"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"],
"limit": 1
}' | jq '.meta | {total, totalIsExact, countOnly}'meta.total is capped at 100,000. If you work in an AI assistant, the same check is one prompt against the hosted MCP server at https://api.leadocean.io/mcp.
Using LeadOcean, count people in Canada with job level VP and job
function Sales & Business Development. Do not search for anyone.Claude calls leadocean_count_leads, which is free.
Step 4: Pull one page of rows
Drop count=true and set a small limit. Each person returned costs 1 record, so start at 25. The limit runs from 1 to 100.
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["CA"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"],
"limit": 25
}' > page1.json
jq '.meta | {count, credits, nextCursor}' page1.jsonFor page two, send the same body with "cursor" set to the exact meta.nextCursor string. Do not edit or store a cursor. One search pages through at most 10,000 rows by default, so narrow the filters for larger pulls.
Search rows are thin. They carry the profile and flags such as has_email, not addresses. To read an address, enrich one person. POST /v1/people/enrich takes exactly one of linkedin_url, email, phone or person_id, and reveal_email set to true returns the address. The email guide covers that call.
Step 5: Replace the saved search with a file
A Sales Navigator saved search is a set of filters you re-run. Store it as a JSON file and re-run the free count on a schedule.
cat > search.json <<'JSON'
{"jobLevel":["VP"],"jobFunction":["Sales & Business Development"],
"country":["CA"],"emailStatus":["verified","catch_all_valid","catch_all"],"limit":1}
JSON
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "Content-Type: application/json" \
-d @search.json | jq -r '[now|strftime("%Y-%m-%d"), .meta.total] | @csv' >> counts.csvRun it from cron and read counts.csv. LeadOcean refreshes its dataset monthly, and each record carries its own fetched_at date. So a weekly count is enough.
This is not a replacement for alerts. LeadOcean has no alert feed and no job-change push. If real-time lead alerts are why you pay for Sales Navigator, keep it for that and use the API for the list.
When to keep Sales Navigator and when to use the API
Keep Sales Navigator when the job is research. Lead pages, spotlights and alerts on saved leads exist to tell you who just changed jobs or posted. An API does not do that.
Use the API when the job is volume or automation. A browser seat does three things badly. It cannot version a query in git, run a count every week or hand a CSV to a sequencer. The cost shape differs too. A Sales Navigator plan is per seat, with Advanced Plus priced by demo request. LeadOcean is Free for 1,000 records, then Solo at $97 a month for one person or Agency at $497 a month for a team, both at a fair-use pace.
The honest split for most technical buyers is both. Research and alerts in Sales Navigator, list building in code. Neither one replaces the other.
What you get
Step 2 returns the exact strings the jobLevel filter accepts. We ran it through the MCP server on 2026-10-21.
{"name":"job_level","total":6,"matched":6,"values":["C-Team","Director","Manager","Other","Staff","VP"],"truncated":false}Step 3 for jobLevel VP, jobFunction Sales & Business Development and country CA was counted through leadocean_count_leads on 2026-10-21, with no email filter passed. It returned 5,574 people, the tool's default of verified, catch_all_valid and catch_all addresses. Without that default the same filters match 18,800 people. It cost 0 records. Your number moves as the data refreshes.
Step 4 returns a page of rows and a meta block. This is the meta shape from the API reference (September 2026), with placeholder values:
{
"meta": {
"source": "leadocean",
"count": 25,
"credits": 25,
"limit": 25,
"nextCursor": "opaque-string-from-the-response"
}
}Reading credits after each call is the quickest way to see what a run cost.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | The x-api-key header is missing or the key is wrong. | Copy a fresh key from the app and re-export $LEADOCEAN_API_KEY. |
| 402 | Your records are spent. The free plan is 1,000 records, one-off. | Call GET /v1/account for the balance, or move to Solo ($97 a month) or Agency ($497 a month) on pricing. |
| 429 | Faster than your plan's rate per account: 5 a second on Free, 50 on Solo, 200 on Agency. | Wait the Retry-After seconds and retry. |
| Empty results | A filter value is not an exact enum string, such as Vice President instead of VP. | List the enum values and copy the string. |
| 400 Invalid cursor | The cursor was edited, stored or reused on a different search. | Restart the query and pass back meta.nextCursor unchanged. |
| Export refused | One export request is capped at 50,000 rows, and an account at 500,000 rows a day. | Split the job across requests and days, or narrow the filters. |
FAQ
How does Sales Navigator work?
You set filters, LinkedIn returns matching members, and you save the ones you want to lists. Saved leads then feed alerts and lead pages. LinkedIn says search uses 50+ filters (September 2026). A lead page adds spotlights such as recent job changes and posts, per its help page.
Does Sales Navigator give you email addresses?
Not as a feature. LinkedIn's help page says contact details appear when the member chose to share them. To fill the gap, see does Sales Navigator provide email addresses.
Can I export a Sales Navigator list?
Take the filters or the profile URLs to an API and pull the rows from there. The options are in how to export a list from Sales Navigator.
Is LeadOcean a Sales Navigator replacement?
No. It has no alerts, no lead pages and no rep workspace. It is a data API and MCP server with an export app. It replaces the step where you copy a list out of a search, not the research.
How many records does this guide use?
Sizing costs 0 records. The one 25-person page in Step 4 costs 25 of the 1,000 free records. For the email step, read how to find an email from Sales Navigator.
Run your Sales Navigator search as an API query, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →