People Search
/v2/people/searchSearch our people database by who a person is, what they do and where they work. Combine person filters (name, location), job filters (title, seniority, department, tenure, recent job change) and company filters (industry, headcount, location, keywords and more): filters AND together, and at least one include condition is required. Searching is free and every result reports email availability; set enrich_email or enrich_phone to reveal contact data for credits. Results return 25 per page by default (per_page: 25, 50 or 100), sorted by followers desc by default - see the body parameters below for every filter and its nuances. Every position is a current one and carries its start_date (YYYY-MM, LinkedIn month precision). Costs nothing without enrich flags; with enrich_email, 1 email credit per newly revealed email, and with enrich_phone, 1 phone credit per number found. Uses 1 unit of the search rate limit per 25 results returned (none for a search scoped to people you saved). Authenticate with your API key in the x-api-key header.
How are credits spent?
Searching is free. Setting
enrich_email: truealso reveals each result's email, which costs 1 email credit per revealed email. Results always includehas_emailandemail_statusfor free.
How filtering works
Send one filters object. Every filter is optional, but at least one
include condition is required, and a request can carry at most 20,000
filter values in total. Most filters share the same shape - an include
list ("match any of these") and an exclude list ("reject these") - and
all active filters combine with AND:
- Person filters describe the person themselves:
person(byid, byname, or bylinkedin_url),person_location, and free-textcompany_keywordsmatched against the company the person works at. - Job filters describe what they do:
person_job_title(structured include/exclude or aboolean_searchexpression),person_seniority,person_department, tenure (person_months_in_current_role,person_months_in_current_company), andperson_job_change. - Company filters (
company,company_industry,company_country,company_location,company_headcount_range, and the rest) describe the company of the job being matched.
Matching a person
person.name matches when every word of your term appears somewhere in the
person's name, in any order. "Dmytro Shulha" finds Dmytro Shulha, PhD;
"Helena Calero" finds Helena Montoya-Calero; "Shulha Dmytro" finds the
same people as "Dmytro Shulha". Matching is case-insensitive, and diacritics
are significant - Jose does not match José.
person.id matches exactly the people you name, using the id from search
results, enrichment, or Search Suggestions.
The two OR together: a request carrying both returns everyone matching either, and that set is then narrowed by every other filter. That is what lets a picker mix people chosen from a typeahead with names typed as free text.
company_keywords searches company specialties only by default
(sources: ["specialties"]) - deliberately narrower than Company
Search, which searches every text source unless scoped. Widen it
with sources (see Enums for the full list);
the broader sources match far more companies. A keyword that
resolves to more than 50,000 companies is rejected with a 400
rather than silently truncated - use a more specific phrase, or
add company_industry, company_headcount_range or
company_country to the same request: those narrow the company
resolution too, not just the final result set. To see which
values a keyword accepts, query
Search Suggestions with
type: "company_keywords".
Job and company filters must all match the same position: a person is returned only when one of their jobs satisfies every job and company condition at once. Filtering by CTO titles plus the Retail industry finds CTOs of retail companies - not a bank's CTO who once held a retail job.
Enum-backed filters only accept values from Enums; each parameter below links to its own value list.
Matching a company by domain
company.domain takes up to 100 domains and returns the people who work at
the organization that owns each one. Several company pages can point at the
same domain - a company's regional and brand pages, but also a business that
is only hosted there, such as a page whose website is a booking or form link
on a platform. company.domain.match_mode sets how the domain is read:
ORGANIZATION(default) - every company page that belongs to the organization owning the domain: its main page and its regional, brand and subsidiary pages. A small page that only links to the domain - a business hosted on a platform, a same-named company - is left out. Use it to reach everyone at the organization.PRIMARY- only the one main company page of the domain. Use it when you need exactly one company per domain, for example to map results back to an account list. People who list one of the organization's other pages as their employer are not returned.LINKEDIN_WEBSITE- only the organization's pages whose own LinkedIn website is on the domain, so the domain is never inferred.stripe.com,stripe.com/jobsandjobs.stripe.comall matchstripe.com; a page that lists another site, or no website at all, does not. Use it when a result must be traceable to what the company itself wrote on LinkedIn. A small business that is only hosted on the domain is still left out, as inORGANIZATION.
{
"filters": {
"company": {
"domain": { "include": ["stripe.com"], "match_mode": "PRIMARY" }
}
}
}match_mode applies to include only: exclude always rejects every
company on the domain.
Looking up people by LinkedIn URL
person.linkedin_url takes 1-50 profile URLs and returns the people behind
them. Every other filter in the same request still applies and narrows that
set - for example, add contact_details.email.status: ["valid"] to keep only
the profiles with a valid email on file.
Two rules are specific to this filter:
company.name.includedoes not narrow the results. It picks which of a person's positions is returned asprimary_position(company.name.excludestill filters). When another job or company filter matched a specific position, that position is returned instead.- Combining it with
person.idorperson.nameis rejected with a400.
Results keep the order of the URLs you sent (sort_by does not apply), and
URLs that match nobody are skipped. Each result carries matched_url, the
URL from your request it was found by. Map results back by it: the
response's linkedin_url is the person's canonical profile URL and can
differ from the one you sent.
Sorting and pagination
Results come back 25 per page by default; set per_page to 50 or 100 for
bigger pages (not together with enrich_email or enrich_phone). A search
reaches 25,000 results at any page size: page 1000 at 25, page 250 at 100.
The default order is follower count, descending. company_keywords does not
change it: the filter resolves to a set of companies and contributes no
relevance score, so there is nothing for a relevance sort to rank by.
Override the default with sort_by and sort_direction. Explicit sorting
applies while the result set stays under 500,000 people - above that, the
search falls back to the default order. See
Pagination for the response envelope and paging
patterns.
Body parameters
filtersobjectrequiredThe People Search filter set, also taken by the whole-search save, enrich and credits preview.
Child attributes
personobjectoptionalMatch the person themselves, by id, by name, or by LinkedIn URL.
idandnameare OR-ed with each other - a person matching either is returned - and the result AND-s with every other filter, so a picked person and a typed name can sit side by side in one request.linkedin_urllooks up specific profiles and cannot be combined with the other two.Child attributes
idobjectoptionalMatch by person id.
Field Type Description includestring[] Only these people. Use the idvalues returned by People Search results, People Enrich, or Search Suggestions withtype: "person". Max 100 ids.excludestring[] Reject these people (same idvalues). Max 100 ids.nameobjectoptionalMatch by name.
Field Type Description includestring[] Names to match. Every word of a term must appear somewhere in the name, in any order, so "Dmytro Shulha" matches "Dmytro Shulha, PhD" and "Helena Calero" matches "Helena Montoya-Calero". Case-insensitive; diacritics are significant ("Jose" does not match "José"). Any single term qualifies. Max 500 items. excludestring[] Names to reject, matched the same way. Max 500 items. linkedin_urlobjectoptionalLook up specific profiles by URL.
Field Type Description includestring[] Look up specific profiles by LinkedIn URL. The URLs pick the people and every other filter narrows them - except company.name.include, which here only picks which position is returned asprimary_position. Cannot be combined withperson.idorperson.name. Results keep the order of the URLs (sort_bydoes not apply) and each carries thematched_urlit was found by. 1-50 urls.Example:
["https://linkedin.com/in/emily-carter-sample"]
Example
{ "filters": { "person": { "name": { "include": [ "Dmytro Shulha" ] } } } }person_locationobjectoptionalPerson location filter. Unified location strings resolved to country / state / city.
Field Type Description includestring[] Match these locations (any of). Unified strings like "United States", "Texas, United States", "San Francisco, California, United States" - or a region like "EMEA", "APAC", "Europe", "Latin America", which expands to its member countries (full list with member countries: GET /v2/enums/regions). Max 100 items, each 2-200 chars. If none of the values resolve to a known location, the request fails with 400. excludestring[] Reject these locations (same unified-string format). Max 100 items, each 2-200 chars. Values that do not resolve are skipped. Example
{ "filters": { "person_location": { "include": [ "California, United States", "Austin, Texas, United States" ], "exclude": [ "San Francisco, California, United States" ] } } }company_keywordsobjectoptionalFree-text keyword match against the person's COMPANY (see Keyword sources). Defaults to the
specialtiessource only - the broader text sources match far more companies and are much likelier to exceed the resolution limit. Use POST /v2/search/suggest withtype: "company_keywords"for accepted values. Does NOT affect ordering: this resolves to a company-id filter and contributes no relevance score.Field Type Description includestring[]required Phrases to search for. 1-20 items, 3-100 chars each. Matched as phrases: a multi-word entry like "email finder" requires those words adjacent and in order within one of the selected source fields, not merely present somewhere in it. excludestring[] Phrases that disqualify a company. 0-20 items. Matched as phrases, same as include.include_allboolean When true, every phrase in includemust match; otherwise any single match qualifies. default: false.sourcesenum[] Restrict matching to these source fields (see Keyword sources). Omit to use the default source set - see this company_keywordsfilter's own description above for what that is.Example
{ "filters": { "company_keywords": { "include": [ "email marketing" ], "sources": [ "specialties" ] } } }person_job_titleobjectoptionalJob title match. Structured include/exclude + match_mode (CONTAINS/EXACT), or a boolean_search expression.
Field Type Description includestring[] Job titles to match. Max 100 items, each 2-100 chars. Combined per match_mode. Known abbreviations also match their canonical spelling and vice versa (e.g. "CEO" matches "Chief Executive Officer"), however you spell them - "VP of Marketing", "VP, Marketing" and "Marketing VP" all match what "VP Marketing" matches. Under CONTAINS, terms match any of the roles a position carries - including the secondary roles of combined titles like "Founder & CEO" and the original title text. excludestring[] Job titles to reject. Max 100 items, each 2-100 chars. match_modeenum CONTAINS = the title contains every word of the term, in any order; connector words (of, and, the, ...) are ignored, so "Director of Sales Enablement" also matches "Director, Sales Enablement". EXACT = the person's LinkedIn title is exactly the term, so "founder" does not match "Founder & CEO", "Founder of Acme LLC" or "Fondateur" - use CONTAINS for those. Applies to include/exclude; ignored when boolean_search is set. Allowed values:
CONTAINSEXACTboolean_searchstring Boolean / Cartesian title query, e.g. "(CEO OR CTO) AND !Intern". Syntax: bareword=contains; 'single quotes'=contains too, and the way to write a title with a space in it - 'vp marketing' matches exactly what include: ["vp marketing"] matches; "double quotes"=exact; backticks=words in order with connectors bridged, sovp marketingfinds "VP of Marketing" but not "VP Sales and Marketing" or "Marketing VP"; !=exclude, AND/OR, ()=grouping. Max 500 terms, depth 5, each term 2-100 chars. AND and OR cannot be mixed at the same nesting level - use parentheses to group. Mutually exclusive with include/exclude. max length: 20000.Example
{ "filters": { "person_job_title": { "include": [ "Product Marketing Manager", "Growth Marketing Manager" ], "exclude": [ "Assistant" ], "match_mode": "CONTAINS" } } }person_seniorityobjectoptionalSeniority (see Seniorities).
Field Type Description includeenum[] Seniority levels to match (any of). See Seniorities. excludeenum[] Seniority levels to reject. See Seniorities. Example
{ "filters": { "person_seniority": { "include": [ "Chief Officer", "VP", "Director" ] } } }person_departmentobjectoptionalDepartment (see Departments).
Field Type Description includeenum[] Departments to match (any of). Accepts a department group ("Sales", "Legal") or a specific sub-department ("Sales Operations", "Founder"). A group matches everyone in it; a sub-department matches only that sub-department. See Departments. excludeenum[] Departments to reject. A group rejects everyone in it; a sub-department rejects only that sub-department. See Departments. Example
{ "filters": { "person_department": { "include": [ "Marketing", "Sales" ], "exclude": [ "Accounting" ] } } }person_months_in_current_roleobjectoptionalMonths in the current role (tenure of the active position). Integer months 0-600.
Field Type Description mininteger Minimum whole months (inclusive), 0-600. Optional. min: 0, max: 600. maxinteger Maximum whole months (inclusive), 0-600, must be >= min. Optional. min: 0, max: 600. Example
{ "filters": { "person_months_in_current_role": { "min": 6, "max": 24 } } }person_months_in_current_companyobjectoptionalMonths at the current company (tenure since joining). Integer months 0-600.
Field Type Description mininteger Minimum whole months (inclusive), 0-600. Optional. min: 0, max: 600. maxinteger Maximum whole months (inclusive), 0-600, must be >= min. Optional. min: 0, max: 600. Example
{ "filters": { "person_months_in_current_company": { "min": 12 } } }person_job_changeobjectoptionalRecent job change: current role started within timeframe_months, optionally narrowed by change_type.
Field Type Description timeframe_monthsintegerrequired Months since the current role started, counted in CALENDAR months the way LinkedIn counts them: a role is "N months" if it spans N calendar months inclusive, so a role begun any time in August is 2 months old on 1 September. timeframe_months: 1therefore matches only roles begun in the current month. Any whole number from 1 to 1000. Replaces the formertimeframe_days, which accepted only 30, 60, 90, 180, 270 or 365. min: 1, max: 1000.Example:
3change_typeenum any = any recent role change; new_company = also changed company; promotion = changed role at the same company (approximation, includes lateral moves). Allowed values:
anypromotionnew_companyExample
{ "filters": { "person_job_change": { "timeframe_months": 3, "change_type": "new_company" } } }companyobjectoptionalCompany the person works at - by our company
id, bydomain, byname, or by LinkedIn numericlinkedin_id.Child attributes
idobjectoptionalMatch by company id (the
idreturned by Company Search and in People Search results). Composes with every other filter: pair it with person_job_title to narrow a company list down to the roles you want. An exactcompany.namecombines with it as OR (people at any listed id or any listed name);company.domain,company_keywordsand a CONTAINScompany.nameAND with it.Field Type Description includestring[] Only people who work at one of these companies. Use the idvalues returned by Company Search or in People Search results. Combines with an exactcompany.nameas OR (a person at any listed id or any listed name);company.domain,company_keywordsand a CONTAINScompany.namestill narrow it. Max 20000 ids.excludestring[] Reject people who work at any of these companies (same idvalues). Max 20000 ids.domainobjectoptionalMatch by company website domain. Resolved to the same company-id constraint as
company.id, so the two AND together when both are given.Field Type Description includestring[] Only people who work at the organization that owns one of these domains, e.g. "stripe.com" - see match_modefor which of its company pages count. Scheme, "www." and any path are stripped. Max 100 items.excludestring[] Reject people whose company is on one of these domains. match_modeenum Which company pages an includedomain stands for. ORGANIZATION (default) = every company page that belongs to the organization owning the domain: its main page, its regional, brand and subsidiary pages. A small page that only links to the domain - a business hosted on a platform, a same-named company - is left out. PRIMARY = only the one main company page of the domain, leaving out the organization's other pages. LINKEDIN_WEBSITE = only the organization's pages whose own LinkedIn website is on the domain, so the domain is never inferred: "stripe.com", "stripe.com/jobs" and "jobs.stripe.com" all match "stripe.com"; a page that lists another site, or no website, does not.excludeis not affected: it always rejects every company on the domain.Allowed values:
ORGANIZATIONPRIMARYLINKEDIN_WEBSITEExample
{ "filters": { "company": { "domain": { "include": [ "stripe.com" ] } } } }nameobjectoptionalMatch by company name - exact by default, or substring with match_mode: CONTAINS. An exact name combines with
company.idas OR (people at any listed name or any listed id); a CONTAINS name ANDs with it. Besideperson.linkedin_url,includeis only a primary-position hint, not a filter (excludestill filters).Field Type Description includestring[] Company names to match. Combined per match_mode. With EXACT, a value shaped like a website ("stripe.com", "https://www.stripe.com/about") also matches the company on that domain. Max 500 items. excludestring[] Company names to reject. With EXACT, a website-shaped value also rejects the company on that domain. match_modeenum EXACT (default) = the whole company name equals the term, case-insensitive. CONTAINS = the name contains the term as a substring ("Haven Health" matches "Haven Health Management") - resolved against the company index, so it is slower and capped; narrow the term if the request is rejected. Allowed values:
EXACTCONTAINSlinkedin_idobjectoptionalOnly people who work at these LinkedIn companies, by LinkedIn's numeric company id. Composes with every other filter as an AND, including with
company.name(unlikecompany.id, which ORs with an exact name); from a company URL, enrich the company first (POST /v2/companies/enrich) and filter by theidit returns.Field Type Description includeinteger[] Match these LinkedIn companies. LinkedIn's numeric company id. Company URLs are not accepted here - enrich the company by linkedin_urlfirst, then filter by theidthat comes back. Max 500 items.Example:
[162479]excludeinteger[] Reject these LinkedIn companies. LinkedIn's numeric company id. Company URLs are not accepted here - enrich the company by linkedin_urlfirst, then filter by theidthat comes back. Max 500 items.
Example
{ "filters": { "company": { "name": { "include": [ "Intercom", "Stripe" ] } } } }company_industryobjectoptionalIndustry of the person's company (see Industries).
Field Type Description includestring[] Industries or industry GROUPS to match (any of). A group name matches every industry in that category. See Industries for both. Example:
["Agriculture & Mining","Software Development"]excludestring[] Industries or industry GROUPS to reject. A group name rejects every industry in that category. See Industries for both. Example
{ "filters": { "company_industry": { "include": [ "Software Development", "IT Services & IT Consulting" ], "exclude": [ "Staffing & Recruiting" ] } } }company_headcount_rangeenum[]optionalBucketed headcount range of the company (see Employee ranges).
Example
{ "filters": { "company_headcount_range": [ "51-200", "201-500" ] } }company_countryobjectoptionalCountry of the person's company, as ISO alpha-2 codes (Countries). Any resolved office country counts by default (headquarters included) - same contract as company_location and as Company Search; see headquarters_only. For city/state-level filtering use company_location. sort_by=company_country always orders by the registered headquarters country, independent of headquarters_only.
Field Type Description includestring[] Match values in this list - any single value qualifies (exact, case-insensitive). Optional - provide include and/or exclude. excludestring[] Reject values in this list. 0-500 items. headquarters_onlyboolean When true, match the company headquarters country only. When false (default), any office country we have resolved counts, headquarters included: includes widen (a company with an office there matches) and excludes tighten symmetrically (a company with an office there is rejected). default: false. Example
{ "filters": { "company_country": { "include": [ "US", "CA", "GB" ], "headquarters_only": true } } }company_typeobjectoptionalLegal/ownership type of the person's company (see Company types).
Field Type Description includeenum[] Company types to match (any of). Allowed values:
Privately HeldPublic CompanyNon ProfitSelf OwnedSelf EmployedPartnershipEducationalGovernment AgencyUnknownexcludeenum[] Company types to reject. Allowed values:
Privately HeldPublic CompanyNon ProfitSelf OwnedSelf EmployedPartnershipEducationalGovernment AgencyUnknownExample
{ "filters": { "company_type": { "include": [ "Privately Held", "Public Company" ] } } }company_business_typeobjectoptionalAudience type of the person's company (see Business types). Values: B2B, B2C, Nonprofit, Unknown.
Field Type Description includeenum[] Business types to match (any of). Allowed values:
B2BB2CNonprofitUnknownexcludeenum[] Business types to reject. Allowed values:
B2BB2CNonprofitUnknownExample
{ "filters": { "company_business_type": { "include": [ "B2B" ] } } }company_revenue_streamobjectoptionalRevenue model of the person's company (see Revenue streams).
Field Type Description includeenum[] Revenue streams to match (any of). Allowed values:
Professional ServicesProduct SalesGrants / DonationsSubscriptions / RecurringProject / Contract WorkEvent / Experience RevenueTransaction FeesRental / LeasingAdvertisingFinancial ServicesLicensing / IPUnknownexcludeenum[] Revenue streams to reject. Allowed values:
Professional ServicesProduct SalesGrants / DonationsSubscriptions / RecurringProject / Contract WorkEvent / Experience RevenueTransaction FeesRental / LeasingAdvertisingFinancial ServicesLicensing / IPUnknownExample
{ "filters": { "company_revenue_stream": { "include": [ "Subscriptions / Recurring", "Product Sales" ] } } }company_foundedobjectoptionalFounded-year range of the person's company. min/max are inclusive; either may be omitted.
Field Type Description minnumber Lower bound (inclusive). Optional. maxnumber Upper bound (inclusive). Must be >= min. Optional. Example
{ "filters": { "company_founded": { "min": 2015, "max": 2023 } } }company_headcount_customobjectoptionalRaw headcount range of the person's company. min/max are inclusive; either may be omitted.
Field Type Description minnumber Lower bound (inclusive). Optional. maxnumber Upper bound (inclusive). Must be >= min. Optional. Example
{ "filters": { "company_headcount_custom": { "min": 50, "max": 1000 } } }company_naicsobjectoptionalNAICS codes (numeric) of the person's company. Matches if any code on the company is in the list.
Field Type Description includenumber[] Match numeric values in this list - any single value qualifies. Optional - provide include and/or exclude. excludenumber[] Reject numeric values in this list. 0-500 items. Example
{ "filters": { "company_naics": { "include": [ 541511, 541512 ] } } }company_locationobjectoptionalLocation of the person's company (the matched position's company), as unified location strings - same format as person_location. Any resolved office counts by default; see headquarters_only.
Field Type Description includestring[] Match these locations (any of). Unified strings like "United States", "Texas, United States", "San Francisco, California, United States" - or a region like "EMEA", "APAC", "Europe", "Latin America", which expands to its member countries (full list with member countries: GET /v2/enums/regions). Max 100 items, each 2-200 chars. If none of the values resolve to a known location, the request fails with 400. excludestring[] Reject these locations (same unified-string format). Max 100 items, each 2-200 chars. Values that do not resolve are skipped. headquarters_onlyboolean When true, match the company headquarters location only. When false (default), any office location we have resolved counts, headquarters included: includes widen (a company with an office there matches) and excludes tighten symmetrically (a company with an office there is rejected). default: false. Example
{ "filters": { "company_location": { "include": [ "San Francisco, California, United States" ], "headquarters_only": true } } }company_technologiesobjectoptionalWeb technologies detected on the company website, by id: the
valueof aPOST /v2/search/suggestrow withtype: technologyandkind: technology. Websites are rescanned every 30 days. Matches the company of the matched position. Not available yet: answers 400 until the people index carries company technologies.Field Type Description includestring[] Technology ids to match. match_mode: ANY(default): a company using any of them qualifies;ALL: it must use every one. Max 500.Example:
["3421"]excludestring[] Reject companies using any of these technology ids. Max 500. match_modeenum How includecombines:ANY(default) - at least one;ALL- every one, on the same company.Allowed values:
ANYALLExample
{ "filters": { "company_technologies": { "include": [ "3421" ] } } }company_technology_categoriesobjectoptionalTechnology categories (CMS, Ecommerce, Analytics, ...), by id: the
valueof a suggest row withkind: category. A category matches a company using any technology in it. Matches the company of the matched position. Not available yet: answers 400 until the people index carries company technologies.Field Type Description includestring[] Category ids to match (any of). Max 200. Example:
["1"]excludestring[] Reject companies using any technology in these category ids. Max 200. Example
{ "filters": { "company_technology_categories": { "include": [ "1" ] } } }contact_detailsobjectoptionalContact data: email/phone availability and status (global), plus your workspace's reveal state.
Child attributes
emailobjectoptionalEmail availability/quality (global) + your workspace reveal state.
Field Type Description statusenum[] Contact-level email status (best stored email; valid wins). Match-any: valid (>=1 valid email, or an email your workspace entered for the person), invalid, accept_all, not_found (no stored email and none entered by your workspace). Allowed values:
validinvalidaccept_allnot_foundrevealedboolean true = only contacts whose email your workspace already revealed; false = only those NOT revealed. Requires an authenticated workspace. phoneobjectoptionalPhone availability (global) + your workspace reveal state.
Field Type Description statusenum[] Contact-level phone status from our lookup store. Match-any: found (number on file), not_found (looked up, none), unknown (never looked up). Allowed values:
foundnot_foundunknownrevealedboolean true = only contacts whose phone your workspace already revealed; false = only those NOT revealed. Requires an authenticated workspace.
Example
{ "filters": { "contact_details": { "email": { "status": [ "valid", "accept_all" ], "revealed": false }, "phone": { "status": [ "found" ] } } } }listsobjectoptionalYour workspace CRM list membership: include/exclude list ids, saved any/none, and saved-at range.
Child attributes
includestring[]optionalOnly contacts your workspace saved into these list ids. Max 100 ids, each 1-64 chars.
excludestring[]optionalHide contacts your workspace saved into these list ids. Max 1000 ids, each 1-64 chars.
savedenumoptionalany = only contacts your workspace saved, in a list or not; none = only contacts your workspace has not saved; without_list = only contacts your workspace saved but did not file into any list.
Allowed values:
anynonewithout_listsaved_atobjectoptionalFilter by when the contact was saved into a list (workspace-scoped).
Field Type Description fromstring Saved on/after this date (ISO 8601). Optional. tostring Saved on/before this date (ISO 8601). Optional.
Example
{ "filters": { "person_job_title": { "include": [ "Product Marketing Manager" ] }, "lists": { "saved": "none" } } }duplicatesobjectoptionalDeduplication against your workspace's history: hide people already exported.
Field Type Description exclude_exportedboolean true = hide people your workspace already exported through POST /v2/people/export. Exclude-only: it removes rows and never counts as an include condition. Requires an authenticated workspace. Example
{ "filters": { "duplicates": { "exclude_exported": true } } }max_person_per_companyintegeroptionalmin: 1max: 100Cap the number of people returned per company across the whole result set (1-100). A person is counted against the company of the position that matched your company filters, or their current/primary position when no company filter is set. Of the colleagues competing for a company slot, one we hold a valid email for is kept, and your sort decides between them (and picks the representative outright when none of them has one). Results stay in your sort order either way. For result sets above 25000 matches the representative is simply whoever leads your sort, and total_count is a rounded PRE-cap estimate (pagination.total_is_estimate=true) - an upper bound, so an export of that selection returns fewer people. At or below it both are exact.
Example
{ "filters": { "person_job_title": { "include": [ "Product Marketing Manager" ] }, "max_person_per_company": 2 } }
sort_byenumoptionalSort key. Omit for the default: followers desc. Sorting applies when the result set is under 500,000 people; larger result sets fall back to the default order.
Allowed values:
person_first_nameperson_last_nameperson_senioritycompany_employee_countcompany_namecompany_industryperson_countrycompany_foundedperson_email_availableperson_job_titlecompany_countrycompany_typecompany_business_typecompany_revenue_streamperson_saved_atsort_directionenumoptionalSort direction. Per-key defaults apply; ignored when sort_by is omitted.
Allowed values:
ascdescpageintegeroptionalmin: 1max: 1000default: 1Page number, 1-based. The deepest reachable page is 25,000 / per_page: 1,000 at 25, 500 at 50 and 250 at 100 (metadata.pagination.max_page). A result set that runs past it has total_pages clamped to max_page and pagination.truncated=true, while total_count stays the real match count - narrow the filters to reach the rest.
per_pageenumoptionaldefault: 25Results per page: 25, 50 or 100. Above 25 is not available with enrich_email or enrich_phone.
Allowed values:
2550100enrich_emailbooleanoptionaldefault: falseWhen true, reveal each result's stored email and charge 1 credit per revealed email.
enrich_phonebooleanoptionaldefault: falseWhen true, reveal each result's phone via a live lookup and charge 1 phone credit per result with a LinkedIn URL. Up to 25 lookups per page - slow.
Responses
For error handling see Errors. Response objects are described in Person object and Company object.
