Sales Navigator MCP
Sales Navigator MCP Server: build lead search, lead lists and InMail into your product with a coding agent
Point Codex, Cursor, Claude Code or Gemini CLI at the hosted Unipile MCP server and it reads the Sales Navigator API routes: lead and account search with Sales Navigator filters, searches imported from a Sales Navigator URL, lead lists, account lists and InMail. The agent writes the feature into your project and tests it on a Development application, on the seat each user connects.
Codex
Cursor
Claude Code
Gemini CLI
Windsurf
Any MCP client
Start with a Development application. 7-day free trial, no credit card.
Your coding agent
Unipile MCP connected
Add a Sales Navigator lead search to the prospecting page: job title, seniority, headcount, and "changed jobs". Hide it when the user has no seat.
Run requestGET /v2/{account_id}/linkedin/contractsseat found
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/search/peopleschema loaded
Added searchLeads(filters) in salesnav.service.ts and the filter form on the prospecting page. The feature checks the account's contracts first. Ran it on the Development app: 25 leads on the first page, cursor saved for the next one.
Now a "Save to lead list" button on each result.
Describe the next feature…
The short answer
Is there an official Sales Navigator MCP server?
No. LinkedIn does not publish a Sales Navigator MCP server, and Sales Navigator search, lists and InMail are not open to third-party products through its developer program. The Unipile MCP server is a hosted third-party server generated from the Unipile API, which includes the Sales Navigator API routes. Your coding agent reads them and writes the feature into your product. Each user connects their own LinkedIn account with its Sales Navigator seat through Hosted Auth, and your code acts on behalf of that authenticated user.
The server URL
https://developer.unipile.com/mcp?branch=v2.0
AuthHeader
X-API-KEY with a scoped Account API key, over streamable HTTP. The same URL serves LinkedIn Classic, Recruiter and the other channels.SeatThe Sales Navigator routes answer when the connected LinkedIn account holds a Sales Navigator seat. Check with
GET /v2/{account_id}/linkedin/contracts.AccountsYour Development application's test accounts while you build; in production, the account each user connected through Hosted Auth.
ClientsCodex, Cursor, Claude Code, Gemini CLI, Windsurf, or any MCP client over streamable HTTP.
How one prompt becomes a Sales Navigator feature
1
You describe the featureLet users paste a Sales Navigator search URL and import the leads into a campaign.
2
The agent reads the Sales Navigator API route
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/searchschema loaded
3
It writes the code and tests it on your Development applicationAdded importFromUrl() in salesnav.service.ts and the "Import from Sales Navigator" field on the campaign page. Ran it with a test URL on the Development app: 25 leads on page one, next cursor stored.
Prompts, not glue code
What your coding agent builds with the Sales Navigator MCP
Pick a Sales Navigator feature. Each transcript shows the prompt you give the agent, the Sales Navigator API routes it reads and runs through the Unipile MCP server, and what lands in your project. Paths are complete, on the API base URL
https://api.unipile.com, with a scoped key in the X-API-KEY header.Add Sales Navigator lead search to the prospecting page: current job title, seniority, company headcount, and a "changed jobs" toggle.
Read endpointGET /v2/{account_id}/linkedin/sales-navigator/search/parametersschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/people25 leads
Built the filter form (the pickers resolve names to IDs through the search parameters route),
searchLeads(filters, cursor) in salesnav.service.ts and the results table with "Load more". Tested on the Development app with a test seat: 25 leads on the first page.Lead search with the Sales Navigator filters your users already know
The agent reads the people search body, builds the form in your stack and runs the first search on your Development application. Job title, seniority, function, headcount, location, and signals such as changed jobs or recent posts: the same filters the user has in Sales Navigator, on their own seat.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/search/parametersPOST/v2/{account_id}/linkedin/sales-navigator/search/people
Common mistake: Typing a job title or a company name where the filter expects an ID. Resolve the text to an ID with the search parameters route first, then pass the ID in the people search.
Sales Navigator search API: key features
Add an account search on the Sales Navigator routes to the CRM, so reps can find target companies and open them in the CRM.
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/search/companiesschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/companies200 OK
Added
searchAccounts(filters, cursor) and an "Accounts" tab next to "Leads" on the prospecting page. Each company row links to the matching CRM record when one exists. Tested on the Development app.Account search for target company lists
The companies search is the account side of Sales Navigator: the rep narrows down target companies, then moves on to the people who work there. The agent reads the exact body of the companies route before it writes the form, so it never guesses a filter name.
Endpoints the agent uses
POST/v2/{account_id}/linkedin/sales-navigator/search/companiesGET/v2/{account_id}/linkedin/sales-navigator/search/parameters
Common mistake: Reusing the lead search body on the companies route. People and companies take different filter sets; let the agent read each schema instead of copying one into the other.
Sales Navigator API guide
Let users paste a Sales Navigator search URL, or pick one of their saved searches, and import the leads into a campaign.
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/searchschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search25 leads
Added an "Import from Sales Navigator" field that sends the pasted URL to the search-from-URL route, and a saved search picker that uses
load_saved_search on the people search. Leads are added to the campaign one page at a time, with the cursor stored. Tested on the Development app.Import a search the user already built in Sales Navigator
Many users build their search in Sales Navigator itself. Your product can take that search as it is: from the URL they paste, or from a saved or recent search on their account. No need to rebuild the filters in your UI.
Endpoints the agent uses
POST/v2/{account_id}/linkedin/sales-navigator/searchPOST/v2/{account_id}/linkedin/sales-navigator/search/people
Common mistake: Sending a classic LinkedIn search URL to the Sales Navigator route. Validate that the pasted link is a Sales Navigator search before calling it, and show a clear message otherwise.
Sales Navigator API data guide
Show the user's Sales Navigator lead lists in the sidebar, let them open one, and add a "Save to lead list" button on each search result.
Run requestGET /v2/{account_id}/linkedin/sales-navigator/lead-lists6 lists
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/saveschema loaded
Added the lead lists sidebar, the list view (browse route, paginated) and the "Save to lead list" button, which calls the save route once per click and shows the error if LinkedIn refuses it. Tested on the Development app with a test list.
Lead lists: browse them, save to them
Lead lists are where a Sales Navigator user keeps prospects. Your product can read the lists the user has, open one, and add a lead to it from your own UI. The list stays in Sales Navigator, so the user sees the same list in both places.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/lead-listsPOST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
Common mistake: Using a list name as
Sales Navigator API guide
list_id. Take the ID from GET .../lead-lists, and do not retry a save blindly after a timeout: browse the list first to see if the lead is already there.Sync the rep's Sales Navigator account lists into the CRM as target account segments, and let them add a company to a list from the account page.
Run requestGET /v2/{account_id}/linkedin/sales-navigator/account-lists4 lists
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}38 accounts
Added the account list sync (lists and their companies upserted as CRM segments, on a manual "Sync" button) and "Add to account list" on the company page, on the save route. Tested on the Development app.
Account lists as target account segments
Account lists mirror lead lists on the company side. A CRM or ABM tool can show the rep's lists as segments and add a company from its own account page, with the same three routes: list, browse, save.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/account-listsPOST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}/save
Common mistake: Mixing lead lists and account lists. A lead goes to a lead list, a company to an account list; each list ID belongs to one route family.
LinkedIn API for sales software
When a rep opens a lead, show the profile the way Sales Navigator shows it, not the classic LinkedIn version.
Read endpointGET /v2/{account_id}/users/{user_id}schema loaded
Run requestGET /v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator200 OK
Added
getLeadProfile(id), which requests the linkedin_sales_navigator variant, and the lead drawer on the prospecting page. The profile is fetched only when the rep opens a lead. Tested on the Development app.The lead profile, in its Sales Navigator variant
The profile route takes a variant.
linkedin_sales_navigator returns the profile as Sales Navigator shows it; linkedin_classic and linkedin_recruiter are the other two. The route also documents profile sections such as experience, education and skills, and the agent reads how to request them.Endpoints the agent uses
GET/v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator
Common mistake: Passing a profile URL or a display name as
LinkedIn MCP server
user_id. Use the ID returned by the search or the list, and fetch one profile when the user opens it, not a whole results page.Let the rep send a Sales Navigator InMail with a subject from the lead drawer, and show how many InMail credits are left.
Run requestGET /v2/{account_id}/linkedin/inmail-creditscredits
Read endpointPOST /v2/{account_id}/chats/sendschema loaded
Added the credits badge and the InMail composer (subject and body).
sendInMail() calls the start-a-chat route with specifics.linkedin.sales_navigator.subject. The send button is disabled at zero credits, and a failed send is shown to the rep, never retried. Tested on the Development app.Sales Navigator InMail with a subject, on the user's credits
An InMail starts a new chat. The start-a-chat route takes LinkedIn-specific options, and the Sales Navigator block carries the subject. Credits belong to the user's seat: read them before you show the composer, and let the rep decide each send.
Endpoints the agent uses
POST/v2/{account_id}/chats/sendGET/v2/{account_id}/linkedin/inmail-credits
Common mistake: Retrying an InMail after an ambiguous error. A retry can send the message twice and spend two credits. Check the user's chats before offering to send again.
Send InMail with the LinkedIn API
Real routes, complete paths
The Sales Navigator API routes behind the Sales Navigator MCP
The server exposes the Unipile API itself, so what your coding agent can build on Sales Navigator is what the Sales Navigator API does. Ten routes are specific to Sales Navigator: search, search parameters, lead lists and account lists. Profiles, InMail, credits and contracts use the shared LinkedIn routes. Paths below are complete, on the API base URL
https://api.unipile.com, with the scoped key in the X-API-KEY header.10Sales Navigator routes: people, companies, from a URL, parameters, lead lists, account lists
6list routes: list, browse and save, for lead lists and for account lists
1server URL and one scoped key, shared with LinkedIn Classic, Recruiter and the other channels
0endpoints to guess: the agent reads the exact schema before it writes code
2 routes
Lead search
People search with the Sales Navigator filter set, and the parameters route that turns a job title, company or location typed by the user into the ID the filter expects.
POST/v2/{account_id}/linkedin/sales-navigator/search/people
GET/v2/{account_id}/linkedin/sales-navigator/search/parameters
1 route
Account search
Company search on the Sales Navigator side, to build target account lists before looking for the people inside them.
POST/v2/{account_id}/linkedin/sales-navigator/search/companies
1 route + saved searches
Search from a URL
Run a search the user built in Sales Navigator from its URL. Saved and recent searches load through the people search body.
POST/v2/{account_id}/linkedin/sales-navigator/search
POST/v2/{account_id}/linkedin/sales-navigator/search/people
3 routes
Lead lists
List the user's lead lists, browse the leads in one, save a lead to a list.
GET/v2/{account_id}/linkedin/sales-navigator/lead-lists
POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}
POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
3 routes
Account lists
The same three operations on the company side: list the account lists, browse one, save an account to it.
GET/v2/{account_id}/linkedin/sales-navigator/account-lists
POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}
POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}/save
Shared routes
Lead profile and connection
Read a profile in its Sales Navigator variant, and send a connection request from the lead page with the shared LinkedIn routes.
GET/v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator
POST/v2/{account_id}/users/me/relation-requests
Shared routes
Sales Navigator InMail
Start a chat with a subject under the Sales Navigator options, and read the seat's remaining InMail credits.
POST/v2/{account_id}/chats/send
GET/v2/{account_id}/linkedin/inmail-credits
Shared routes
Seat, contracts and connection
Connect the account through Hosted Auth, list the contracts it holds and select the Sales Navigator one when there are several.
POST/v2/auth/link
GET/v2/{account_id}/linkedin/contracts
POST/v2/{account_id}/linkedin/contracts/{contract_id}/select
One complete request, exactly as the agent runs it
The server follows every Unipile API release, so a new Sales Navigator route reaches your agent the day it ships. In production your product calls the same routes on the account each user connected through Hosted Auth, as user actions in your UI. Same routes as the Unipile LinkedIn API, in the code the agent writes or through the official SDKs.·API reference
The Sales Navigator MCP filter set, field by field
These are the body fields of
POST /v2/{account_id}/linkedin/sales-navigator/search/people, as the Unipile API v2 documents them. Your coding agent reads their exact shape through the MCP server before it writes the filter form, so the fields in your UI match the ones Sales Navigator applies on the user's seat.Role and seniority12 fields
Find the right person: what they do today, what they did before, how senior they are and how long they have been in the role.
Body fields
Keywords and namekeywords, first_name, last_name
Current and past rolecurrent_job_title, past_job_title, function, seniority, persona
Experience and backgroundyears_in_position, years_of_experience, school, profile_language
Company and location10 fields
Narrow down by the company the lead works for, its size and type, its industry, and where the lead or the company is based.
Body fields
Companycurrent_company, past_company, company_headcount, company_type, industry, years_in_company
Locationlocation, company_location, postal_code, radius
Signals13 fields
The filters sales teams pay for: people who just changed jobs, who posted recently, who follow the user's company or viewed the user's profile.
Body fields
Activity and intentchanged_jobs, posted_on_linkedin, following_your_company, viewed_your_profile_recently, recent_interaction
Relationship with the usernetwork_distance, connections_of, past_colleague, shared_experiences, group, messaged, viewed_profile, last_viewed_at
Lists and saved searches8 fields
Search inside what the user already curated in Sales Navigator, reload a saved or recent search, or save the current one back to their account.
Body fields
Listslead_list, account_list, saved_leads, saved_accounts, saved_resources
Saved and recent searchesload_saved_search, load_recent_search, save_search
Most filters expect IDs, not free text. A job title, a company, an industry or a location typed by the user is resolved first with
GET /v2/{account_id}/linkedin/sales-navigator/search/parameters, then passed to the people search. The schema also documents include, exclude, id, name, min and max inside the filter objects: the agent reads which filter takes which shape instead of guessing. Account search has its own body on POST /v2/{account_id}/linkedin/sales-navigator/search/companies.Quick start
Add the Sales Navigator MCP to your coding agent in one line
There is no separate Sales Navigator MCP server to install: the hosted Unipile MCP server covers the Sales Navigator API under the same URL as LinkedIn Classic, Recruiter and every other channel. Point your coding agent at it with a scoped API key, and it reads the Sales Navigator routes and runs requests against your Development application. The snippets below are the ones from the official documentation.
Cursor~/.cursor/mcp.json
Claude Codeclaude mcp add --transport http …
Codex CLI and IDE extension~/.codex/config.toml
Gemini CLI~/.gemini/settings.json
Windsurf~/.codeium/windsurf/mcp_config.json
# Register the hosted Unipile MCP server in Claude Code
claude mcp add --transport http --scope user \
unipile "https://developer.unipile.com/mcp?branch=v2.0" \
--header "X-API-KEY: your-scoped-api-key"
# Verify the connection, or type /mcp inside a session
claude mcp list
{
"mcpServers": {
"unipile": {
"url": "https://developer.unipile.com/mcp?branch=v2.0",
"headers": {
"X-API-KEY": "your-scoped-api-key"
}
}
}
}
{
"mcpServers": {
"unipile": {
"url": "https://developer.unipile.com/mcp?branch=v2.0",
"headers": {
"X-API-KEY": "your-scoped-api-key"
}
}
}
}
# Codex CLI and the Codex IDE extension share this file
[mcp_servers.unipile]
url = "https://developer.unipile.com/mcp?branch=v2.0"
http_headers = { X-API-KEY = "your-scoped-api-key" }
# Verify: codex mcp list
{
"mcpServers": {
"unipile": {
"httpUrl": "https://developer.unipile.com/mcp?branch=v2.0",
"headers": {
"X-API-KEY": "your-scoped-api-key"
}
}
}
}
# Verify: /mcp inside Gemini CLI
Server connected. Try: "Add Sales Navigator lead search to the prospecting page, and hide it when the account has no seat."
1
Start with a Development applicationIn the Unipile dashboard, work in your Development application: connect a test LinkedIn account that holds a Sales Navigator seat through Hosted Auth, create a Scope with it and a scoped Account API key for that Scope. Production stays untouched, and an MCP client never gets a global or Service key.
2
Add the server to your coding agentPaste the config for your client, with the scoped key in the X-API-KEY header. Restart the client if it does not pick it up right away.
3
Describe the feature, review the codeDescribe the Sales Navigator feature you need. The agent reads the routes, writes the code in your project and runs requests on the Development app. Switch the key to Production when the flow passes.
Seat, contracts, on behalf of the user
Whose Sales Navigator seat does your integration use?
The seat of the user who connected the account. While you build, a test account on your Development application. In production, the LinkedIn account each user connected through Hosted Auth, with the Sales Navigator subscription that user already pays for, inside workflows that user starts and controls.
1 · Your coding agent
Codex, Cursor, Claude Code
Reads the Sales Navigator routes, writes the code
2 · Unipile MCP server
Hosted, scoped API key
Runs test requests on your Development app
3 · Unipile API
The Sales Navigator routes
Scopes the action to one account ID
4 · LinkedIn
Sales Navigator seat
LinkedIn's own rules, credits and limits apply
5 · The user's account
Connected through Hosted Auth
Their lists, their searches, their InMail credits
Sarah MitchellLinkedIn · Sales Navigator seat · linked by the user through Hosted Auth
Account ID
acc_7f3…c91, the only identifier your code storesContractsListed with
GET /v2/{account_id}/linkedin/contracts; Sales Navigator selected with POST /v2/{account_id}/linkedin/contracts/{contract_id}/selectInMailCredits read with
GET /v2/{account_id}/linkedin/inmail-creditsSessionHeld by Unipile, never exposed to your app
ReconnectDisconnect
Honest limits
What the Sales Navigator MCP does not change
The server does not lift LinkedIn's rules and does not promise volume. The Sales Navigator API gives your product the seat's real signals, so the feature you ship works inside them, the way the seat owner would.
What LinkedIn enforces
A Sales Navigator seat is requiredThe Sales Navigator routes answer only on an account that holds the seat. The seat is the user's own LinkedIn subscription; Unipile does not provide one.
InMail creditsEach InMail spends a credit of the user's seat, on the terms LinkedIn sets for that seat. Read the balance with
GET /v2/{account_id}/linkedin/inmail-credits before you show the composer.Search paginationSales Navigator searches return results page by page, within what LinkedIn lets the seat see. Your code pages with the cursor the API returns; it cannot fetch more than the seat itself can.
Invitation quotas still applyA connection request sent from a lead page uses the same weekly quota LinkedIn applies to the account, seat or no seat.
Checkpoints at connection timeLinkedIn may ask the account owner for a code or an in-app confirmation when the account is linked. Hosted Auth walks the user through it; your code never sees a password.
What to build into your product
Writes are user actionsSave a lead to a list, save an account, send an InMail: each one is triggered by the user in your UI, never by a background loop.
Check the seat before showing the featureList the contracts, select the Sales Navigator one when there are several, and hide Sales Navigator search and lists on accounts that have no seat.
Never retry a write blindlyAfter a timeout on an InMail or a list save, check the chats or browse the list before offering to try again. A blind retry can send twice or spend a second credit.
Read the usage signals and back offUnipile relays rate-limit responses, quota errors and provider states as they happen. Treat a limit as a stop, not as a retry.
One Scope and one scoped key per tenantA workspace only sees the accounts assigned to its Scope. The global key stays on your backend for administration, and the account owner can disconnect at any time.
Four ways to reach Sales Navigator data
How the Sales Navigator MCP options compare
Every Sales Navigator MCP server is third-party, so the real question for a product team is how each one reaches Sales Navigator, on whose seat, and what you can ship with it. The four families you will find, side by side.
Unipile MCP server
Community open-source servers
Public-data marketplaces
No-code MCP bridges
How it reaches Sales Navigator
Unipile MCP serverThe seat each of your users connects through Hosted Auth, then the Sales Navigator API routes
Community open-source serversYour own LinkedIn login on your machine, driven by a browser session
Public-data marketplacesPublic pages, no seat, results served from a data collection pipeline
No-code MCP bridgesTheir LinkedIn app connection and a set of predefined actions
Sales Navigator features
Unipile MCP serverLead and account search, search from a URL, lead lists, account lists, InMail, plus the Sales Navigator profile variant
Community open-source serversMostly the classic profile; Sales Navigator depends on the project
Public-data marketplacesPublic profiles and companies, not the user's lists or InMail
No-code MCP bridgesPredefined actions, usually outside Sales Navigator
Read, or read and act
Unipile MCP serverRead and act: search, save to a list, send an InMail, as features of your product
Community open-source serversMostly read, a few writes depending on the project
Public-data marketplacesRead only
No-code MCP bridgesPredefined writes, little reading
Hosting and clients
Unipile MCP serverHosted, one URL, any coding agent over HTTP: Codex, Cursor, Claude Code, Gemini CLI, Windsurf
Community open-source serversSelf-hosted, local or Docker, usually one client at a time
Public-data marketplacesHosted, token per client
No-code MCP bridgesHosted, one generated URL per configuration
Other LinkedIn products and channels
Unipile MCP serverLinkedIn Classic and Recruiter, plus WhatsApp, Instagram, Telegram, Gmail, Outlook, IMAP, Google and Outlook calendars
Community open-source serversNone
Public-data marketplacesOther public data sources
No-code MCP bridgesThousands of apps, each with a shallow action set
Pricing model
Unipile MCP serverPer connected account, whatever the request volume, 7-day free trial
Community open-source serversFree, you host and maintain it
Public-data marketplacesPer credit or per result
No-code MCP bridgesPer task or per action
Whose terms your product works under
Unipile MCP serverEach user's own account and Sales Navigator subscription, in workflows the user initiates and controls from your product
Community open-source serversYour personal account, at your own risk
Public-data marketplacesThe marketplace's data collection terms
No-code MCP bridgesThe bridge's terms and its LinkedIn app permissions
Categories are described generically on purpose. What sets the Unipile server apart is the account model: your product searches, saves and sends as the user who connected the seat, with that user's lists and InMail credits, behind a single server URL shared with LinkedIn Classic, Recruiter and eight other channels.
Sales Navigator MCP FAQ
The questions people actually type: official or not, the server URL, lead search, the seat, InMail, MCP versus API, accounts and price.
Not from LinkedIn: it does not publish a Sales Navigator MCP server, and Sales Navigator search, lists and InMail are not open to third-party products through its developer program. The Unipile MCP server is a hosted third-party server generated from the Unipile API, and it exposes the Sales Navigator API routes: lead and account search, search from a Sales Navigator URL, lead lists and account lists. Your coding agent reads them and writes the feature into your product, where each user connects their own account and your code acts on behalf of that authenticated user. Unipile is an independent technical intermediary and is not affiliated with, endorsed by, or sponsored by LinkedIn.
The same URL as the rest of the Unipile API:
https://developer.unipile.com/mcp?branch=v2.0, over streamable HTTP, with a scoped Account API key in the X-API-KEY header. There is no separate Sales Navigator server. Paste it into Codex, Cursor, Claude Code, Gemini CLI or Windsurf, and the agent finds the Sales Navigator routes on its own.Yes. The agent reads
POST /v2/{account_id}/linkedin/sales-navigator/search/people and its filter set (job title, seniority, function, headcount, location, changed jobs, lead lists, saved searches and more), resolves typed values to IDs with GET /v2/{account_id}/linkedin/sales-navigator/search/parameters, writes the search into your project and runs it on your Development application. Account search uses POST /v2/{account_id}/linkedin/sales-navigator/search/companies, and a search the user built in Sales Navigator runs from its URL with POST /v2/{account_id}/linkedin/sales-navigator/search.The server connects, but the Sales Navigator routes only answer on an account that holds a Sales Navigator seat. Without it, the account works on the classic LinkedIn search, profile and messaging routes. Your code lists the account's contracts with
GET /v2/{account_id}/linkedin/contracts, selects the Sales Navigator one with POST /v2/{account_id}/linkedin/contracts/{contract_id}/select when there are several, and hides the feature when there is none. The seat is the user's own LinkedIn subscription; Unipile does not sell one.Yes, as a user action. An InMail starts a chat with
POST /v2/{account_id}/chats/send, with the subject in specifics.linkedin.sales_navigator.subject. Each InMail spends a credit of the user's seat; read the balance with GET /v2/{account_id}/linkedin/inmail-credits before showing the composer, and never retry a send after an ambiguous error, since a retry can send twice.Same routes, different moment. The Sales Navigator API is what your product calls in production, over REST or the official SDKs, with its own scoped keys. The Sales Navigator MCP is how your coding agent reads those routes while you build: it discovers the endpoints, reads the schemas, writes the code and tests it on your Development application. Nothing runs through the MCP server in production unless you choose to.
While you build, the test accounts of your Development application. In production, only the account an end user connected through Hosted Auth and that sits in your Scope: your code receives an account ID, never credentials, and every request runs on behalf of that authenticated user, inside a workflow the user initiates and controls from your product. How often your product acts on an account is a customer-side decision within LinkedIn's limits.
The MCP server is included in every Unipile plan, with no per-message or per-request fee. Billing is per connected account, whatever the channel: from 49 EUR per month for up to 10 accounts, then 5 EUR per additional account, down to 3 EUR at volume. The 7-day free trial needs no credit card. Full grid on the pricing page. The Sales Navigator seat itself is the user's LinkedIn subscription.
Instagram