If you’ve tried to pull a few rows out of a SharePoint list in a flow, you’ve probably seen it loop through every item, or hand back an empty array with no error.
The Filter array action fixes that. Give it an array in From and one condition that uses item(), and it returns only the matching items. Most empty results come from one small thing, like a Choice column compared without /Value.
In this tutorial, we’ll build a real power automate filter array flow on a 620-item SharePoint list, then filter it with one condition, multiple conditions in advanced mode, OR, contains and an array variable, use the output, and fix empty results.
The Sample List We’ll Use
Every example runs against one list: Service Requests on our SPGuides site. It has 620 items, and the flow reads them with the Get items action in Power Automate.
| Column | Type | Sample values |
|---|---|---|
| Title | Single line of text | Laptop replacement #1000, Printer jam #1003 |
| Status | Choice | New, In Progress, Closed |
| Priority | Choice | Low, Normal, High |
| Requester | Single line of text | Megan Bowen, Alex Wilber, Adele Vance |
| DueDate | Date and time | 1/5/2026 to 10/11/2026 |

Status and Priority are Choice columns. Keep that in mind, because it changes how you reference them in a filter.
Build the Demo Flow Step by Step
If you’ve never added a data action before, follow these steps once. You’ll find more starter flows on our Power Automate tutorials page.
- Go to make.powerautomate.com, select Create > Instant cloud flow, pick Manually trigger a flow, name it SPGuides Filter Array demo and select Create.
- Select the plus sign (+) under the trigger, search for Get items and pick the SharePoint action.
- Set Site Address to your site and List Name to Service Requests.
- Open Advanced parameters, add Top Count and enter 1000. You’ll see why in the troubleshooting section.

- Select + again, type Filter array in the Add an action search box and pick Filter array under Data Operation.
- Click the From box, open dynamic content (the lightning bolt) and pick value from Get items. That’s the array of list items.
- Rename the action so it’s easy to reference later, for example Filter High priority.

To test, select Save, then Test > Manually > Test > Run flow. Open the run and click any action to see its inputs and outputs.
Method 1: Filter With One Condition in Basic Mode (Recommended)
Use basic mode when you test one column against one value. It’s the easiest to read later.
Here’s the setup for High-priority requests. In Filter Query, pick Priority Value on the left, choose is equal to, and type High on the right:

Behind the scenes, basic mode writes this expression:
@equals(item()?['Priority']?['Value'], 'High')
Then I added a Compose action with length(body('Filter_High_priority')). In the run, it returned 206 of the 620 items:

How does this work?
Filter array checks each item in From, one at a time. item() is the current item, so item()?['Priority'] is its Priority column.
A Choice column comes through as an object, so you compare its Value. The same applies to lookup columns; for multi-select choices, see converting a multiple-choice column to a string.
Method 2: Filter Array With Multiple Conditions (Advanced Mode)
Basic mode in the Filter array action shows one condition row. For two or more, select Edit in advanced mode and write the expression yourself.
Say we need In Progress requests that were due in October 2026 and are already past due. Here’s the expression:
@and(equals(item()?['Status']?['Value'], 'In Progress'), greaterOrEquals(item()?['DueDate'], '2026-10-01'), less(item()?['DueDate'], utcNow()))

On 10/18/2026, this returned 7 requests, starting with Software license #1271, Badge access #1274 and VPN access #1277.
How does this work?
and() takes two or more conditions and returns true only when all of them are true. You don’t need to nest one and() inside another.
SharePoint returns DueDate as an ISO 8601 string, such as 2026-10-09T12:00:00Z. Because utcNow() uses the same format, less() compares them correctly. That’s handy for retrieving list items in a date range.
Only one @ goes at the very start. If you’d rather click than type, the same AND logic in a Condition action is shown in multiple conditions in Power Automate.
Pro Tip: Build each piece in basic mode first, switch to advanced mode, copy what it wrote, and then wrap the pieces in and(). You’ll avoid most typos.
Method 3: Use OR Conditions
Use or() when an item should pass if any one test is true. Here’s a filter for requests from either Megan Bowen or Alex Wilber:
@or(equals(item()?['Requester'], 'Megan Bowen'), equals(item()?['Requester'], 'Alex Wilber'))
The run returned 156 items, 78 for each requester.
How does this work?
or() returns true as soon as one condition is true. You can mix both, for example @and(equals(...), or(equals(...), equals(...))), to say “this AND (that OR the other)”.
Method 4: Filter Array Contains (Case-Insensitive)
The contains operator keeps items whose text includes a word. It’s case-sensitive, so “printer” won’t match “Printer jam” on its own.
Here’s the fix. Wrap the column in toLower() and type the value in lowercase:
@contains(toLower(item()?['Title']), 'printer')

This returned 52 requests, every one titled “Printer jam”.
How does this work?
toLower() turns “Printer jam #1003” into “printer jam #1003” before the test runs. For checking whether one value sits inside an array, see how to check if an array contains a value.
Method 5: Filter Array Against a Variable
When the allowed values change, keep them in an array variable instead of chaining or(). First, initialize a variable named varTeam of type Array with this value:
["Megan Bowen", "Alex Wilber"]
Then set the Filter Query to varTeam contains Requester. In advanced mode, it reads:
@contains(variables('varTeam'), item()?['Requester'])

The result was 156 items, the same as the OR filter in Method 3.
How does this work?
Here, contains() looks for the requester inside the array, so it works like an IN list. To add names while the flow runs, append values to an array variable before the Filter array step.
You can also filter a variable itself. Put variables('varTeam') in From and use item() alone, because each item is a plain string.
How to Use the Filter Array Output
Filter array returns an array in its Body output. Here are the four ways I use it most:
| Goal | Expression or action |
|---|---|
| Count the matches | length(body('Filter_multiple_conditions')) |
| Get the first match | first(body('Filter_multiple_conditions'))?['Title'] |
| Keep only some columns | Select with From = Body |
| Act on each match | Apply to each over Body |
More counting patterns are in count items in an array. For the titles, add a Select action, set From to the Filter array Body, and map Title in text mode:

Then a Compose turns the list into one line of text:
@{length(body('Filter_multiple_conditions'))} In Progress requests past due in October. First 3: @{join(take(body('Select_titles'), 3), ', ')}

How does this work?
Select changes the shape of each object but keeps the count, so it returned 7 titles. take() keeps the first 3, and join() turns them into a string. Our guide to convert an array to a string shows other separators.
Before you loop, it’s worth testing whether anything matched at all. Here’s how to check if an array is empty.
Why Is Power Automate Filter Array Not Working?
When a filter returns 0 items or too few, it’s usually one of these. I reproduced the first two in the same run.
- Choice column without /Value.
@equals(item()?['Priority'], 'High')returned 0 and no error, because it compared an object with text. Useitem()?['Priority']?['Value']. - Get items stopped at 100. A second Get items with no Top Count read only 100 of 620 items, so the same High filter found 32 instead of 206.
- Different case. Filter array text is case-sensitive. Use toLower() on both sides.
- Numbers in quotes. Compare numbers without quotes, like
greater(item()?['Amount'], 1000). Text numbers needint(); see convert a string to an integer. - Wrong From. From must be an array, such as
body('Get_items')?['value'], not the whole Get items body.

To read more than 5,000 items, turn on Pagination in the Get items settings or use REST API pagination in Power Automate.
Which Method Should You Use?
| Situation | Use |
|---|---|
| One column, one value | Method 1, basic mode |
| All conditions must be true | Method 2, and() in advanced mode |
| Any one condition is enough | Method 3, or() |
| Text includes a word | Method 4, contains() with toLower() |
| The allowed values change | Method 5, an array variable |
Pro Tip: If the data comes from SharePoint, filter at the source first with an OData filter query in Get items. It sends fewer items to the flow, so use Filter array for what OData can’t do, like toLower() or a variable list.
Things to Keep in Mind
- Filter array never changes the shape of the items. Use Select after it.
- Rename the action before you reference it. A rename later breaks expressions that use the old name.
- Blank columns come through as null. Read them with
?so the filter doesn’t fail. - Compare dates in the same ISO format, or format both sides with formatDateTime() in Power Automate.
Here are more array and SharePoint flow guides worth reading next:
Frequently Asked Questions
What does Filter array do in Power Automate?
It takes an array in From, tests each item against your condition, and returns only the items that pass. It doesn’t change the shape of the items.
How do I use multiple conditions in Filter array?
Select Edit in advanced mode and wrap the tests in and() or or(), for example @and(equals(item()?[‘Status’]?[‘Value’], ‘In Progress’), less(item()?[‘DueDate’], utcNow())). Put only one @ at the start.
Is Filter array contains case-sensitive?
Yes. Wrap the column in toLower() and type the value in lowercase, for example @contains(toLower(item()?[‘Title’]), ‘printer’).
How do I get the count or first item from the Filter array output?
Use length(body(‘Filter_array’)) for the count and first(body(‘Filter_array’)) for the first item. Replace Filter_array with your action name, using underscores for spaces.
Where can I read Microsoft’s documentation on Filter array?
Microsoft covers Filter array, Select and Join in Use data operations in Power Automate on Microsoft Learn.

Hey! I’m Bijay Kumar, founder of SPGuides.com and a Microsoft Business Applications MVP (Power Automate, Power Apps). I launched this site in 2020 because I truly enjoy working with SharePoint, Power Platform, and SharePoint Framework (SPFx), and wanted to share that passion through step-by-step tutorials, guides, and training videos. My mission is to help you learn these technologies so you can utilize SharePoint, enhance productivity, and potentially build business solutions along the way.