Person Search (Beta)
Person Search API endpoint: query profiles using SQL-like syntax with flexible filtering across 100+ data fields.
Query Format
Write aSELECT * FROM people WHERE ... query. Do not include LIMIT or OFFSET clauses in the SQL — use the limit and offset parameters instead.
Response Shape
matches— capped at the request’slimit(max 100).total— the full row count matching your WHERE clause across the database, not just the returned page. Useful for TAM-style sizing: query for “VPs of Engineering at fintech in NY” withlimit: 1andtotaltells you how many candidates exist. The companionTotal-Count-Statusresponse header isexactwhen the count succeeded; on extremely broad WHERE clauses the count subquery may time out, in which case the header ispageandtotalis just the size of the returned page. Search responses do not includematch_metadata(that field is only populated by/person/enrich, where there’s a single input identifier to match against).
Pagination
To page through results beyond the first 100, setoffset to the number of rows to skip. Maximum offset is 10,000.
Available Columns
Text Columns
UseILIKE for partial matching or = for exact matching.
| Column | Description |
|---|---|
full_name | Full name |
first_name | First name |
last_name | Last name |
job_title | Current job title |
company_name | Current company name |
company_domain | Current company domain |
company_industry | Current company industry |
city | Current city |
state | Current state (full name, e.g., california) |
state_code | State code (ISO 3166-2, e.g., US-CA) |
country | Current country (full name, e.g., united states) |
country_code | Country code (ISO 3166-1 alpha-2, e.g., US) |
Numeric Columns
| Column | Description |
|---|---|
age | Current age |
birth_year | Birth year |
years_of_experience | Total years of professional experience |
avg_tenure_months | Average tenure across jobs (months) |
linkedin_followers | LinkedIn follower count |
linkedin_connections | LinkedIn connection count |
Enum Columns
Use= or IN for exact matching.
| Column | Values |
|---|---|
sex | male, female |
seniority_level | c_level, owner, partner, vp, director, manager, senior, junior, training, intern |
job_function | engineering, information_technology, product, design, sales, marketing, operations, finance, hr, legal, customer_success, data, executive, social_services, healthcare, education, trades, transportation, service, other |
expense_category | general_and_administrative, research_and_development, sales_and_marketing, cost_of_services, not_applicable |
company_size | 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ |
highest_degree_level | doctorate, masters, bachelors, associates, high_school |
Boolean Columns
| Column | Values |
|---|---|
is_decision_maker | true, false |
Cross-Table Columns
These columns search across related tables and are automatically rewritten to subqueries:| Column | Description |
|---|---|
skills | Skills from all positions |
languages | Spoken languages |
headline | LinkedIn headline text |
summary | LinkedIn summary / bio text |
title | All job titles from work history (not just current) |
organization_name | All employer names from work history |
description | Job description text from work history |
Example Queries
Authorizations
Body
Request model for SQL query-based person search.
SQL query to execute (must not contain LIMIT clause). Must be a SELECT query only.
1 - 10000Maximum number of results to return (replaces LIMIT in query)
1 <= x <= 100Number of results to skip for pagination (0-10000). Stable within a build; ordering may change across builds.
0 <= x <= 10000If true, format text fields in title case (names, job titles, company names, locations, skills, headlines). Raw fields, IDs, URLs, codes, and confidence fields are excluded.
Comma-separated list of fields to include in response. If omitted, all fields are returned.
Comma-separated list of fields to exclude from response. Applied after include_fields filter.
If true, pretty-print JSON response with indentation.
Response
Success - query executed and results returned
Multiple person matches response.
List of matches sorted by confidence (descending). Capped at the request's limit.
For /person/search and /person/discover, the total number of rows matching the query's WHERE clause across the database (not just this page). For /person/enrich, the number of matches found for the input identifier. On search/discover, if the count subquery fails or times out, this falls back to the size of the returned page; the response header Total-Count-Status distinguishes the two cases.