ShareMaster is shaped by your feedback. Tell us what to build next →
Features All features overview
Migration Tools Overview Structure and content OneDrive ↔ SharePoint Content only Structure only Move / Copy Upload from this computer Download to this computer Dropbox to SharePoint Resume and incremental runs
Recycling Bin Overview Browse a site's recycle bin Empty recycle bins in bulk Restore and purge history
Archive Overview Configure the tenant On Demand Archive Restore Archived Files Archive Savings Report Blob Viewer
Optimise Storage Tools Overview Delete all items in a list Delete all files and folders in a library Remove empty folders Remove duplicate files Reduce image sizes Delete sites and subsites
SharePoint Tools Overview Tenant Explorer SharePoint Explorer Easy Settings Fix renamed groups List Explorer Search the Preservation Hold Library
Replace Overview Replace in SharePoint Replace in local files Find password-protected files
Shared Links Overview Report shared links Report unique permissions Remove a person from sharing links Remove shared links Remove unique permissions
Version History Overview Version trimming Version trimming report Reset file version
Reports Overview Inventory report Folder inventory Site and subsite storage Security matrix Teams permissions Pre-migration analysis Compare items Dropbox to Microsoft 365 compare Duplicate file report Empty folder report Image size report Recycle bin report Unused licences Report history
V2 Pricing Demos Blog Guides Use cases Compare Tools Alerts FAQ Contact
  1. Home
  2. Compare
  3. Bulk Delete List Items Options

Bulk Deleting SharePoint List Items: 3 Methods Compared

Approach Filter before delete Works past 5,000-item threshold Scripting required Preview before executing
Native browser multi-select View filters only No No Manual review only
PnP PowerShell Yes (CAML / Where-Object) Yes Yes Yes, if scripted separately
ShareMaster Delete all items in a list Yes (created or modified date, name, size) Yes No Yes (exact count)

Three ways to remove a large number of items from a SharePoint Online list, from the built-in browser selection to a scripted approach to a dedicated desktop tool. The right choice depends on how many items you are removing, whether you need a repeatable filter, and how comfortable you are scripting against the SharePoint APIs directly.

Side by Side: Native Browser vs PnP PowerShell vs ShareMaster

Native browser multi-select

Every SharePoint list supports selecting items with checkboxes in list view and clicking Delete from the command bar. This works well for small, one-off cleanups where the items you want are visible on a single page. The header checkbox selects everything currently loaded, not everything in the list, so libraries with more than a page of results require repeating the selection across every page. The list view threshold, 5,000 items by default, blocks any filtered or sorted view from loading at all once the underlying data set is large enough, which forces admins into narrower views or indexed columns just to see what they are trying to delete.

PnP PowerShell

Get-PnPListItem combined with a CAML query or a Where-Object filter can retrieve items past the list view threshold and pipe the results into Remove-PnPListItem. This is the most flexible option and the only one that gives full control over throttling behaviour, batching, and logging, at the cost of needing a script written, tested, and run correctly against the right list.

# Find and remove items older than a cutoff date
$items = Get-PnPListItem -List "Project Tracker" -Query "<View><Query><Where><Lt><FieldRef Name='Created'/><Value Type='DateTime'>2025-01-01T00:00:00Z</Value></Lt></Where></Query></View>"
$items | ForEach-Object { Remove-PnPListItem -List "Project Tracker" -Identity $_.Id -Force }

The script above is a starting point, not a finished tool. Production use needs error handling for throttled requests, a dry-run mode that reports the match count before deleting anything, and a way to confirm the target list and site before the loop executes.

ShareMaster: Delete all items in a list

ShareMaster's Delete all items in a list empties a list, or only the items you narrow it to: created before a date, modified before a date, a name pattern, or a size range. A preview always runs first and reports the exact count, and the delete then runs across the full result set without a page-by-page limit or a script to author. The list itself is kept. By default every item goes to the recycle bin, so a bad filter is still recoverable within the retention window; a permanent delete is available too, behind a second confirmation.

Decision Matrix

Your situation Best approach
Under a few hundred items, all visible on one or two pages Native browser multi-select
You need a repeatable, auditable script for a recurring cleanup job PnP PowerShell
Large list, filter-driven cleanup, no scripting resource available ShareMaster Delete all items in a list
You want to preview matches before committing to the delete PnP PowerShell (scripted) or ShareMaster

See ShareMaster's storage clean-up tools for list items, library files, empty folders and duplicates.

Frequently Asked Questions

Can I select and delete more than 5,000 SharePoint list items at once?

Not through the native browser view in a single pass. The list view threshold prevents a filtered or sorted view over 5,000 items from loading, and the header checkbox only selects items on the current page. Removing items past that threshold needs an indexed query, either through PnP PowerShell or a dedicated tool.

Do deleted SharePoint list items go to the recycle bin?

Yes. Whichever method you use, standard deletion sends the item to the site's first-stage recycle bin, where it stays recoverable for the usual retention window before moving to the second stage.

What is the safest way to bulk delete SharePoint list items by a filter condition?

Review the filter's matches before running the delete. Run the query alone first in PnP PowerShell and check the count and sample rows, or use ShareMaster's Delete all items in a list, whose preview reports the exact count before the bulk delete runs.

Last updated