---
title: "Search people (Sales Navigator)"
method: POST
path: "/v1/actions/search_people_sales_navigator"
tags: ["Search"]
---

# Search people (Sales Navigator)

`POST /v1/actions/search_people_sales_navigator`

## Request

- Base URL: `https://api.heyreagent.com`
- URL: `https://api.heyreagent.com/v1/actions/search_people_sales_navigator`
- Auth: HTTP bearer

Search people in Sales Navigator through a shared seat, by names of titles, places, industries and companies.

confirm false (the default) only previews: how many match and what it costs, no people. confirm true returns them and charges 0.02 credits a person.

action is "preview", "blocked" or "results". leads, returned, creditsCharged and nextCursor are present only on "results"; estimatedCredits only on "preview".

leads[].providerId is a Sales Navigator id (ACw…), not a member id. leads[].linkedinUrl is what the actions asking for a profile link take.

A cursor lasts 24 hours and works only with the filters it was made with, or with none.

Filters are names; companyIds is the one that takes ids.

Docs: https://heyreagent.com/docs/actions/search_people_sales_navigator

## Request body

- object
  - `keywords` string: Free-text keywords searched across all profile fields (title, headline, about, company).
  - `titles` string[]: Job titles, e.g. ["Chief Technology Officer","VP of Engineering"]. Matched as OR'd keywords — pass variants to go broad.
  - `locations` string[]: Person locations in plain English, e.g. ["United States","London"]. Resolved to LinkedIn regions automatically.
  - `industries` string[]: Company industries in plain English, e.g. ["Software","Financial Services"].
  - `companies` string[]: Current companies by name, e.g. ["Google","Stripe"]. Each name is looked up and the top match used — when you already have LinkedIn company ids (search_companies / list_funding_signals return companyId), pass companyIds instead.
  - `companyIds` unknown[]: Current companies by LinkedIn company id — the companyId values search_companies / list_funding_signals return (up to 100). Exact: no name lookup, so no same-name mix-ups. Combine with seniorities and changedJobs / postedOnLinkedIn to get the decision-makers at signal companies who just moved / are posting.
    - unknown
  - `functions` string[]: Job functions/departments, e.g. ["Engineering","Sales","Marketing"].
  - `seniorities` string[]: Seniority levels, e.g. ["CXO","VP","Director","Manager"] (owner/partner, cxo, vice_president, director, experienced_manager, entry_level_manager, strategic, senior, entry_level, in_training).
  - `companyHeadcounts` string[]: Company size bands. Valid: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+.
  - `changedJobs` boolean: Only people who recently changed jobs (buying signal).
  - `postedOnLinkedIn` boolean: Only people who recently posted on LinkedIn (active/reachable signal).
  - `companyMinRevenueMillions` number: Only people at companies with at least this annual revenue, in millions (e.g. 10 = $10M+) — use it to target companies that can afford the user's price. LinkedIn uses fixed brackets (0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000); other values widen to the nearest one. The companies are matched on the same industries / companyHeadcounts / locations (as HQ location). Revenue is LinkedIn's estimate — companies without one are left out.
  - `companyMaxRevenueMillions` number: Only people at companies with at most this annual revenue, in millions (e.g. 100 = up to $100M). Same brackets as companyMinRevenueMillions.
  - `revenueCurrency` string: ISO currency of the revenue band, e.g. "USD" (default), "EUR", "GBP".
  - `limit` number: Max people to return THIS call (1–100, default 25). To exceed 100 total, page with cursor.
  - `cursor` string: Pagination cursor from a previous search_people_sales_navigator call's nextCursor — pass it back exactly as returned (it lasts 24 hours). Pass it with confirm:true to pull the NEXT batch — this is how you build a list larger than the 100/call cap. The cursor carries its search's filters, so pass the SAME filters or none. Omit for the first page.
  - `format` 'table' | 'csv': table (default) = structured rows to render as a table. csv = also return an export-ready CSV string (columns: Name, Title, Company, Location, Industry, Shared Connections, Tenure in Role, LinkedIn URL) — use for large lists the user wants to save/hand off.
  - `confirm` boolean: false (default) = return the credit-cost estimate only (nothing charged). true = pull the people and charge credits after the user agreed. Continuation pages (with cursor) should pass confirm:true.

## Response `200`

It worked. Inside result: action, matchCount, estimatedCredits, creditsCharged, yourBalance, returned, hasMore, nextCursor, leads.

- Worked
  - `ok` true, required
  - `result` object, required: What was asked for. A field that does not apply is left out, or is null.

## Other responses

- `default`: It did not work. The message says why, in plain English.

---

[API](https://skmtc.dev/heyreagent/apis/heyreagent-api.md) · [All operations](https://skmtc.dev/heyreagent/apis/heyreagent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/heyreagent/apis/heyreagent-api/revisions/917360c5f841?raw)
