Say you’re cleaning up a help desk queue of eight tickets in Power Apps. You want the closed ones gone, and you also want an X button that drops one ticket at a time.
In this tutorial, we’ll run power apps remove vs removeif side by side on the same eight-row collection: multiple conditions, removing several records at once, a gallery X button and duplicate rows.
Both jobs remove rows, but they need different functions. Remove wants the exact record (or a table of records). RemoveIf wants a condition and finds the rows for you.
My verdict after testing both on 11/01/2026: use RemoveIf when you can describe the rows (“every Closed ticket”), and use Remove when you already hold the record, like ThisItem in a gallery or First() of a collection.
Remove vs RemoveIf at a Glance
Both functions delete records from a data source, and a collection counts as one. If you need a refresher on what a collection is, start with our guide to creating a Power Apps collection. Here’s how the two compare in my tests and in Microsoft’s reference:
| Feature | Remove | RemoveIf |
|---|---|---|
| What you hand it | One or more records, or a table of records | One or more conditions (true/false formulas) |
| Typical formula | Remove(colRm, ThisItem) | RemoveIf(colRm, Status.Value = "Closed") |
| Multiple conditions | Build the table with Filter() first | Commas mean AND; use || for OR |
| Remove multiple records | Yes: several records or a Filter() table | Yes: every row where the conditions are true |
| Duplicate rows in a collection | One copy, unless you add RemoveFlags.All | Each row is checked, so every match goes |
| Collections | The entire record must match | Conditions use the column names |
| Where it runs | Behavior formulas only (OnSelect, OnChange) | Behavior formulas only |
| Returns | The modified data source as a table | The modified data source as a table |
| Big data sources | Removes the records you pass | Few sources delegate it; others fetch matches up to 500/2000 |
Note: both functions also work on SharePoint lists and Dataverse tables, and there they delete real items. Every test in this post runs on a collection copy, so the list stays untouched.
Build the Demo App Step by Step
The tests run in one canvas app connected to a SharePoint list called Service Requests. It holds 623 help desk tickets with a Title, Status and Priority. Our post on creating a canvas app from a SharePoint list covers the connection in more depth.

Step 1: Start a new app. Go to make.powerapps.com and select Start with design on the Home page.

Step 2: Create a blank canvas app. Select Create from blank. A canvas app is one where you place every control yourself.

Step 3: Pick the Tablet layout. Choose Tablet and select Create. Power Apps Studio, the app editor, opens.

Step 4: Add the data. Select Add data, search for SharePoint and pick the SharePoint connector. Paste your site URL and select Connect.

Step 5: Choose the list. Check Service Requests and select Connect. The list is now a data source, which is simply a place the app reads records from.

Step 6: Add the demo screen. Select New screen > Blank. To rename it, select the screen and click its name in the Properties pane. I called it scrRemove.
Step 7: Add a Reset button. Insert a button, pick OnSelect in the property dropdown on the left of the fx formula bar, and paste this. It copies the first eight tickets into a collection named colRm:
ClearCollect(colRm,
ShowColumns(
FirstN(Sort('Service Requests', ID, SortOrder.Ascending), 8),
ID, Title, Status, Priority
)
)

ShowColumns keeps only ID, Title, Status and Priority, and FirstN takes the first eight rows after sorting by ID. Our First, FirstN, Last and LastN guide explains those two helpers.
Step 8: Show the rows. Add a vertical gallery with Items set to colRm, and put a label in it with this Text, plus a label with "CountRows(colRm) = " & CountRows(colRm):
ThisItem.ID & " " & ThisItem.Title & " | " & ThisItem.Status.Value & " | " & ThisItem.Priority.Value
Run the app with Play at the top right, or hold Alt and click a button in the editor. Press Ctrl+S to save. After Reset, the gallery shows the eight sample rows:

Rows 2, 3 and 8 are Closed and High. Rows 1, 6 and 7 are New and Low, and rows 4 and 5 are In Progress and Normal. I click Reset before every test below.
Remove Needs the Record, RemoveIf Needs a Condition
This is the difference you hit first. Same colRm collection, two buttons. Button 1 uses Remove, so it needs a record. First() hands it one, and you can read more about that in getting the first item of a collection:
Remove(colRm, First(colRm))
Clicking it removed row 1, Laptop replacement #1000, and the count dropped to 7.
Button 2 uses RemoveIf, so it needs a rule instead. I didn’t point at any row; I only described them:
RemoveIf(colRm, Status.Value = "Closed")
After Reset and a click on button 2, the three Closed rows (2, 3 and 8) were gone and five rows were left.

So the question to ask yourself is simple: do I already have the record, or can I only describe it? A record means Remove. A description means RemoveIf.
Power Apps RemoveIf Multiple Conditions: Commas Mean AND
Here’s the gotcha that surprises most people. Same eight rows again. Button 3 passes two conditions separated by a comma, hoping to remove Closed tickets and Low tickets:
RemoveIf(colRm, Status.Value = "Closed", Priority.Value = "Low")

Nothing happened. The count stayed at 8, and there was no error either.

That’s because RemoveIf removes a row only when every condition is true for that row. No ticket in colRm is both Closed and Low, so no row qualified. Microsoft’s reference says the same: with multiple conditions, all must evaluate to true.
When you mean “this OR that”, put both tests into one condition with || (you can also write Or()). Button 4 does that:
RemoveIf(colRm, Status.Value = "New" || Priority.Value = "High")

This time six rows went: the New ones (1, 6, 7) and the High ones (2, 3, 8). Only VPN access #1001 and Teams phone #1004 were left.

Important: a comma-separated RemoveIf that removes nothing doesn’t warn you. If a cleanup button seems to do nothing, check whether you meant OR.
Remove Multiple Records From a Collection in Power Apps
Remove isn’t limited to one row. Hand it a table and it removes every record in that table. Same collection, button 5, with Filter() building the table of High tickets:
Remove(colRm, Filter(colRm, Priority.Value = "High"))

The result was five rows, with 2, 3 and 8 gone. That’s exactly what RemoveIf(colRm, Status.Value = "Closed") did earlier, because in this sample the Closed rows are also the High rows.
For a plain condition, I’d write the RemoveIf version, since it’s shorter and easier to read. The Remove plus table form shines when the table already exists, like the rows a user checked in a gallery. Our post on removing items from a Power Apps collection has more collection-only examples.
Gallery X Button: Remove(colRm, ThisItem)
Inside a gallery, Remove is the natural pick because each row already knows its record. ThisItem is the record of the row you clicked. Same colRm gallery, now with an X button in the template and this gallery OnSelect-style formula on the button:
Remove(colRm, ThisItem)

In Preview, I clicked the X on row 4. VPN access #1001 disappeared, and the count went from 8 to 7.

You could write RemoveIf(colRm, ID = ThisItem.ID) instead, but there’s no reason to describe a record you already hold. For a SharePoint-backed gallery, see how to delete a SharePoint list item from a gallery with a confirmation step.
Duplicate Rows: Remove Takes One Copy, RemoveFlags.All Takes Them All
Collections can hold the same record twice, and that’s where Remove has an extra switch. Same eight rows, then I clicked “Add duplicate of row 1”:
Collect(colRm, First(colRm))
That made nine rows, with a second Laptop replacement #1000 at the end. Then button 6 ran Remove(colRm, First(colRm)). Only the first match went, so the count was 8 and the copy at the end stayed.

Button 7 adds RemoveFlags.All, which tells Remove to delete every copy of the record:
Remove(colRm, First(colRm), RemoveFlags.All)

After Reset, a new duplicate and button 7, both Laptop rows were gone and seven rows were left.

RemoveIf has no flag because it checks every row anyway, so a condition that matches both copies takes both. To clean up duplicates that differ slightly, see removing duplicate rows from a collection.
Running Remove or RemoveIf on a SharePoint List
Everything above runs on colRm, a copy in the app’s memory. Point either function at 'Service Requests' and it deletes real list items. I never ran these demo buttons against the list for that reason.
Delegation matters too: the data source does the work on the server. Per Microsoft, only a few sources support it for RemoveIf. For the rest, Power Apps fetches the matching records (up to 500 or 2,000, or the data page size) and deletes them one call at a time. Our Power Apps delegation guide explains those limits.
Pro Tip: before a delete button touches a real list, add a confirmation. The Confirm function in Power Apps gives you a yes/no dialog in one line.
When to Use Remove Instead of RemoveIf
- A gallery X or trash icon on each row: Remove(colRm, ThisItem).
- The record comes from First(), LookUp() or Gallery.Selected: Remove.
- You can describe the rows (“all Closed”, “Priority is Low”): RemoveIf.
- Rows must meet two rules at once: RemoveIf with commas; either rule: RemoveIf with ||.
- Exact duplicates in a collection must all go: Remove with RemoveFlags.All.
- Empty the whole collection: neither; use Clear(colRm).
How to Switch From Remove + Filter to RemoveIf
If your app is full of Remove(x, Filter(x, condition)), the switch is mechanical. Same colRm example:
- Copy the condition from inside Filter():
Priority.Value = "High". - Replace
Remove(colRm, Filter(colRm, ...))withRemoveIf(colRm, ...). - If Filter() had several comma-separated conditions, keep the commas: both functions treat them as AND.
- Press Alt and click the button, then check the count label.
RemoveIf(colRm, Priority.Value = "High")
In short: Remove takes records, RemoveIf takes conditions, commas mean AND, and only Remove needs RemoveFlags.All for duplicates. For more on building apps like this, browse our Power Apps tutorials.
A few more collection tutorials I’d read next:
Frequently Asked Questions
How do I use RemoveIf with multiple conditions in Power Apps?
Separate the conditions with commas, like RemoveIf(colRm, Status.Value = “Closed”, Priority.Value = “Low”). A row is removed only when all of them are true. For OR logic, join the tests with || inside one condition.
Why did my RemoveIf not remove anything?
Usually because the comma-separated conditions are combined with AND and no row matches all of them. In my test, Closed plus Low removed nothing and showed no error. Switch to || if you meant either condition.
How do I remove multiple records from a collection in Power Apps?
Use RemoveIf with a condition, or pass Remove a table: Remove(colRm, Filter(colRm, Priority.Value = “High”)). Both removed the same three rows from my eight-row collection.
How do I remove all copies of a duplicate record in a collection?
Add RemoveFlags.All as the last argument: Remove(colRm, First(colRm), RemoveFlags.All). Without it, Remove deletes only one copy of the record.
Does RemoveIf delete items from my SharePoint list?
Yes, if the list is the data source you pass. RemoveIf on a collection only changes the collection. On large sources that don’t support delegation, Power Apps works on a limited set of matching records. See Microsoft’s Remove and RemoveIf reference.

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.