Guides
Company and person filters
The 51 typed filters for company and person searches, with their value shapes.
These filters apply to company and person searches. They are typed end to end, and all nested under filters. Which side a filter applies
to is not part of the contract: a person-side filter on a company search is
routed through the join. So seniority is legal on a company search, where it
constrains which companies have a matching employee.
| Group | Filter | Shape |
|---|---|---|
| Shared | geo | GeoFilter — see Geography filter |
| Classification | industry, sub_industry, b2b_b2c, product_service, naics, sic, profit_nonprofit, gov_nongov, industries_served | TermsFilter |
| Size & age | employee_count, revenue, founded_year, linkedin_followers | RangeFilter |
| Size & age | global_presence | { gte?, lte?, min_countries? } — gte is a per-country headcount floor; at least one of the three |
| Size & age | employee_by_department | { bounds: [{ department, min?, max? }] } — every bound must hold, and each needs a min and/or max |
| Identity | company, owned_by_organization | EntityFilter |
| Identity | is_subsidiary, domain_presence, linkedin_presence | TermsFilter — values travel as the strings "true" / "false" |
| Identity | listing_status, stock_exchange | TermsFilter — listing_status is public, private or delisted; stock_exchange is the exchange a listed company trades on (NASDAQ, NYSE, …) |
| Signals | technology, company_keyword | TermsFilter |
| Signals | keywords | { include, exclude, match_all, target_fields } — target_fields is required, at least one of name / keywords / description |
| Funding | funding_stage | TermsFilter |
| Funding | investors | EntityFilter |
| Funding | total_funding, last_funding_amount | RangeFilter |
| Funding | last_funding_date | DateBound, bare |
| Hiring | hiring_role | TextFilter |
| Hiring | hiring_type, hiring_location | TermsFilter |
| Hiring | hiring_recency | DateBound, bare |
| Person | seniority, department, skills, certifications, university, degree | TermsFilter |
| Person | governance_level, employment_type, has_direct_access_to_c_suite | TermsFilter — see below |
| Person | title, person | TextFilter |
| Person | employment_history | EmploymentHistoryFilter |
| Person | tenure, linkedin_connections | RangeFilter |
| Person | years_worked | RangeFilter, whole years worked across every job held. gte: N: some job started at least N years ago. lte: N: none started earlier than N years ago, so lte: 3 is early career. Time in the current role is tenure |
| Person | last_job_changed | DateBound, bare |
At least one filter must be set. An empty filters: {} is rejected the same as
sending none at all.
{
"category": "company",
"filters": {
"industry": { "include": ["Software & Technology"] },
"employee_count": { "gte": 500, "lte": 5000 }
},
"limit": 10
}Three filters are entity references rather than terms: company,
owned_by_organization and investors. Their values are
tokens that still need resolving to a record, so a bare string is a 422
naming the array index:
"company": { "include": ["stripe.com"] } // ✗ 422
"company": { "include": [{ "value": "stripe.com" }] } // ✓employment_history's company is the same reference shape, nested one level
down inside each group (see below).
The three person axes added in taxonomy v3#
Three filters answer questions seniority cannot, because they are not points on
the same ladder. All three are TermsFilters on the person axis, so they narrow
a person search directly and a company search through the join.
| Filter | Values | What it separates |
|---|---|---|
governance_level | Founder, Co Founder, Owner, Partner, Board Member, Investor, Advisor | Standing in the company, not rank in it. A board member is not a VP with a different title |
employment_type | Full Time, Part Time, Freelancer, Contractor, Consultant (External) | How someone is engaged. A contractor with a director's title is a different prospect from a director |
has_direct_access_to_c_suite | "true" / "false" — the strings, like every other boolean-shaped terms filter | Reach rather than rank: who can actually get the meeting |
employment_history — independently-scoped past jobs#
Each entry in groups is one past job, matched independently. Naming two
groups never merges their company/title/dates into one shared condition:
{
"employment_history": {
"groups": [
{ "company": { "include": [{ "value": "amazon.com" }] } },
{
"company": { "include": [{ "value": "netflix.com" }] },
"title": { "include": ["product manager"] }
}
]
}
}A group needs at least one attribute (company, title, role_started,
role_ended, tenure_gte, tenure_lte). An empty {} is a 422.