Use case
Search people or companies withsimple_filters or filters. Discover valid fields first, inspect top values for one field, then run the paginated search.
API Reference
See the full request/response schema and parameters in the API Reference.
Pricing
See Credits & Pricing Guide for credit costs.Errors
For error responses (400, 403, 404, 409, 503, etc.), see Handling Errors.Rate limits
Filter-search-specific API rate limits.Core concepts
Recommended flow
Simple filters
simple_filters is the primary query format for this API. It supports common exact-match, range, logical, and text-search operations with concise JSON syntax.
Top-level shape
Supported operators
The capabilities response exposes supported simple-query operators insimple_query_operators.
Nested array matching ($elemMatch)
$elemMatch queries fields inside nested arrays. Two mistakes account for nearly all failed queries:
- Relative path —
companyData.memberIdinstead of the full dotted pathcurrentCompanies.companyData.memberId - Wrong type — passing a numeric ID as a string (
"1234567") when the field’svalue_typeislong
memberId:
companyData.memberId instead of currentCompanies.companyData.memberId) and the string ID ("1234567" instead of 1234567) cause this query to fail.
$elemMatch must be keyed on the field’s nested_path from capabilities — not always the outermost array. currentCompanies.companyData.memberId has nested_path: "currentCompanies", so $elemMatch keys on currentCompanies. currentCompanies.positions.title has nested_path: "currentCompanies.positions", so $elemMatch on currentCompanies cannot reference a positions field.
Excluding results
There are two ways to exclude records:- Use
simple_filtersoperators such as$ne,$nin,$not, and$norto exclude records that match field conditions. - Use the top-level exclusion fields —
exclude_entity_idsorexclude_list_ids— to suppress specific people or companies by ID. See Search Exclusions for identifier formats, saved lists, and limits.
page_size. Don’t rely on total_available to count excluded records or size pagination — page until next_cursor is null.
Cursor requests must send only
{"cursor": "..."}. You cannot add or change exclusions while paging through an existing cursor. Include exclusions in the first /search/query request.Query examples
Find US-based companies:$elemMatch on the inner nested path:
memberId — see the full example and path/type requirements in Nested array matching ($elemMatch).
DSL filters
filters accepts a constrained DSL subset for cases where simple_filters is not expressive enough. For DSL syntax and clause behavior, see the OpenSearch Query DSL docs.
Top-level shape
Supported query clauses
Query examples
Exact match:must_not:
Filter capabilities
simple_filters operators and DSL limits.
Query parameters
Example request
Response shape
Limits
Field entry
Each item infields describes one queryable field.
Example response
Trimmed to two representative fields — a top-level keyword and a nested numeric.Common lookups
Filter thefields array client-side to find what is available for a given operation.
Find specific fields
To confirm that a field exists and see what operators it accepts, filter thefields array by name. The examples below check hq_country_iso2 and employees_count — the same fields used in the simple_filters examples earlier on this page.
fields, it cannot be queried. If queryable is false, the field is exposed but reserved for sort or aggregation only. If nested_path is non-null, wrap the clause in a nested query when using filters.
To search by partial name (e.g. every revenue-related field):
Field values
Scoped query
- Omit both
simple_filtersandfiltersfor global scope. - Send either
simple_filtersorfiltersfor scoped discovery. filters.sort,filters.size, and mixedfiltersplussimple_filtersrequests are not allowed on this endpoint.simple_filters.$sortandsimple_filters.$limitare not supported on this endpoint.
ownership_status, hq_country_iso2, funding_stage, and so on. Check supports_top_values: true in the capabilities response to confirm the field supports this endpoint.
Example request
Global:Nested fields
For nested fields such asfunding_rounds.name, counts are document counts and each filter_snippet is wrapped in a nested clause so it can be reused directly in DSL flows.
Search query
simple_filters, filters, parsed_query, or a search_id to re-run a previous search.
Request flow
- First request: send exactly one of
simple_filters,filters,parsed_query, orsearch_id, plus optionalpage_size,max_results, and exclusions (exclude_entity_ids,exclude_list_ids). - Next page request: send only
{"cursor":"..."}. - Requests that mix
cursorwith query or pagination fields return400.
Effective result cap
page_sizecontrols rows per page. Range1..100. Default10.max_resultscontrols the total row cap across all pages. Range1..5000.simple_filters.$limitandfilters.sizeare optional query-level caps.- When both
max_resultsand a query-level cap are set, the smaller value applies. - When no total cap is set, the backend default applies.
Example request
Fresh search:exclude_entity_ids:
exclude_public_ids for backward compatibility. For full details — company identifiers, saved lists, and limits — see Search Exclusions.
Re-run a previous search:
raw_source returns the document directly. It does not use grouped objects such as identity, profile, or location.