How Discover Works

Discover turns criteria into a list of people. Enrich turns an identity into a record.

Why it matters: three habits decide whether Discover is cheap or expensive. Validate and count are free; enriching everyone you find is not; and no search pages past 5,000 people.

Two versions, one engine#

Same filters, same vocabularies, same engine. Only the request shape differs, and the v2 / v3 switch in the sidebar or on any sample shows the one you are building against.

  • Build against Advanced. Filters grouped by entity — company, person, workExperience, vendorgraphics — each field taking and / or / not, ranges taking min/max or gte/lte. It expresses a full ICP: “VP+ in Engineering at SaaS companies of 200–2,000, excluding current customers.”
  • Basic is deprecated. Flat top-level fields ANDed together. It keeps working while v2 does, but new capabilities ship to Advanced only, and anything Basic can say, Advanced can say.

Search the prose, not just the taxonomy#

Prose search is v3-only. Switch this page to v3 to see it.

Recency and the company graph#

activeWithin and company.expansion are v3-only. Switch this page to v3 to see them.

What changes between versions#

Filter semantics and vocabularies are identical. Everything in this table breaks a request moved across versions unchanged:

 v2 Advancedv3
Body shapeone filter block at the top levelor: list of named filter groups
EmploymentworkExperience.personFilterworkExperience.employmentStatus
Person locationperson.personCountry / personRegion / personLocalityperson.country / region / locality
Detection windowvendorgraphics.filterByDetectionPeriod + detectionPeriodBuffervendorgraphics.detectionWindow.enforce + buffer
Paginationcursor + limitpagination.page + size
What a count countsMatching work experiences — two matching roles count twiceDistinct people, matching what the search returns
Company graph expansionRelationships only: company.companyFilter: RELATIONSHIP + relationshipType, whose CUSTOMER/VENDOR values are the reverse of v3’scompany.expansion (subsidiaries, parents, competitors, relationships)
Schoolnot availableperson.schoolAggkCompanyId / schoolName
Any employer, current or pastnot availableperson.employerAggkCompanyId / employerName

Validate, count, then discover#

The first two steps are free. Run them every time.

  1. Validate request — syntax and semantics check. Catches malformed filters before they cost anything.
  2. Count results — the size of the matching population. Tells you in one call whether filters are too tight (12) or too loose (4.2M).
  3. Discover people — page through results once the count looks right.

Paths: /discover/people/advanced/validate and /discover/people/advanced/count, same body as the search.

Watch out: the count is over work experiences, not people. Two matching roles count twice, so it reads high.
Example body — VP+ engineering leaders at US software companies
{
  "workExperience": {
    "seniority": { "or": ["vp", "cxo"] },
    "role": { "or": ["engineering"] },
    "personFilter": "CURRENT"
  },
  "person": {
    "personCountry": { "or": ["united states"] }
  },
  "company": {
    "employeeCountRange": { "or": ["201-500", "501-1000"] },
    "industry": { "or": ["computer software"] }
  }
}
Watch out: results are person summaries, not enrichment. Enrich only the people who survive qualification — the single biggest credit saver. The hop: a result’s id is the personId you pass to Enrich.

Pagination and shape#

Cursor-based. Each page returns an opaque cursor; pass it back unchanged for the next page.

One employer cannot swamp a page. grouping.maxResultsPerCompany caps results per company, on either version.

Tag your requests. metadata attaches up to 10 key/value pairs of your own to the request.

Watch out: no search pages past 5,000 people, on either version. v3 enforces (page + 1) × size ≤ 5000; v2 stops returning a cursor. Bigger segment? Slice it — by region, employee-count band, or product — and page each slice. Count results is not capped, so use it for population size.

Results are a snapshot. The graph updates continuously; the same search later may return a slightly different population.