Skip to content

Filter

Type key: filter
Group: Data
Category: data
Tier: CORE

The Filter node removes items from an array based on one or more conditions. It is a declarative, non-destructive way to narrow down datasets without writing code.

Handles

HandleDirectionDescription
inputInputReceives the data array to filter
outputOutputEmits the filtered array

Configuration

FieldTypeDefaultDescription
conditionsarray[]Array of condition objects
logicenumANDHow conditions are combined: AND or OR

Condition Object

json
{
    "type": "equals",
    "data": { "field": "data.status", "value": "active" },
    "logic": "AND"
}
PropertyDescription
typeComparison operator (slug format)
data.fieldDot-notation path to the field in each array item
data.valueValue to compare against
logicLogic connector with next condition: AND or OR

Smart Type Inference

The Filter node automatically detects data types from upstream JSON values and adapts the UI accordingly:

Detected typeHow detectedOperators shownValue input
Numbertypeof value === 'number' in JSON=, !=, >, <, >=, <=, in, not_in, is_null, is_not_nullText input
Stringtypeof value === 'string' in JSON=, !=, contains, not_contains, starts_with, ends_with, in, not_in, is_null, is_not_nullSelect from upstream values or text input (toggle with ⚡)
Booleantypeof value === 'boolean' in JSON=, !=, is_null, is_not_null, is_true, is_falseTrue/False dropdown
DateField name ends with _at or _dateis_exactly, is_not, is_after, is_before, is_in_the_past, is_today, is_within_X_daysDate picker

When connected to a Data Model node, field types are inferred from the database column types via the model schema.

Value Picker (⚡)

For string fields, the value input shows a select dropdown with distinct values extracted from upstream JSON data. Click the ⚡ icon to toggle between:

  • Select mode: pick from available values
  • Manual mode: enter free text or dynamic expressions like {{variable}}

Supported Operators

OperatorDescription
equalsStrict equality
not_equalsNot equal
greater_thanNumeric >
less_thanNumeric <
greater_than_or_equalNumeric >=
less_than_or_equalNumeric <=
containsString contains substring
not_containsString does not contain
starts_withString starts with
ends_withString ends with
inValue is in a comma-separated list
not_inValue is not in list
is_nullValue is null
is_not_nullValue is not null
is_emptyNull, empty string, or empty array
is_not_emptyNot null and not empty
is_in_the_pastDate is in the past
is_in_the_futureDate is in the future
is_todayDate is today
is_within_daysDate within X days from now
is_within_monthsDate within X months from now
is_older_than_daysDate older than X days
is_older_than_monthsDate older than X months

Logic Modes

AND (default)

All conditions must be satisfied for an item to pass:

Field: data.status  = active
AND
Field: data.score   > 50

Only items where both status = active AND score > 50 are included.

OR

At least one condition must be satisfied:

Field: data.status  = active
OR
Field: data.status  = trial

Items where status is either active OR trial are included.

Input Detection

The Filter node automatically detects the array to filter:

  1. If input has a data key with an array → filters data
  2. If input itself is a flat array → filters it directly

The structure is preserved in the output (i.e., if the input had a data key, the output also has a data key).

Field Path Resolution

Field paths use dot notation from the root JSON (e.g., data.status, data.lifetime_value). When evaluating conditions against individual items already extracted from a collection, the Filter node progressively strips leading path segments to find the correct value.

Output

Given input:

json
{
    "data": [
        { "id": 1, "status": "active", "score": 80 },
        { "id": 2, "status": "inactive", "score": 90 },
        { "id": 3, "status": "active", "score": 30 }
    ]
}

With conditions: data.status = active AND data.score > 50

Output:

json
{
    "data": [{ "id": 1, "status": "active", "score": 80 }],
    "count": 1
}

Preset Example

Filter node — active customers exampleFilter node — active customers example

💾 Try this example

Download the workflow JSON — open an empty workflow and import the file.

Examples

Filter Active High-Value Customers

yaml
Logic: AND
Conditions:
    - data.status         equals          active
    - data.lifetime_value greater_than    500

Filter Items with Missing Email

yaml
Logic: AND
Conditions:
    - data.email  is_not_empty

Filter by Multiple Statuses (OR)

yaml
Logic: OR
Conditions:
    - data.status  equals  pending
    - data.status  equals  processing

Notes

  • If no conditions are configured, all input data passes through unchanged
  • The Filter node does not modify the items it passes — only includes/excludes them
  • Operators shown in the UI adapt based on the detected field data type
  • For transforming item fields, use the Transform node
  • For a single conditional branch (not array filtering), use the If node

Proprietary software — source-available. All rights reserved.