TL;DR
- If your bill went up, do not just pay it. split the seat into two jobs: messaging and profile features, and lead search with contact data. Only the second has a cheaper substitute.
- The audit and a first sizing query take about 30 minutes. Sizing is free. A 25-row test pull spends 25 of the 1,000 free LeadOcean records.
- Keep LinkedIn for what only LinkedIn does, such as InMail and viewing your own network. Move list building to
POST /v1/people/searchand read emails fromPOST /v1/people/enrich.
This page prints no LinkedIn price. FullEnrich's guide reports that LinkedIn announced a Premium price increase in 2023 (FullEnrich, checked October 2026). LinkedIn's own price page sits behind sign-in, so we could not read a current figure. Read yours from your billing page.
Why the price is only half the question
A price rise forces a renewal decision. Most teams answer it with a vote on the number. The better answer is a usage audit.
A seat bundles several products. InMail is messaging. "Who viewed your profile" is a vanity feature. Advanced search is a data product. You pay one price for all three, so a rise hits the one you use least just as hard as the one you use daily.
A technical buyer can price the data part on its own. It is a query, a result set and a contact field. That is what an API sells, and it is measurable in records, not seats.
Prerequisites
- Your LinkedIn billing page open, so you have your real monthly or yearly figure and your seat count.
- A LeadOcean key from app.leadocean.io. Free has no card and 1,000 records, one-off.
- The key in your shell as
$LEADOCEAN_API_KEY. curlandjq.
export LEADOCEAN_API_KEY="paste-your-key-here"Step 1: Write down what the seat does for you
List the features you used in the last 30 days. Be honest. A seat you opened twice does not need renewing at any price.
LinkedIn's Sales Navigator plan page (October 2026) lists 50+ advanced search filters, AI account and lead insights, buyer intent, CRM integrations and team seat management. Sort your own usage into two buckets:
Bucket A (LinkedIn only): InMail, profile views, your connections, job posts
Bucket B (data): lead search, saved lists, export of names and emailsIf bucket A is empty, you are paying LinkedIn for data. That is the part you can replace.
One more filter on the audit: count the seats. A team of five on Sales Navigator pays five times. A team that needs one person to build lists and four to read them can share a single export. That alone often changes the answer.
Step 2: Turn one saved search into API filters
Take your most-used saved search and write it as a flat JSON body. Filters are arrays of strings. Enum values are exact, so Director, not Dir..
cat > search.json <<'JSON'
{
"jobLevel": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"employeeRange": ["51-200"],
"limit": 1
}
JSONIf you do not know a value, ask the free filter endpoint instead of guessing.
curl -s "https://api.leadocean.io/v1/enums" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq 'keys'Step 3: Size the list for free
Send count=true as a query parameter with limit 1. It costs 0 records. meta.total is capped at 100,000.
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 '.meta | {total, countOnly}'Agents can do the same with the leadocean_count_leads MCP tool, which is also free. On 2026-10-21 it counted this exact audience (Director, Sales & Business Development, US, 51-200 employees). The result is in the output block below.
Compare that number with what your saved search shows in Sales Navigator. A gap of a few percent is normal, because the two indexes differ. A gap of half means a filter was translated wrong. Fix the filter before you judge the data.
Step 4: Pull a small test page
This is the step that settles the argument. Eyeball ten rows against your saved search. Look at titles, company size and country, not names.
Pull 25 rows, not the whole list. A search page of 25 is 25 records. Check that the people match what Sales Navigator showed you.
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": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"employeeRange": ["51-200"],
"limit": 25
}' > page1.json
jq '.meta' page1.jsonFor more rows, pass the cursor from the previous page. One search pages to 10,000 rows. When meta.depthCapped is true, narrow the filters instead of walking further.
Do not export the whole list on the first pass. A test page that looks wrong costs 25 records. A full export that looks wrong costs far more.
Step 5: Read the email, not just the name
Search finds people. Enrich returns the contact. Send a LinkedIn URL (or an email, phone or person_id) to POST /v1/people/enrich. Set reveal_email to true to get the address.
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{"linkedin_url":"https://www.linkedin.com/in/jane-doe-123abc/","reveal_email":true}' \
| jq '.data.contact_data | {has_email, email_status}'A person we hold nothing for is a 404 and costs 0. Read email_status before any send. LeadOcean gives no refund for bounced emails.
Step 6: Export the full list
When the test page looks right, export. POST /v1/exports takes up to 50,000 rows a request and 500,000 a day. Bulk CSV export is not on Free. Solo at $97 a month includes it.
curl -s -X POST "https://api.leadocean.io/v1/exports" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"filters": {
"jobLevel": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"employeeRange": ["51-200"]
},
"limit": 5000
}'The export body nests the search filters under filters and sets limit beside them. Every row costs one record.
You can also build the same export without code on the Exports page in the app: filter builder, column picker, a price preview, then a CSV download.
Step 7: Decide, with numbers
The test answers two questions. Does the API return the people your saved search did? Does the cost per month beat the new seat price? You have the first answer from Step 4.
Put the two costs side by side for one month.
LinkedIn seat, per month (from your billing page): $____
LeadOcean Solo, one person: $97
LeadOcean Agency, a team with 5 keys: $497LeadOcean paid plans have a fair-use pace, not credits. There is no per-record price and no overage invoice. A LinkedIn seat buys a workspace with InMail and a UI. LeadOcean has none of that: no inbox, no dialer, no CRM, no Chrome extension. If your team lives in the Sales Navigator interface all day, price that gap before you move. If they export lists to a sequencer anyway, the API replaces the data half.
Cold email also needs warmed mailboxes. See inbox warming, inbox warm-up and Gmail warmup before you send from the list.
What you get
Free count run with the leadocean_count_leads MCP tool, 2026-10-21. Filters: jobLevel Director, jobFunction Sales & Business Development, country US, employeeRange 51-200. The default counts people with a verified, catch_all_valid or catch_all email.
{
"total": 36453,
"totalIsExact": true,
"totalAll": 119788,
"distinctCompanies": 20473,
"credits": 0
}total is the mailable count. totalAll is the same filters with no email condition. A search row has this shape. Response shape from the API reference (October 2026), with placeholder values:
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": { "has_email": true, "email_status": "verified" },
"meta": { "source_ids": { "person_id": "1000000001" } }
}
],
"meta": { "count": 1, "limit": 25, "nextCursor": null }
}Search rows carry flags, not addresses. The email comes from enrich in Step 5.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing, wrong or revoked key | Re-copy the key from app.leadocean.io and re-export $LEADOCEAN_API_KEY. The header is x-api-key. |
| 429 | Above your plan's rate limit on one key (5 a second on Free, 200 on Agency) | Honor Retry-After, add a short sleep, or run fewer workers. |
| 402 | The free 1,000 records are spent | Check GET /v1/account, or move to Solo at $97 a month or Agency at $497 a month. |
| Empty results | A filter value outside the catalogue, such as Vice President | Enum values are exact strings. Use VP and check GET /v1/enums. |
| Export refused | The request is over 50,000 rows or the day is over 500,000 | Split the export across requests or days. |
FAQ
Should I cancel LinkedIn Premium after a price increase?
Cancel if you only used it for lead search and contacts. Keep it if you rely on InMail or your own network. The audit in Step 1 answers this in ten minutes.
Does LeadOcean replace Sales Navigator?
For list building and contact data, yes. For the workspace, no. LeadOcean is an API, an MCP server and an exports page. It has no sequencer, dialer or CRM.
Do I need a card to test it?
No. Free is 1,000 records, one-off, no card, every feature. Counts and enrichments that find nothing cost 0.
How often is the data refreshed?
The dataset is refreshed monthly. Each record also carries its own fetched_at date.
Replace the lead-data half of your LinkedIn seat
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →