Skip to main content

Filtering

Any field can be used as a filter on the events endpoint by passing it as a query parameter:

type=closed

Filters on different fields combine with AND. Values are parsed as JSON where possible, so booleans and numbers work as written (typeIsLast=true). See the dimensions reference for the fields available to filter on.

Benchmarks accepts filters too, with the same value syntax, but only on its four supported dimensions.

Filters apply to the underlying data before metrics are computed, so they compose with each metric's own definition. For example, leads already counts only conversions; adding attributionCategory=Advertising further restricts it to advertising-sourced leads.

Operators

Beyond simple equality, filters form a small expression language using JSON array syntax: ["<operator>", ...arguments].

OperatorExampleDescription
orattributionCategory=["or", "Organic", "Advertising"]Matches any of the values
andtotal=["and", ["gte", 100], ["lte", 500]]Matches all of the conditions
notattributionCategory=["not", "Organic"]Excludes the value
emptyattributionKeywords=["empty"]Matches missing or empty values
notEmptyattributionKeywords=["notEmpty"]Matches present, non-empty values
regexcampaign=["regex", "gmb|gbp", "ui"]Matches a regular expression, with optional flags
gt, gte, lt, ltetotal=["gte", 1000]Greater/less than comparisons. These also work on dates, e.g. opportunityStartDate=["gte", "2026-05-01"]

Operators nest to any depth:

# everything except estimated, sold, and closed
adjustedType=["not", ["or", "estimated", "sold", "closed"]]

Cross-field logic with filter

To express OR logic across fields on events, pass a single JSON expression in the filter parameter:

# customers attributed to advertising OR worth $50,000+
filter=["or", {"attributionCategory": "Advertising"}, {"total": ["gte", 50000]}]

URL-encode all filter values. With curl, use --data-urlencode as shown in the examples.