Avoid unnecessary loops in Power Automate

Learn how to avoid unnecessary loops when using a filtered get items action


When you use the Get Items action with a filter, there are often situations where you know you’ll end up with only a single item.

The thing is that the item will be stored in an array, meaning that when you use any of the properties from that “single” item, Power Automate will automatically insert a loop.

Example

Here we are using get items and we are filtering from a customer list, on the specific customer number

This is my customer list SharePoint customer list with a CustomerNumber column used as the filter source

This is the Power Automate action Power Automate Get items action filtered by a specific customer number from the customer list

We know that we will only get one item returned - but what happens if we want to send an e-mail with the customer number?

Power Automate inserts a loop, because in theory our get items would have more than one item

Power Automate flow showing an unwanted Apply to each loop automatically inserted when using dynamic content from a Get items action

How to avoid the loop

We know that we only have one item in our array, so let’s write an expression to get a specific value from that item.

Looking at the output from our get items action, we can see that the item is in

body -> value -> 0 -> CustomerNumber

Power Automate raw output from the Get items action showing the body value array structure with CustomerNumber at index 0

Instead of inserting customer number from dynamic content, use following the expression

outputs('Get_items')['body/value']?[0]?['CustomerNumber']

The expression explained
We are getting outputs from Get items and then body -> value, and if there is an item ? we are getting the first value [0], and if there is an item ? we are getting the value from CustomerNumber

In Power Automate we can now replace the dynamic content with the expression from above, and avoid the loop (either, delete the loop and insert the action again, or remove the dynamic content from your email body, and “drag” the email action out of the loop - and then delete the loop)

Your action should now look like this

Power Automate send email action using a custom expression instead of dynamic content to avoid the Apply to each loop

After running the flow, your output should now look like this

Power Automate flow run output showing the email sent successfully without a loop

Getting all values from the first item

This expression/trick is good to use, if you only need 1 or 2 values, but it takes a bit longer to write these expressions, instead of using the dynamic content

Since we now know how to get a specific value from our Get items we can also get the ID.

Insert a Get item action (a single item, not Get items) and in the Id property insert the following code

outputs('Get_items')['body/value']?[0]?['ID']

This will return a single item, and now we can work with all of the values in the dynamic content, and avoid loops

Power Automate Get item action using a custom expression to retrieve the ID from the first result of Get items, enabling access to all dynamic content without a loop

There you go, you now know how to avoid a loop when it is not needed, and your flows will be much more readable in the future


See also