Skip to main content
Filters use a single filter query parameter with an expression string:

Expression syntax

Operators

in_all and nin_all are available only when a repeated-record filter lists them in its discovered operators. They do not apply to scalar fields or every relationship filter. Use nin_any when no related record may match any of the requested values.

Examples

Filter by location

Locations are matched by numeric ID from the Dealroom location taxonomy, not by name. Look up an ID once via GET /reference/filters/location/values and reuse it:
Each value carries the two fields you need to identify it:
A name match is not unique - read type and parent_name to determine which ID you want for your search.
entity_count is null unless you pass include_counts=true. Counting the matching entities for every value is a separate scan per page, so it is opt-in. Add it only when you are rendering the counts, and prefer scoping the lookup with ?type= when you do - an untyped lookup for a broad term such as Europe has to count across every taxonomy level at once and can time out.
Narrow the lookup with ?type= to search a single taxonomy level - always worth doing, and required in practice if you also ask for counts. It accepts continent, country, state, city, and region:
Combined regions such as “London + Paris” are type: "region", alongside genuine geographic regions, so type=city rules them out. Five cities are still named “London” though, and only parent_name separates those.

Filter by industry (match any)

Industries (and other taxonomy values) live behind the taxonomy_id filter. Pass ?type=industry on the values endpoint to scope the lookup, then pipe-separate the resulting IDs in the filter expression:
The type parameter accepts: industry, sub_industry, sector, technology, business_model, income_stream, client_focus, sdg, ownership, techstack_category, growth_stage, investor_type.
A lookup scoped to the wrong type returns an empty 200, not an error — e.g. “Artificial Intelligence” is a technology tag, so ?q=artificial&type=industry finds nothing. When unsure, omit type to search across all tag types.

Combine multiple filters

Use and() to require all conditions:
Filter companies by the total size of the rounds their investors participated in:

Enum filters

Some filters accept a value from a fixed, closed set rather than free text or an ID. Discover the valid values with the values endpoint — same as id_lookup filters:
You can commit either the name (SERIES A) or its code (series_a) as the filter value. The following canonicalized enum filters match case-insensitively and reject unknown values with a 400 FILTER_VALIDATION_ERROR rather than silently returning no results: Because matching is case-insensitive, series a and SERIES A are equivalent:
A value outside the set returns an error instead of an empty result — see Errors:

Sorting

Use the sort parameter with a field name. Prefix with - for descending order.
The full list of accepted sort keys per resource is in the Filters & Sorting Reference.
A sort or filter key doesn’t always match a top-level response field. total_funding, for example, sorts and filters companies by the value returned at funding.total — there is no top-level total_funding field on the entity. Check the object pages from the API Reference overview for where a value appears in the response.

Available filters

For a complete list of all filters and sort keys grouped by scope, see the Filters & Sorting Reference. You can also fetch available filters programmatically:
The discovery response is the authoritative inventory for each public scope. It includes each filter’s type, supported operators, and any sub_types used for value lookup. Explicit cross-reference filters appear in their relevant scopes; dynamically constructible relationship paths are not listed exhaustively.

Further reading

Top fintech startups

Apply taxonomy lookup, filtering, and sorting in a complete query.

Pagination

Walk through a filtered result set without changing the query.