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].
| Operator | Example | Description |
|---|---|---|
or | attributionCategory=["or", "Organic", "Advertising"] | Matches any of the values |
and | total=["and", ["gte", 100], ["lte", 500]] | Matches all of the conditions |
not | attributionCategory=["not", "Organic"] | Excludes the value |
empty | attributionKeywords=["empty"] | Matches missing or empty values |
notEmpty | attributionKeywords=["notEmpty"] | Matches present, non-empty values |
regex | campaign=["regex", "gmb|gbp", "ui"] | Matches a regular expression, with optional flags |
gt, gte, lt, lte | total=["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.