ToolsSearch & Enrichment

Search people

Stage people by role, seniority, employer, geo, or recent job change.

Tool: search_people

The call returns named rows plus search_id and creates no people or lead group. Review the rows, then use continue_search with search_id, the returned search_version for another bounded turn only after the user explicitly asks for more. Never loop continuation turns automatically or broaden the filters while this search remains active without user agreement. Use save_search(search_id) once to create or append to a people group. For company-first sourcing, pass within_lead_group_id to freeze the eligible saved company roster, or pass all reviewed current_employer_domain values with per_company_limit in one call. The server advances as many company scopes as fit within the turn's request and execution-time budgets. Never issue one search_people call per company. When a saved company group grows, start a new search with the same within_lead_group_id and exclude the existing linked people group; the save recommendation appends approved rows back to that group. Skip known people with exclude_lead_group, exclude_sequence, exclude_crm, or exclude_profiles. exclude_crm is best-effort and capped; global eligibility is checked again before enrollment. A plain persona search defaults to people located in the US (location_country='United States') when you pass no location; set location or location_country to search elsewhere. NOT for: a known person's profile → get_person_profile; company discovery → search_companies.

Parameters

ParamTypeRequiredDescription
titlestring or string[]noCurrent job title (fuzzy) - NOT the headline.
headline_keywordstringnoMatches the LinkedIn headline line only (recall opt-in).
past_titlestringnoA title held in a previous role.
senioritystring[]noClosed enum - a bad value returns a named validation_error.
functionstring[]noClosed enum (department) - a bad value returns a named validation_error.
current_employerstringnoEmployer name (fuzzy) - prefer current_employer_id when known.
current_employer_domainstring or string[]noValidated current-employer website domain(s), exact.
current_employer_idstring or string[]nocompany_id slug(s) for everyone-at-a-company; resolved to the provider id internally.
past_employerstringnoA previous employer name (fuzzy).
industrystringnoEmployer industry (fuzzy).
headcount_bandstring[]noEmployer size bucket, e.g. 201-500 (enum).
locationstringnoSubstring match on the person's full location (city/state/country).
location_countrystringnoCountry full name (exact) - a near-miss like USA silently returns 0.
schoolstringnoSchool attended (fuzzy), e.g. IIT, Stanford.
years_experience_minintegernoMinimum total years of experience (gte).
recently_changed_jobsbooleannoPair with job_changed_after to bound the window.
job_changed_afterstringnoISO date or 90d_ago/6m_ago - current role started on/after.
within_lead_group_idstring (slug or UUID)noQualified company scaffold for company-first search. It freezes the company roster; the people destination is selected on the first save_search.
per_company_limitintegernoValid people per company, 1-10. Optional with within_lead_group_id (default 3); required to turn reviewed domains into independent scopes.
limitintegernoMaximum rows for this staged turn, 1-1000. Default: 25.
exclude_lead_groupstring (slug or UUID)noSkip people already in this lead group - provider-side, so you don't re-fetch or re-pay for them.
exclude_sequencestring (slug or UUID)noSkip people already enrolled in this sequence.

Returns named staged rows and a durable search_id; it does not create people or a lead group.

Company-first: pass a saved company group as within_lead_group_id, or pass every reviewed current_employer_domain with per_company_limit in one call. The search freezes its eligible roster and owns independent per-company progress. If the company group later grows, start a new search with the same within_lead_group_id plus exclude_lead_group=<existing people group>; the returned save recommendation appends approved rows to that same linked people group.

Every durable response returns search_version; pass that value to continue_search(search_id, search_version) for one bounded turn.

On the first save, use save_search(search_id, group_name=...) or save_search(search_id, lead_group_id=...) to commit approved rows.

Changing the persona, scope, or filters starts a new typed search.

Unknown named params are rejected with validation_error (a typo'd filter must never silently broaden the search) - unlike most operations, which ignore extras.

Sample request — success

{
  "title": "CEO",
  "limit": 25
}

Sample request — draft default

{
  "title": "CEO",
  "limit": 25
}

Sample request — named params

{
  "title": "CEO",
  "location": "United States",
  "limit": 25
}

Sample request — company scoped

{
  "within_lead_group_id": "software-companies-0013",
  "title": "CEO",
  "per_company_limit": 1,
  "limit": 1
}

On this page