# Filter Data

**Filter Data** keeps rows that match a condition (same builder as [If/then](https://docs.voicelogica.ai/workflow-nodes/if-then-decision/)). **Passed filter** vs **Did not pass**.

  <ShotPlaceholder
    src="/assets/workflow-nodes/filter.png"
    name="wn-filter"
    alt="Filter Data condition builder"
    capture="Filter Data node. 1600×900. Condition builder. No PII."
  />

## Why this node

An API or [Data Table](https://docs.voicelogica.ai/workflow-nodes/data-table/) returned many rows. You want open orders only, then [Repeat Actions](https://docs.voicelogica.ai/workflow-nodes/loop/) or one [AI Response](https://docs.voicelogica.ai/workflow-nodes/ai-response/).

**Needs setup** until the builder has a field and an operator.

## First setup — keep matching rows

1. API or Data Table that emits a list.

2. **Filter Data**. Condition on a status / flag field from that node.

     <ShotPlaceholder
       src="/assets/workflow-nodes/filter-filled.png"
       name="filter-filled"
       alt="Filter Data filled"
       capture="Workflow builder → Filter Data selected. Condition builder with field and operator. 1600×900. Redact numbers/emails/PINs."
     />

3. **Passed filter** → Loop or AI Response. **Did not pass** → a different line (“no open orders”).

4. **Save & go live**. **Run test** with a payload that has both kinds of row.

## What “broken” looks like

- **Needs setup** — empty builder.
- Everything fails the filter — field name does not match the payload.

## Troubleshooting

**Filter vs If/then?**

If/then branches the *graph* on one value. Filter shrinks a *list*, then the graph continues with what remains.

## Next Steps

[Repeat Actions](https://docs.voicelogica.ai/workflow-nodes/loop/).  
[Data Table](https://docs.voicelogica.ai/workflow-nodes/data-table/).  
[If/then Decision](https://docs.voicelogica.ai/workflow-nodes/if-then-decision/).
