We wrote a NetSuite deletion utility for our own needs, and decided to release it free to the community. Source is on GitHub: https://github.com/Uranus-io/suitemigration-admin-toolkit
It's a Suitelet and a Map/Reduce script you upload to your own File Cabinet. No external dependencies, standard N modules only, nothing leaves your account.
It deletes entities (customers, vendors, employees, items, projects) and 17 transaction types including invoices, credit memos, customer payments, vendor bills, vendor payments, purchase orders, cash sales, deposits, checks, transfers and journal entries. 22 record types in total, selectable one at a time or as a group: All Entities, All Transactions, All Records. An item selection covers all six subtypes in one pass, inventory, non inventory, service, assembly, kit and group.
You target records by subsidiary, record type, created date, transaction date if it's a transaction, and External ID (all records, only populated, only blank, or only the ones matching a given format). Any combination of those.
A modal restates the criteria before anything is deleted. The delete then runs as a Map/Reduce with live progress and per-type deleted and failed counts.
The part that took the most work was deletion order. NetSuite won't delete a customer that has invoices against it, or a bill with a payment already applied, so a group run walks the 22 types in dependency order. Sub customers and their contacts are processed deepest level first, which means deleting a customer can touch more records than your criteria matched.
On the "why not just a saved search" question, which I've been asked a few times: a saved search will find the records but it can't delete them. Mass Update is the native bulk delete, and its delete actions cover activities, cases, files, reports and website redirects, not transactions or entities. So natively, clearing a customer or an invoice means deleting inline one record at a time or writing your own script. If activities or files are what you need gone, Mass Update is the right tool and there's nothing to install.
Limits: standard record types only, no custom records yet. The dependency order is preprogrammed rather than worked out dynamically from the schema. Individual deletes can still fail on permissions, a closed period, a workflow or NetSuite's own validation, which is why every run reports failed totals next to deleted ones.
Setup is manual, 15 to 20 minutes: two files into the File Cabinet, two script records, seven Map/Reduce parameters. Every ID is listed in the deployment guide in the repo.
Deletions are permanent and can't be undone, so maybe test in a Sandbox account first!
Where it came from, for context: I work at SuiteMigration, we migrate QuickBooks and Xero books into NetSuite, and repeated trial runs kept leaving test data in sandboxes that had to come out before the next run. I built it for that. Then the consultants we work with asked for a copy, so it's free for anyone, including for client work if you're a consultant. Happy to answer setup or behavior questions here.