Skip to main content
FilterSpec is the query language for filtering employees. It provides a simple, declarative way to build complex searches without writing raw Elasticsearch queries.

Structure

{
  textAny?: [],    // Match ANY of these text terms (OR)
  textAll?: [],    // Match ALL of these text terms (AND)
  range?: [],      // Numeric range filters
  termsAny?: [],   // Exact match ANY of these values (OR)
  termsAll?: [],   // Exact match ALL of these values (AND)
  exists?: [],     // Field must exist
  notExists?: []   // Field must NOT exist
}

Filter Types

textAny / textAll

For fuzzy/partial matching on free-text fields like job titles, headlines, descriptions.
// Match people with "engineer" OR "developer" in job_title
textAny: [{ field: "job_title", terms: ["engineer", "developer"] }];

// Match people with BOTH "senior" AND "engineer" in job_title
textAll: [{ field: "job_title", terms: ["senior", "engineer"] }];
Best for: job_title, headline, description, skills, experience.title, experience.description

termsAny / termsAll

For exact matching on discrete/enum fields. Required for all enum-backed fields.
// Match people in Engineering OR Sales departments
termsAny: [{ field: "department", values: ["Engineering and Technical", "Sales"] }];

// Match by company ID
termsAny: [{ field: "experience.company_id", values: [12345] }];
Best for: department, management_level, location_regions, experience.company_id, experience.company_industry

range

For numeric comparisons with gte (≥) and lte (≤).
// 50-500 employees at current company
range: [{ field: "experience.company_size_employees_count", gte: 50, lte: 500 }];

// At least 100 connections (capped at 500)
range: [{ field: "connections_count", gte: 100 }];
connections_count is capped at 500 in the data source.

exists / notExists

For checking field presence.
// Must have a profile picture
exists: [{ field: "picture_url" }];

// Currently employed (no end date on current role)
notExists: [{ field: "experience.date_to" }];

Enum Values Reference

These fields require exact values from the lists below. Use termsAny or termsAll.

department

C-Suite, Finance & Accounting, Human Resources, Legal, Administrative,
Engineering and Technical, Sales, Customer Service, Product, Project Management,
Marketing, Design, Operations, Research, Trades, Consulting, Medical,
Real Estate, Education, Other

management_level

Specialist, Manager, Senior, Director, Owner, C-Level, Intern, Head,
President/Vice President, Founder, Partner

location_regions

Hierarchical regions (use the most specific that applies):
LevelExamples
MacroAMER, EMEA, APAC
ContinentNorthern America, Europe, Asia, Africa, Oceania
Sub-regionNorthern Europe, Western Europe, South-Eastern Asia, Southern Asia
CountryUnited States, United Kingdom, Germany, India, Australia
State/ProvinceCalifornia, United States, Texas, United States, Ontario, Canada

company_size_range

1 employee, 2-10 employees, 11-50 employees, 51-200 employees,
201-500 employees, 501-1,000 employees, 1,001-5,000 employees,
5,001-10,000 employees, 10,001+ employees

company_industry

Common values (200+ total):
Computer Software, Information Technology and Services, Financial Services,
Internet, Marketing and Advertising, Hospital & Health Care, Banking,
Management Consulting, Biotechnology, Telecommunications, E-Learning,
Real Estate, Insurance, Retail, Automotive, Pharmaceuticals, ...

Common Fields

Profile Fields (top-level)

FieldTypeDescription
job_titletextCurrent job title
headlinetextLinkedIn headline
descriptiontextAbout/summary section
skillstextSkills array
departmentenumFunction area
management_levelenumSeniority level
location_regionsenumGeographic location
connections_countrangeLinkedIn connections (max 500)
follower_countrangeLinkedIn followers

Experience Fields (nested under experience.)

FieldTypeDescription
experience.titletextJob title at company
experience.descriptiontextRole description
experience.company_idtermsCoreSignal company ID
experience.company_nametextCompany name
experience.company_industryenumCompany’s industry
experience.company_size_employees_countrangeEmployee count
experience.company_size_rangeenumSize bucket
experience.departmentenumDepartment in that role
experience.management_levelenumLevel in that role
experience.date_fromexistsRole start date
experience.date_toexistsRole end date (null if current)

Examples

VP+ in Engineering at mid-size companies in California

{
  termsAny: [
    { field: "department", values: ["Engineering and Technical"] },
    { field: "management_level", values: ["President/Vice President", "C-Level", "Director"] },
    { field: "location_regions", values: ["California, United States"] }
  ],
  range: [
    { field: "experience.company_size_employees_count", gte: 50, lte: 1000 }
  ]
}

Sales leaders at SaaS companies

{
  textAny: [{ field: "experience.company_industry", terms: ["SaaS", "Software"] }],
  termsAny: [
    { field: "department", values: ["Sales"] },
    { field: "management_level", values: ["Director", "Head", "President/Vice President"] }
  ]
}

Currently employed (no end date)

{
   notExists: [{ field: "experience.date_to" }];
}

People with specific skills

{
   textAll: [{ field: "skills", terms: ["Python", "Machine Learning"] }];
}