Filter

The Filter node processes an array of items and returns only the ones that match your conditions. Use it to narrow down data before passing it to downstream nodes: process only relevant records, remove duplicates, or extract items meeting specific criteria.

When to use Filter vs. If-Else

NodeWorks onPurpose
FilterArrays of itemsKeep/remove items from a list based on conditions
If-ElseSingle valuesBranch the workflow based on a condition

Filter = "From these 100 leads, keep only the ones with a score above 80" If-Else = "If this lead's score is above 80, take path A; otherwise path B"

Configuration

FieldTypeRequiredDescription
Input arrayFX formulaYesThe array to filter, e.g., {{find_all.records}} or {{http_request.body.items}}
ConditionCondition builderYesFilter criteria: items matching this stay, others are removed
ModeSelectNoKeep matching (default) or Remove matching

Condition operators

OperatorWorks withExample
equalsText, Numberstatus equals active
not equalsText, Numberstatus not equals archived
containsTextemail contains @company.com
does not containTextname does not contain test
greater thanNumberscore greater than 80
less thanNumberamount less than 1000
is emptyAnyphone is empty
is not emptyAnyemail is not empty
starts withTexturl starts with https://
ends withTextemail ends with .com
matches regexTextphone matches ^\+1.*

Multiple conditions

Add multiple conditions. Choose the logic:

LogicMeaning
ANDAll conditions must be true (default)
ORAt least one condition must be true

Output variables

{{filter.result}}         → array of items that passed the filter
{{filter.count}}          → number of items that passed
{{filter.removed}}        → number of items that were filtered out
{{filter.total}}          → original array length

Common patterns

Filter high-value leads from enrichment

Find All (all leads) → Filter (score > 80 AND status = "new") →
  For Each → Send Email (personalized outreach)

Remove already-processed items

HTTP Request (get all orders) → Filter (processed_at is empty) →
  For Each → Process order → Update Record (set processed_at)

Extract items with missing data

Find All (contacts) → Filter (email is empty OR phone is empty) →
  Google Sheets (export for manual cleanup)

Clean webhook data

Webhook (batch payload) → Filter (remove items where amount = 0) →
  For Each → Create Record

Filter + For Each pattern

Filter and For Each are commonly used together:

  1. Filter narrows the array to relevant items
  2. For Each processes each remaining item individually
Find All (1000 contacts) → Filter (unsubscribed = false AND last_contact > 30 days) →
  Result: 150 contacts → For Each → GPT Writer (personalized email) → Send Email

Without the Filter, you'd process all 1,000 contacts (wasting AI credits). With it, you only process the 150 that matter.

Tip

Always filter before expensive operations (AI, enrichment, API calls). Processing 100 filtered items is much cheaper than processing 1,000 items and discarding 900 of the results.

Note

Filter processes the entire array in memory. For very large arrays (10,000+ items), consider using a database query with filters instead (Find All with filter conditions) for better performance.