Search the SharePoint recycle bin. Restore anything. Delete nothing.

Undelete365 is a web part that makes your site's recycle bin searchable and restorable — and it contains no code path that can permanently delete anything. That isn't a promise; it's a check the build fails without. Searching is free for everyone; restoring — one file, or an entire incident with Mass Restore — is Pro: €249, once.

Read the safety audit

v2.0.0 · zero API permissions · runs as the signed-in user · Free and Pro in one package

0
API permissions requested — visible in your App Catalog before you approve
3
SharePoint endpoints in the application code — two reads, one restore
1
checker included with every download to verify that yourself

The problem

One deleted file. Nine thousand rows. No search box.

SharePoint's built-in recycle bin can't search or filter. It's one long list, sorted by deletion date — so finding the file someone deleted "sometime last month, I think it had budget in the name" means paging through everything deleted since then, by hand.

Undelete365 puts a search box, filters (name, original location, who deleted it, item type, date), and multi-select restore on top of the same bin — nothing more.

How it works

Four steps, one of which is a confirmation dialog

01
Search & filter
By name, original path, item type, who deleted it, and date range — across both bin stages.
02
Select
Tick one item or fifty. Folders restore with their contents.
03 · Confirm — the dialog shows exactly where each item goes
04
Restored
Items go back to their original location. A name conflict fails safely: the item stays in the bin, untouched, with the reason shown.
There is no step five. No purge, no "empty bin," no permanent delete — the buttons don't exist because the code paths don't.

Mass Restore — Pro

Restore everything they deleted. In one job.

Some deletions aren't one file. SharePoint keeps everything in the recycle bin for 93 days — but the native bin restores one screen of ticked boxes at a time, and nobody is clicking through 18,000 rows. Mass Restore turns the incident into a query: everything deleted by user X, between date A and date B, under path P — with an optional type or name filter. Preview the count. Then restore all of it.

Ransomware cleanup

An attacker with one compromised account mass-deletes fourteen libraries at 3 a.m. The files are in the bin. Mass Restore puts back everything that account deleted in that window — and nothing else.

The sync accident

A misconfigured sync client wipes a folder tree — 18,000 files gone before anyone notices. One criteria set, one dry run, one job.

Offboarding gone wrong

A leaver's cleanup script took shared documents with it. Filter by that account and the date it ran; restore only what it touched.

Dry run first. Always.

Every job starts with a preview: how many items match, their total size, how many folders they span. Nothing is restored until you have seen the numbers and confirmed. The preview is mandatory — there is no way to skip it.

Built for six-figure bins.

Mass Restore pages through the bin and restores in small batches. When SharePoint asks it to slow down — HTTP 429 or 503 with a Retry-After header — it waits exactly as told, backs off with jitter, shrinks its batch size, and continues. Big jobs don't fail. They just take longer.

Resumable — with zero new storage.

Close the tab mid-job and nothing is lost. Restored items have already left the bin, so re-running the same criteria picks up exactly where you stopped. The bin itself is the job state. Only the job's criteria and counters sit in your browser's localStorage — never file contents, never anything sent anywhere.

A report you can hand over.

Every item that couldn't be restored — name conflicts, mostly — is listed with the reason and exportable as CSV. Conflicts fail safely: the item stays in the bin, untouched, until you resolve it.

Mass Restore adds zero new endpoints. It's the same three SharePoint calls in the audit table below — the same two reads and one restore — just orchestrated. Those three rows didn't change because the code's reach into SharePoint didn't change; the only row the table gained is the Pro license check, disclosed like everything else.

The safety audit

Don't trust us. Check.

Every network call the application code makes lives in one file. Here is the complete list — the same table as the README, "destructive?" column intact. Mass Restore added no rows to it; the freemium licensing added exactly one, disclosed below like everything else.

CallMethodDestructive?
…/_api/site/GetRecycleBinItemsPOSTNo — read only
…/_api/site/RecycleBin?$top=NGETNo — read only
…/_api/site/RecycleBin/RestoreByIdsPOSTNo — reversible
license.undelete365.com/validatePOSTNo — license check only (Pro; carries the key + tenant hostname, nothing else)

No other endpoint is ever called by the application code. None of SharePoint's recycle-bin removal endpoints (DeleteByIds, EmptyRecycleBin, …) appear anywhere — not in source, not in the compiled bundle, not built from strings.

One request leaves your tenant, and only for Pro: the license check — a POST to license.undelete365.com/validate carrying the product name, your license key, and your tenant hostname. No file names, no content, no user names. The Free tier makes no licensing call at all: nothing leaves your tenant.

$ node verify-compiled-package.js extracted/
compiled package — 0 destructive calls
VERIFICATION PASSED

Every download includes verify-compiled-package.js — free or Pro — a dependency-free script that checks exactly what you were sent, not what you're asked to trust.

Delegated, not elevated. Users can only see and restore what they could already see and restore by hand in SharePoint's own recycle bin. Second-stage access follows SharePoint's own rule — site collection admins only.
Fully auditable. Every restore lands in the Microsoft 365 audit log under the acting user's own name. The tool adds no separate identity to hide behind.
Free without a key. Pro with one. The Free tier runs with no license and makes no licensing call. Pro features unlock with a per-tenant key — validated, revocable, and checked before Pro code runs. A missing or revoked key locks Pro features; it never touches your data.
Typical recycle-bin utilities
Separate app outside SharePoint — deleted-item metadata is downloaded and indexed elsewhere
Ship bulk "empty recycle bin" operations — real delete powers, tenant-wide
Subscription pricing — pay every year to keep access
Bulk restore via elevated app identities and extra endpoints — more surface to review, more to go wrong
Undelete365
Runs in-page as the signed-in user — your recycle-bin data never leaves SharePoint
No delete code path exists — enforced by the build, verifiable by you
€249 once, per tenant — no recurring subscription
Mass Restore uses the same three delegated calls — zero new endpoints, same audit table

Who it's for

M365 & SharePoint admins

Approve it once in the App Catalog knowing exactly what it can and can't do — the permissions screen and the safety check are your evidence, not our word.

MSPs & consultancies

Hand your client's security team the network-call table and the checker script. The justification memo writes itself.

Site owners

Find the file someone deleted last week and put it back — without opening a ticket or paging through the bin by hand.

Pricing

Free to search. €249 — once — to restore.

FreePro — €249 one-time
Search & filter by name, location, and item type — both bin stages
Filter by who deleted it, or by a date rangePro only
See item name, type, original location, and size
See who deleted it, and exactly when🔒 Masked — unlock with Pro
Verifier script (verify-compiled-package.js) included
Multi-select restore with confirmation dialog
Mass Restore — criteria-based restore at scale
Mandatory dry-run preview with counts
Live progress · resumable jobs
Per-item failure report, exportable as CSV
License key requiredNoYes — one per tenant
Network requests beyond SharePointNoneLicense check only

Ready on your tenant in about a minute

  1. 1Download the free package below — no form, no email — or buy Pro. Checkout is handled by Mollie.
  2. 2Your package (undelete365.sppkg + the verifier script) is ready instantly. Pro license keys appear on the confirmation page and arrive by email.
  3. 3Upload it to your tenant App Catalog — or a site collection app catalog to scope it to one site. The upload screen confirms: no API permissions requested.
  4. 4Add the app to a site, then add the web part to any modern page. Pro: paste your license key once in the web part settings — the whole tenant unlocks.
€0 free forever
Search and filter across both bin stages, on the same engine Pro uses — same accuracy, same results. Every match shows its name, type, original location, and size in full. Who deleted it and exactly when stay masked (🔒) until you unlock Pro.
Download free package

No form. No email. No licensing call.

€249 one-time · per tenant
✓ ONE-TIME PAYMENT — NO SUBSCRIPTION
Every site collection, every user — paid once. No recurring billing, no auto-renewal, no seat count creeping up later. About the price of a single year of a subscription tool. Already bought Undelete365? You're Pro — nothing to do, nothing to pay.

Your license key and receipt are delivered here.

FAQ

The questions you should be asking

Is this a subscription?

No. €249 once, per tenant. There is no recurring billing, no annual renewal, and no per-seat pricing that grows with your organization — every site collection and every user on that tenant is covered by the same single payment.

Can this permanently delete anything?

No. The application code contains exactly three SharePoint network calls — two reads and one restore. None of SharePoint's removal endpoints appear in the source or the compiled bundle, and the included verify-compiled-package.js checks that against what you actually received. Restoring is itself reversible: re-deleting the item puts it back in the bin.

What permissions does it need?

None to configure. It requests zero API permissions and uses the signed-in user's existing SharePoint session. Users can only see and restore what they could already see and restore in SharePoint's own recycle bin UI.

What exactly is free?

Finding things — for real, not a demo. The Free tier runs the same search and filter engine as Pro: same accuracy, same result count. It shows the item's name, type, original location, and size in full, so you can confirm it actually found your file. What it masks: who deleted it and exactly when — shown as a lock icon, not the real values — and filtering by deleted-by or by date range is Pro-only. That's deliberate: those two facts are exactly what you'd need to go find the item yourself in SharePoint's native recycle bin, which lists everything in one chronological list. Pro removes the mask and adds one-click and mass restore. Same package either way; a license key is the only difference.

How big a recycle bin can Mass Restore handle?

It's built for bins with 100,000+ items. It pages through the bin rather than loading it at once, restores in small batches, and adapts its pace whenever SharePoint throttles (HTTP 429/503 with Retry-After — it waits exactly as instructed). The practical constraint is time, not size: a very large job runs longer, shows live progress, and resumes if you close the tab — re-running the same criteria continues where it stopped, because restored items have already left the bin.

Doesn't a mass-restore engine need new, scarier endpoints?

No — and that's the whole point. Mass Restore adds zero new endpoints. It orchestrates the same three SharePoint calls in the audit table: two reads and one restore. Those three rows are unchanged from the day we launched — the only row the table ever gained is the Pro license check — and the verifier in your download still proves it against the exact package you received.

I already bought Undelete365. Do I pay again?

No. Existing customers are Pro automatically — €249 bought everything this product does, including features added later. Your license key arrives by email at your purchase address; Mass Restore is included.

What data leaves my tenant?

For Pro, exactly one request: the license check. It carries the product name, your license key, and your tenant hostname (for example contoso.sharepoint.com) — never file names, file contents, or user names. A successful check is cached for 7 days, and a network failure gives you a 14-day grace period before Pro features lock. The Free tier doesn't even make that call: nothing leaves your tenant at all.

Can I just share my package with someone else?

The package, yes — the Free tier is for everyone; pass it along. Pro features only unlock with a valid license key, which is tied to one tenant and revocable. A shared or revoked key unlocks nothing. Licensing never changes what the app can do or what data it touches — only whether Pro features are available.

Why does the second-stage bin require site collection admin?

That's SharePoint's rule, not ours — the second-stage (site collection) bin is admin-only by design. The web part doesn't elevate anyone: non-admins get a 403 from SharePoint, and the tab is simply hidden for them.

What happens on a name conflict when restoring?

The restore for that item fails safely. Nothing is overwritten; the item stays in the recycle bin, untouched, and the list shows you the reason so you can rename or move the conflicting file first. In Mass Restore, every conflict lands in the failure report, exportable as CSV.

Does it work on classic sites?

SPFx web parts only run on modern pages. On a classic-only site you can still use it via SharePoint's built-in hosted workbench (/_layouts/15/workbench.aspx) — same permissions model, no extra risk.

What's your refund policy?

There is no refund policy — purchases are final, for this and every HS Services product. A Pro key unlocks the software instantly and irreversibly the moment payment clears, so there's nothing left to reverse afterward. Try Free first: it costs nothing, needs no form, and ships with the same verifier script, so you can confirm exactly what Pro does before you pay for it.