The Filter node takes an array from a previous step and keeps only the items that match a set of rules you define — discarding the rest. Both the matched and excluded items are available afterward, so you can act on either group.
Use a Filter node whenever you have a list and only want to act on part of it, such as:
Only processing orders with a status of "paid"
Pulling out customers tagged "VIP" before sending a special offer
Removing items missing a required field before the next step
Splitting a list into "high value" and "everything else" for different handling
Field Required Description Step name Yes A name for this step's output, used to reference it later in your flow. Must start with a letter or underscore (no spaces or special characters). Array to filter Yes A Handlebars expression pointing to the array from a previous step — for example {{shopifyOrders.data.orders}}. Filter rules Yes (at least 1) One or more conditions each item is checked against. AND / OR Only shown with 2+ rules AND requires an item to match every rule; OR requires it to match at least one. Invert filter No When on, the node returns items that don't match your rules instead of ones that do.
Field — the property to check on each item, using dot notation for nested fields (e.g. status or customer.email).
Condition — the comparison to apply: equals, not equals, greater/less than (and or-equal variants), contains, does not contain, starts with, ends with, is one of, is not one of, is empty, or is not empty.
Compare value — what to check the field against. Can be plain text, a comma-separated list (for "is one of" / "is not one of"), or a variable like {{minOrderValue}}. This field is hidden for is empty / is not empty.
If both sides of a rule look like numbers, they're compared numerically. Otherwise they're compared as text.
Text comparisons (equals, contains, starts with, ends with) are case-insensitive.
Is one of / is not one of check whether the field's value appears in a comma-separated list, e.g. paid, fulfilled, archived.
With multiple rules, AND/OR combine them the same way as in the Condition node.
Invert filter simply flips which items end up in "matched" vs. "excluded" — useful when it's easier to describe what you want to remove than what you want to keep.
The result is stored under the Step name you chose, with these fields available:
Reference Returns {{filtered.items}} The items that matched your rules {{filtered.excluded}} The items that didn't match {{filtered.count}} Number of matched items {{filtered.excludedCount}} Number of excluded items {{filtered.totalCount}} Total items checked (matched + excluded) {{filtered.isEmpty}} true if no items matched
(Replace filtered with whatever Step name you chose.)
The Field path is checked on each individual item in the array — it isn't a Handlebars expression itself, so don't wrap it in {{ }}. Just use the property name, like status or customer.tags.[0].
The Compare value field, on the other hand, does support {{variable}} syntax if you want to compare against something dynamic rather than a fixed value.
Always check {{filtered.isEmpty}} before relying on .items.[0] further downstream — if your rules end up matching nothing, referencing a missing item can cause errors later in the flow.
If you're not seeing the items you expect, double check the Field path matches the actual shape of your data — a typo or wrong nesting level (e.g. email instead of customer.email) will just silently evaluate to "empty" rather than throwing an error.
Navigate