12345{ "filter_id": "estimated_value", "operator": "range", "value": { "min": 100000, "max": 500000 } }
| Key | Required | Description |
filter_id | Yes | The filter slug from the List Filters endpoint |
operator | Depends | One of the allowed_operators for that filter. Optional for BOOLEAN filters; automatically defaults to is_boolean. |
value | Yes | The filter value. Its shape depends on the operator (see below) |
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.allowed_operators array tells you exactly what's available.range12345{ "filter_id": "estimated_value", "operator": "range", "value": { "min": 100000, "max": 500000 } }
| Key | Type | Required | Description |
min | number | Yes | Minimum value (inclusive) |
max | number | Yes | Maximum value (inclusive) |
greater_than12345{ "filter_id": "equity_percent", "operator": "greater_than", "value": 50 }
value — number. Threshold (exclusive).greater_than_or_equal12345{ "filter_id": "bedrooms", "operator": "greater_than_or_equal", "value": 3 }
value — number. Threshold (inclusive).less_than12345{ "filter_id": "year_built", "operator": "less_than", "value": 1980 }
value — number. Threshold (exclusive).less_than_or_equal12345{ "filter_id": "bathrooms", "operator": "less_than_or_equal", "value": 2 }
value — number. Threshold (inclusive).equals12345{ "filter_id": "bedrooms", "operator": "equals", "value": 4 }
value — number. Exact value to match.not_equals12345{ "filter_id": "bedrooms", "operator": "not_equals", "value": 0 }
value — number. Value to exclude.contains12345{ "filter_id": "owner_name", "operator": "contains", "value": "Smith" }
value — string. Substring to search for (case-insensitive).not_contains12345{ "filter_id": "owner_name", "operator": "not_contains", "value": "LLC" }
value — string. Substring to exclude (case-insensitive).starts_with12345{ "filter_id": "city", "operator": "starts_with", "value": "San" }
value — string. Prefix to match.ends_with12345{ "filter_id": "street_name", "operator": "ends_with", "value": "Ave" }
value — string. Suffix to match.equals12345{ "filter_id": "state", "operator": "equals", "value": "CA" }
value — string. Exact string to match.not_equals12345{ "filter_id": "state", "operator": "not_equals", "value": "TX" }
value — string. Exact string to exclude.any_of12345{ "filter_id": "state", "operator": "any_of", "value": ["CA", "TX", "FL"] }
value — string[]. Array of strings to match against.YYYY-MM-DD format.date_range12345{ "filter_id": "last_sale_date", "operator": "date_range", "value": { "start": "2020-01-01", "end": "2024-12-31" } }
| Key | Type | Required | Description |
start | string | Yes | Start date in YYYY-MM-DD format (inclusive) |
end | string | Yes | End date in YYYY-MM-DD format (inclusive) |
is_after12345{ "filter_id": "last_sale_date", "operator": "is_after", "value": "2023-01-01" }
value — string. Date in YYYY-MM-DD format.is_before12345{ "filter_id": "last_sale_date", "operator": "is_before", "value": "2015-06-01" }
value — string. Date in YYYY-MM-DD format.equals12345{ "filter_id": "last_sale_date", "operator": "equals", "value": "2024-03-15" }
value — string. Date in YYYY-MM-DD format.relative_time12345678910{ "filter_id": "last_sale_date", "operator": "relative_time", "value": { "value": 6, "unit": "months", "direction": "ago", "comparison": "less_than" } }
| Key | Type | Required | Description |
value | number | Yes | Positive integer number of time units. |
unit | string | Yes | "days", "weeks", "months", or "years" |
direction | string | Yes | "ago" (before now) or "from_now" (after now) |
comparison | string | Yes | "less_than" (within the period) or "greater_than" (outside the period) |
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.12345678910{ "filter_id": "last_sale_date", "operator": "relative_time", "value": { "value": 6, "unit": "months", "direction": "ago", "comparison": "less_than" } }
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.12345678910{ "filter_id": "last_sale_date", "operator": "relative_time", "value": { "value": 10, "unit": "years", "direction": "ago", "comparison": "greater_than" } }
12345678910{ "filter_id": "list_date", "operator": "relative_time", "value": { "value": 7, "unit": "days", "direction": "ago", "comparison": "less_than" } }
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.12345{ "filter_id": "last_exported", "operator": "is_after", "value": "2026-07-01" }
12345{ "filter_id": "last_exported", "operator": "is_known", "value": false }
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.contains_any12345{ "filter_id": "property_type_id", "operator": "contains_any", "value": [1, 2, 5] }
value — number[]. Array of option IDs — match if the record has any of these.contains_none12345{ "filter_id": "property_type_id", "operator": "contains_none", "value": [3, 4] }
value — number[]. Array of option IDs — match if the record has none of these.contains_all12345{ "filter_id": "tags", "operator": "contains_all", "value": [10, 20] }
value — number[]. Array of option IDs — match if the record has all of these.filter_id and value — the operator is automatically inferred.1234{ "filter_id": "is_absentee_owner", "value": true }
value — boolean. true or false.true / false), not strings ("true" / "false") or numbers (1 /
0). String or numeric values will be rejected with a validation error.| Type | Operator | Value |
| NUMBER | range | { "min": number, "max": number } |
| NUMBER | greater_than, greater_than_or_equal, less_than, less_than_or_equal, equals, not_equals | number |
| STRING | contains, starts_with, ends_with, equals, not_equals, not_contains | "string" |
| STRING | any_of | ["a", "b"] |
| DATE | date_range | { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" } |
| DATE | is_after, is_before, equals | "YYYY-MM-DD" |
| DATE | relative_time | { "value": number, "unit": string, "direction": string, "comparison": string } |
DATE (last_exported only) | is_known | true or false |
| MULTI_SELECT | contains_any, contains_none, contains_all | [1, 2, 3] |
| BOOLEAN | (automatic) | true or false |
1{ "filter_id": "is_vacant", "value": "true" }
1{ "filter_id": "is_vacant", "value": true }
contains. Check the allowed_operators array from the List
Filters response.1{ "operator": "greater_than", "value": { "value": 50 } }
1{ "operator": "greater_than", "value": 50 }
1{ "operator": "contains_any", "value": ["Single Family", "Multi Family"] }
1{ "operator": "contains_any", "value": [1, 2] }
YYYY-MM-DD:1{ "operator": "is_after", "value": "01/15/2024" }
1{ "operator": "is_after", "value": "2024-01-15" }