Skip to Content
BuildAction StepsLoops & IterationRun for Each Item

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.

At a glanceVerified in app · Oct 29, 2026
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.

TriggerSend emailEach itemSummariseitem 1item 2item 3…One step, one run per entry. The canvas stays a straight line.

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

ReferenceWhat 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 itemWhat 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.
TriggersStart 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.

ReferenceWhat 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.

Verify it works
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?

Last updated on

Search documentation

Start with a guide, or search by Step, task or error.