Skip to main content
Every filter in a search request is a JSON object with these fields:
The value shape is operator-driven. For simple operators it’s a raw primitive (number, string, or boolean). For complex operators it’s an object or array. This page documents every operator and its expected value.
Use the List Filters endpoint to discover which operators each filter supports. The allowed_operators array tells you exactly what’s available.

NUMBER

Number filters work with numeric data points like estimated value, equity percentage, square footage, and bedroom count.

range

Match values between a minimum and maximum (inclusive).

greater_than

Match values strictly greater than the given number.
value — number. Threshold (exclusive).

greater_than_or_equal

Match values greater than or equal to the given number.
value — number. Threshold (inclusive).

less_than

Match values strictly less than the given number.
value — number. Threshold (exclusive).

less_than_or_equal

Match values less than or equal to the given number.
value — number. Threshold (inclusive).

equals

Match an exact numeric value.
value — number. Exact value to match.

not_equals

Exclude an exact numeric value.
value — number. Value to exclude.

STRING

String filters work with text data like owner name, city, address, and mailing address.

contains

Match records where the field contains the given substring.
value — string. Substring to search for (case-insensitive).

not_contains

Exclude records where the field contains the given substring.
value — string. Substring to exclude (case-insensitive).

starts_with

Match records where the field starts with the given prefix.
value — string. Prefix to match.

ends_with

Match records where the field ends with the given suffix.
value — string. Suffix to match.

equals

Match an exact string value.
value — string. Exact string to match.

not_equals

Exclude an exact string value.
value — string. Exact string to exclude.

any_of

Match records where the field matches any of the provided values.
value — string[]. Array of strings to match against.

DATE

Date filters work with date fields like last sale date, list date, and year built. All date values use YYYY-MM-DD format.

date_range

Match dates between a start and end date (inclusive).

is_after

Match dates after a given date.
value — string. Date in YYYY-MM-DD format.

is_before

Match dates before a given date.
value — string. Date in YYYY-MM-DD format.

equals

Match an exact date.
value — string. Date in YYYY-MM-DD format.

relative_time

Match dates relative to the current date. This is useful for queries like “sold within the last 6 months” or “listed more than 30 days ago.”
How it works: The API calculates a reference date from value + unit + direction, then compares the field value against that date using comparison.
direction: "ago" sets the reference date to 6 months before today. comparison: "less_than" means the sale date is more recent than that reference, so it falls within the last 6 months.
direction: "ago" sets the reference date to 10 years before today. comparison: "greater_than" means the purchase date is older than that reference, so it falls more than 10 years ago.

Export Activity

The last_exported filter uses export events recorded for the authenticated organization. It supports every standard DATE operator listed above. It also supports is_known to include records that have any export activity or records that have none.
To find records with no export activity, use a JSON boolean:
true matches records with at least one export event. false matches records with no export events. Export Activity is available for both property and people searches.

MULTI_SELECT

Multi-select filters work with fields that have a predefined set of options, like property type, zoning, or MLS status. Option values are numeric IDs — use the List Filters endpoint to discover the available options and their IDs.

contains_any

Match records that have any of the selected options (OR logic).
value — number[]. Array of option IDs — match if the record has any of these.

contains_none

Match records that have none of the selected options.
value — number[]. Array of option IDs — match if the record has none of these.

contains_all

Match records that have all of the selected options (AND logic).
value — number[]. Array of option IDs — match if the record has all of these.

BOOLEAN

Boolean filters work with true/false fields like absentee owner, vacant, and has pool. For BOOLEAN filters, you only need to pass filter_id and value — the operator is automatically inferred.
value — boolean. true or false.
Use native JSON booleans (true / false), not strings ("true" / "false") or numbers (1 / 0). String or numeric values will be rejected with a validation error.

Quick Reference


Common Mistakes

Wrong:
Right:
A NUMBER filter does not support contains. Check the allowed_operators array from the List Filters response.
Single-value operators take a raw primitive, not a nested object:Wrong:
Right:
Multi-select filters use numeric option IDs, not human-readable labels:Wrong:
Right:
Use List Filters to look up the correct option IDs.
Dates must be YYYY-MM-DD:Wrong:
Right: