Loop on Items is a core Flow step that takes a list and runs everything inside it once for every item in that list.
Who this is for
Anyone building an Alta Flow that has to handle many records at once — a search that returns 50 contacts, a CRM query that returns a list of deals, an array of rows from a spreadsheet — instead of just one.
Before you start
You need an existing Flow with a trigger and at least one step that outputs a list (an array). The loop can only iterate over a list.
Test the step that produces the list first. Until a step has been tested, the Data Selector shows "No sample data yet — test this step first." and you won't be able to pick its output.
Add a Loop on Items step
Open your Flow and click the + button where you want the loop to go.
In the step picker, choose Loop on Items — described as "Iterate over a list of items."
The step is added to the canvas. Steps placed inside it run once per item; steps placed after it run once, after every item has been processed.
Point the loop at a list
Select the loop step to open its settings. You'll see one field:
Click the Items input (placeholder: "Select an array of items").
The Data Selector opens. Pick the list you want to iterate over from an earlier step or from the trigger.
Make sure what you select is the list itself, not a single value inside it. The step's own help text says it plainly: the Items input "should be a list of items."
Build the steps inside the loop
Add steps inside the loop the same way you add them anywhere else — click the + on the branch that runs inside the loop. To move steps you've already built into the loop, copy them, then right-click and choose Paste Inside Loop.
You can also nest other core steps inside a loop. A Router placed inside a loop, for example, evaluates its branches separately on every iteration.
Use the current item in later steps
This is the part people miss. Inside the loop, the loop step itself publishes two values you can insert into any field:
item — the current item for this round of the loop.
index — the position of the current item, starting at 1 for the first item (not 0).
To use them, click into any field on a step inside the loop, open the Data Selector, find your Loop on Items step in the tree, and insert item (or drill into one of its properties, such as item.email) or index.
Do not reference the original list on a step inside the loop — that gives you all the items every time. Reference the loop step's item instead.
Watch each round in a run
After the Flow runs, open the run and select the loop step. A small numbered stepper appears next to the loop on the canvas, with up and down arrows for Next iteration and Previous iteration. Hovering it shows "Show child steps output on round (2/10)". Step through it to see the exact input and output of every step inside the loop, for each item.
Tips and common pitfalls
"The items you have selected must be a list." — the loop step failed because the value in Items resolved to something that isn't an array: a single object, a number, or plain text. Re-open the Data Selector and pick the array one level up.
An empty list is not an error. If the list has zero items, the loop simply runs zero times and the Flow continues to the next step. If a loop seems to do nothing, check whether the previous step actually returned any results.
One failure stops the whole loop. If a step inside the loop fails, the run stops there and the remaining items are never processed. To keep going, open the step inside the loop and turn on Continue on Failure — "Enable this option to skip this step and continue the flow normally if it fails."
Use Retry on Failure for flaky calls. For steps that call an external service, Retry on Failure will "automatically retry up to four attempts when failed" before the step is marked failed — useful inside a loop, where one transient error would otherwise end the run.
Testing the loop on its own only covers the first item. When you test the loop step by itself, it produces sample data for item 1 and does not run the steps inside it. To see the full behaviour, run or test the whole Flow.
Long lists take long runs. Every step inside the loop executes once per item, so a 10-step loop over 500 items is 5,000 step executions. Where you can, filter the list down before the loop rather than filtering inside it with a Router.
Steps after the loop run once. They can't see item — that value only exists inside the loop. If you need to summarise results, collect them inside the loop (for example by writing to an external system) rather than expecting a combined output after it.
