Run for Each Item
Run for each item runs a single Step once per item in a list. It is a setting on a step, not a step of its own, leaving the canvas a straight line.
- Use it to
- Repeat a single eligible action Step once per entry in a list without drawing a loop
- Find it
- Step Settings → Run for each item
- Cost
- 1 Step credit per item for paid action Steps (AI Steps use tokens per item)
- Limits
- 1 to 10 items at a time · Test & Debug runs the first 3 items only
- Output
- {{ N.results }} (succeeded outputs), {{ N.items }}, {{ N.stats }} · Current item: {{ item }}
- Instead
- Repeater (when multiple Steps or branching must run together per item)
It covers the common case: send one email per customer, write one row per order, create one ticket per report. If the work takes more than one step per item, you need the Repeater step instead.
Setting it up
Open the step’s repeat badge
Click the step on the canvas and find its small repeat badge. The tooltip reads “Run this step once per item in a list”. Once configured, the badge shows Each item, or Pick a list when no list is selected yet.
Switch it to Once per item
The default is Once, meaning the step runs a single time. Choose Once per item in the popover to repeat the step; the card badge then shows Each item or the item count. In the same popover, set How many (1 to 10 at a time) and If one item fails (stop or skip). Under advanced options, you can also configure Retry failed items and Lists inside your list (flattening).
Choose the list
Point it at a list an earlier step produced, such as {{ 3.result }}. Insert the reference from the data icon rather than typing it: the path depends on which step made the list.
Write the step’s fields against one item
Inside the step, {{ item }} is the entry being processed right now. A field that would have read {{ 3.result.0.email }} becomes {{ item.email }}.
Referring to the current item
| Reference | What it holds |
|---|---|
{{ item }} | The whole entry being processed |
{{ item.field }} | One property of it |
{{ item.$index }} | Position in the list, counting from 0 |
{{ item.$total }} | How many items there are altogether |
Both position tokens sit under item. Write {{ item.$index }}, not a bare {{ $index }}. A bare index is not recognized and passes through as literal text.
Filter uses a different form. Its
rules take {{ $item }} and {{ $itemIndex }}, with the dollar sign at the
front. Filter evaluates its rules itself rather than running a pass per item,
which is why the two look alike but are not interchangeable.
Watching it run
A step repeating over a list counts up on the canvas as it goes. Its badge reads 0/12 when the run starts and climbs, so a long fan-out reads as moving rather than stuck.
The badge tracks processing of the input items. Flattening changes the collected results list when individual outputs are lists; it does not create extra executions of this Step. Use stats and items to check input-item outcomes.
Not every step offers it
The following Steps use their own execution controls and do not offer Each item:
| Steps without Each item | What to use instead |
|---|---|
| Flow routing (Conditions, Switch, Filter) | Filter already evaluates a list. Put Conditions or Switch inside a Repeater body to route each item. |
| List & loop controls (Combine, Repeater) | Combine joins two lists directly; Repeater already controls how many times its body runs. |
| Pausing steps (Wait, Human Review) | Put Wait inside a sequential Repeater body to pause between passes. |
| Terminal & no-op steps (Stop and Error, Do Nothing) | Have no per-item work to repeat. |
| Autonomous agents (AI Agent) | Use a Repeater or a Subflow to bound multi-turn runs. |
| Triggers | Start the automation run rather than repeating inside it. |
You cannot use it inside a Repeater
A step in a Repeater body already runs once per pass, so Each item is switched off for it (and {{ item }} already holds the current pass’s entry). To process a list contained inside each outer item, use a nested Repeater.
What it passes on
The step collects what every run produced, and the collection is itself a list. A later step reads it the same way it reads any other list, and can loop over it in turn.
| Reference | What it holds |
|---|---|
{{ N.results }} | Successful results only, in the order of your input list |
{{ N.items }} | Every item with its position, status and error |
{{ N.stats }} | total, succeeded, failed, skipped |
When two steps loop over the same list, use {{ N.item }} rather than
{{ N.results }}. It returns what step N produced for the current
item, so “the record step 5 created for this lead” stays aligned. See
Variable Syntax.
Limits
- Item & concurrency limits: Maximum list length and parallel runs depend on your plan. Lists exceeding your plan’s limit are refused when the step fans out; see System Limits.
- Step credit usage: Standard action steps consume 1 Step credit per item processed, while control steps are free. See Step Credits, Tokens & Storage.
- Bounding list size: Place Limit before per-item processing to cap the record count (Filter selects by rules rather than capping count).
Examples to copy
One email per customer
An earlier step returns {{ 2.ret.records }}. Set the email step’s repeat badge to Each item and point it at that list. Address it to {{ item.email }} and write the body with {{ item.name }}.
Number each row as you write it
Use {{ item.$index }} for a zero-based position and {{ item.$total }} for the input count. The third item in a 47-item list has index 2. For a human-facing label such as “3 of 47”, calculate a one-based position before writing it.
- Run
- Switch the Step's repeat badge to Once per item, pick a list, map {{ item.<field> }}, and click Run step in Test & Debug
- You should see
- Test & Debug runs up to the first 3 items and returns { results, items, stats } on the Output tab.
What’s Next?
- Repeater: when the work takes more than one step per item.
- Loops & Iteration: the choice between the two, in one page.
- Variable Syntax: the full reference for
{{ }}.