How to Loop Through SharePoint List Items in Power Automate [With Filter & Large List Support]

If your Power Automate flow is only processing 100 items and quietly stopping, you’ve hit the default Get Items limit. It’s one of the most common mistakes I see, and it doesn’t throw an error, so people don’t even realize it’s happening.

In this tutorial, I’ll show you exactly how to loop through all SharePoint list items in Power Automate. I’ll cover two real-world examples — looping through all items to update a status field, and looping through filtered items to send event reminder emails. I’ll also show you how to handle lists with more than 100 items, more than 5,000 items, and how to avoid some nasty mistakes that can silently break your flow.

Quick Pre-Flight Checklist

Before building this flow, make sure you have these in place:

  •  Your SharePoint list is created with all the columns you need
  •  You have Edit permissions on the SharePoint list
  •  If your list has more than 100 items, you must enable Pagination (I’ll show you exactly how)
  •  The Status column is set as a Choice type, not a single line of text
  •  Any column you plan to filter on is indexed in the list settings (critical if your list has more than 5,000 items)
  •  Concurrency Control in Apply to Each is OFF if your loop is updating items (more on why below)

The 100-Item Trap (Read This First)

This is something nobody tells beginners, and it causes a lot of confusion.

When you add a Get Items action in Power Automate, it returns 100 items by default. That’s it. If your list has 500 items, your loop will only process the first 100 — no warning, no error, just silent data gaps.

Here’s how to fix it based on your list size:

List SizeWhat to Do
Up to 100 itemsDefault settings are fine — no changes needed
100 to 5,000 itemsEnable Pagination in Get Items settings, set Threshold to 5000
5,000 to 100,000 itemsSet Top Count to 5000 AND enable Pagination with Threshold 100000

To enable pagination, click the three dots (⋯) on the Get Items action → Settings → toggle Pagination to ON → enter your threshold value.

Which Approach Should You Use? (Decision Guide)

Here’s a simple way to decide how to set up your loop:

How many items are in your list?

├── Less than 100
│ └── Default Get Items — no changes needed

├── 100 to 5,000
│ └── Enable Pagination, Threshold = 5000

└── More than 5,000
├── Set Top Count = 5000
├── Enable Pagination, Threshold = 100000
└── Make sure the column you filter on is INDEXED in SharePoint

Loop Through SharePoint List Items in Power Automate

Let’s discuss how to loop through SharePoint list items in Power Automate by taking some real examples.

Example 1: Loop Through All Items to Update Product Status in Power Automate

The Scenario

I have a SharePoint list called Inventory Data that tracks product quantities. Every Monday, I want a flow to automatically loop through all products and update the Status column based on how many units are left:

  • Total Quantity ≥ 10 → Status = In Stock
  • Total Quantity between 1 and 9 → Status = Low Stock (send email alert)
  • Total Quantity = 0 → Status = Out of Stock (send email alert)

SharePoint List Setup

Here’s the list structure I’m working with:

Column NameData Type
Department (Title)Single line of text
Product NameSingle line of text
PriceSingle line of text
StockNumber
StatusChoice (In Stock, Low Stock, Out of Stock)
Loop Through All Items to Update Product Status in Power Automate

Step-by-Step Flow

Step 1: Create a Scheduled Cloud Flow

  • Go to Power Automate → click + Create → select Scheduled Cloud Flow
  • Give your flow a name, set the start date and time
  • Set Repeat every 1 Week on Monday
  • Click Create
Looping Though and Organizing Data by Value Using Power Automate

Step 2: Add Get Items Action

  • Click + New step → search for and select Get items
  • Set Site Address to your SharePoint site
  • Set List Name to Inventory Data
Checking the status field of all items in a sharepoint list

⚠️ Important: If your list has more than 100 products, stop here and enable Pagination. Click the three dots on Get Items → Settings → Pagination ON → Threshold = 5000. If you skip this, your flow will only update the first 100 products.

Step 3: Add the Status Condition (This Auto-Creates Apply to Each)

When you reference a field from Get Items inside a Condition, Power Automate automatically wraps everything in an Apply to Each loop. This is the loop that processes each item one by one.

  • Click + New step → select Condition
  • Left value: Select Stock from dynamic content (Apply to Each will appear automatically)
  • Operator: is greater than or equal to
  • Right value: 100
Power Automate Apply To Each Loops 20X Faster

Step 4: Handle the “In Stock” Branch (If Yes)

In the If Yes section:

  • Click Add an action → select Update item
  • Site Address: your SharePoint site
  • List Name: Inventory Data
  • Id: select ID from dynamic content
  • Title: select Title from dynamic content
  • Status: select In Stock from the dropdown
power automate apply to each current item

Step 5: Handle Low Stock and Out of Stock (If No)

In the If No section, add another Condition:

  • Left value: Stock
  • Operatoris less than
  • Right value100
  • Click + Add → Add row → select AND
  • Left value: Stock
  • Operator: is greater than
  • Right value1

If Yes (Low Stock — quantity between 2 and 99):

  • Add Update item → set Status to Low Stock
  • Add Send an email (V2) → fill in the To, Subject, and Body to alert the sales team

If No (Out of Stock — quantity is 0 or 1):

  • Add Update item → set Status to Out of Stock
  • Add Send an email (V2) → alert the sales team
Power Automate Loop Through All Items to Update Product Status

Step 6: Test the Flow

  • Click the Test icon (top right) → select Manually → click Test
  • Confirm the connection and click Run flow → click Done
  • Check your SharePoint list — the Status column should now be updated for every product
Power Automate to Loop Through Large SharePoint Lists

Example 2: Loop Through Filtered Items for Event Reminders in Power Automate

The Scenario

A company tracks all its events (webinars, workshops, conferences) in a SharePoint list. The organizers keep missing upcoming events, so they want automatic email reminders — one on the day of the event and one the day before.

This flow runs every day, filters only the relevant events (today or tomorrow), and loops through them to send emails.

SharePoint List Setup

Here’s the Event list structure:

Column NameData Type
TitleSingle line of text
OrganizerPerson
Event DateDate and Time
LocationLocation
DescriptionMultiple lines of text
Event TypeChoice
Event StatusChoice
Power Automate How to filter calendar events filter

Step-by-Step Flow

Step 1: Create a Scheduled Cloud Flow

  • Go to Power Automate → + Create → Scheduled Cloud Flow
  • Name your flow and set start date and time
  • Set Repeat every 1 Day
  • Click Create
How to send email reminders for a SharePoint Calendar event

Step 2: Get Only Upcoming Events (Filtered)

Rather than pulling all events into the loop, filter at the source. This speeds up your flow and avoids unnecessary processing.

  • Click + New step → select Get items
  • Site Address: your SharePoint site
  • List Name: Event Details
  • Filter Query: paste this expression:
EventDate ge '@{formatDateTime(utcNow(),'yyyy-MM-dd')}'

This pulls only events from today onward. No point looping through past events.

  • Top Count: Set to 100 (or increase with Pagination if you have many upcoming events)
How to build basic reminder flow using Power Automate

💡 Tip: The column name in your OData filter must match exactly what’s in SharePoint — no spaces, use the internal column name if needed.

Step 3: Extract the Event Date Using Compose

  • Click + New step → select Compose
  • Input: select EventDate from dynamic content

This adds Apply to Each automatically. The Compose action stores the date of each event so we can compare it cleanly in the next step.

Power Automate Reminder Emails By Date [Power Platform

Step 4: Check If the Event Is Today

  • Click Add an action → select Condition
  • Left value: use the expression: formatDateTime(outputs(‘Compose’),’yyyy-MM-dd’)
  • Operator: is equal to
  • Right value: use the expression: formatDateTime(utcNow(),’yyyy-MM-dd’)

If Yes (event is today):

  • Add Send an email (V2)
  • To: select Organizer Email from dynamic content
  • Subject: something like Reminder: Your event “@{items(‘For_each’)?[‘Title’]}” is TODAY
  • Body: include event name, date, location, and any other useful details
Setting up an email reminder based on dates in Power Automate

Step 5: Check If the Event Is Tomorrow (If No Branch)

In the If No section, add another Condition:

  • Left value: formatDateTime(outputs(‘Compose’),’yyyy-MM-dd’)
  • Operatoris equal to
  • Right value: formatDateTime(addDays(utcNow(),1),’yyyy-MM-dd’)

If Yes (event is tomorrow):

  • Add Send an email (V2) with a subject like Reminder: Your event “@{items(‘Apply_to_each’)?[‘Title’]}” is TOMORROW
Power Automate Apply to each Current item

Step 6: Test the Flow

  • Click Test → Manually → Test → Run flow → Done
  • Check whether the organizer received the email for any events falling today or tomorrow
Loop Through Filtered Items for Event Reminders in Power Automate

Troubleshooting: Common Issues and Fixes

I’ve seen these problems come up again and again. Here’s a quick reference:

SymptomMost Likely CauseFix
Flow only processes 100 itemsDefault Get Items limitEnable Pagination, Threshold = 5000
Flow runs but nothing gets updatedWrong list name or column nameDouble-check the internal column name
“List view threshold exceeded” errorList has 5,000+ items, no indexed columnIndex the column you’re filtering on in List Settings
Items seem to get skipped randomlyConcurrency Control enabled during Update ItemDisable Concurrency in Apply to Each settings
Flow times out on large listsNo filter, processing every itemAdd an OData Filter Query to Get Items
Emails send duplicatesFlow triggered twiceCheck if the trigger fires on item modification caused by the flow itself

The Concurrency Control Warning (Important)

Apply to Each has a Concurrency Control setting that lets you process multiple items in parallel rather than one at a time. It can make loops much faster — I’ve seen flows speed up 10–20x with it enabled.

But here’s the thing: if your loop includes an Update Item action, be careful with this setting.

Running too many parallel updates on the same SharePoint list can cause “item is locked” errors and conflicts. If your loop is updating items, keep Concurrency off or set the degree of parallelism low (I recommend 5 or less).

If your loop is only reading data or sending emails — go ahead and turn it on. It’s a big time saver for those use cases.

Handling Lists With More Than 5,000 Items in Power Autoamte

If your list is large — say, 10,000 or 50,000 items — here’s what you need to do:

  1. In the Get Items action, set Top Count to 5000
  2. Open Settings on Get Items → enable Pagination → set Threshold to 100000
  3. Go to your SharePoint list → List Settings → Indexed Columns → add an index on any column you use in a Filter Query
  4. If you’re filtering with OData, make sure the filter uses an indexed column — otherwise, SharePoint will block the query once the list exceeds 5,000 items
Handling Lists With More Than 5,000 Items in Power Autoamte

This setup lets Power Automate retrieve up to 100,000 items by fetching 5,000 at a time across multiple internal pages.

Frequently Asked Questions

Does Apply to Each have an item limit?

Apply to Each itself doesn’t have a hard limit, but it can only loop through what Get Items retrieves. Since Get Items maxes out at 5,000 items per call (or up to 100,000 with Pagination enabled), that’s your effective ceiling.

What is the default item limit for Get Items in Power Automate?

By default, Get Items returns only 100 items. To increase this, you need to enable Pagination in the action’s settings and optionally increase the Top Count.

What’s the difference between Top Count and Pagination?

Top Count tells Get Items how many items to return in a single call (max 5,000). Pagination tells Power Automate to keep making multiple calls until it hits the Pagination Threshold. You use both together when your list has more than 5,000 items.

Can I use Apply to Each in parallel?

Yes — go to the three dots on Apply to Each → Settings → Concurrency Control → turn it on and set a degree of parallelism. For sending emails, I’ll usually go up to 10. For updating SharePoint items, keep it low (3–5) to avoid throttling.

My OData filter query isn’t working. Why?

A few things to check: make sure the column name in your filter matches the internal column name in SharePoint (not the display name), make sure the column is indexed if your list has more than 5,000 items, and double-check the date format — Power Automate uses ISO 8601 format (yyyy-MM-ddTHH:mm:ssZ).

Will this work on SharePoint On-Premises?

The examples here use SharePoint Online. If you’re on SharePoint On-Premises, the Get Items action works similarly but the connector and some options may differ depending on your gateway setup.

>

Build a High-Performance Project Management Site in SharePoint Online

User registration Power Apps canvas app

DOWNLOAD USER REGISTRATION POWER APPS CANVAS APP

Download a fully functional Power Apps Canvas App (with Power Automate): User Registration App

Power Platform Tutorial FREE PDF Download

FREE Power Platform Tutorial PDF

Download 135 Pages FREE PDF on Microsoft Power Platform Tutorial. Learn Now…