NetSuite Bulk Delete Record Utility

Update February 5, 2012

See the updated article “Delete NetSuite Records Utilizing Mass Update” to learn about the current suggested practice to delete records in NetSuite. ¬†While the utility below still applies, it is important to understand NetSuite’s preferred approach for deleting records.


NetSuite doesn’t offer a convenient way to delete a large number of records at a time.¬† Yes, there is a way to delete 50 records at a time using direct list editing, but what happens if you have too many for this manual operation?

NetSuite, like many Cloud based services, is sensitive to providing easy-to-use bulk delete record operations.   I suspect they are concerned about misuse and by preventing bulk delete, they avoid time-consuming and expensive restorations from backups.  The safe and recommended approach is to mark records inactive versus deleting them.  However, there are times when you really want to delete records in bulk.

We developed a Delete Record Utility utilizing built-in NetSuite scripting tools.  This utility is available to anyone who reaches out to us for a conversation.  We want to be careful about its distribution because this is a dangerous operation.  Here is how it works.

Create Saved Search

The whole operation must be done by someone acting in an Administrator role. ¬† You will need to create a saved search that returns all the records you are seeking to delete.¬† We assume you know how to do this because you are an Administrator (if you don’t know what this is, then you may want to call NetSuite support; we suspect you don’t have enough experience in the platform and we are about to perform some dangerous operations!).¬† When you are satisfied with your saved search, name it well so it will be easy for you to reference later.¬† Mark the saved search as Public.¬† You then need to install the Delete Script Utility (available through conversations with us).

Install Delete Script Utility

Through Suite Builder, install the utility (Administrators should know how to perform this operation).¬† This utility will be available once we have a conversation and we push it to your NetSuite instance.¬† After the Delete Script has been installed, you will have a new Tab in the Classic workcenter called “Utilities”.¬† In that tab will be a one Portlet that needs to be configured.¬†¬†¬† Configure it by selecting “setup”.¬†¬† Select the “Saved Searches Portlet” and then click “Save” as illustrated below:

Setup Scripted Portlet

The Portlet should look very similar to the one below after it has been properly setup.¬† In this example, we are illustrating that we are selecting a previously saved public search created in an earlier step.¬† In our case, we created one called “Contact Search – Inactive for Delete”.¬† Yours will be named what ever you called it. ¬† Once you select the correct Saved Search, click “Next Step…”.

Select Saved Search

Review the Records to Delete

You should see results from your Saved Search.¬† After you confirm these are indeed the records you intend to delete, click the “Delete All Records” button. ¬† See illustration below:

Records to Delete

You should receive a confirmation giving you a chance to stop your operation.   We provide you with the number of records we will be deleting which should be confirmed against your expectations.   See below:

Delete Records Confirmation

Scheduled Delete Operations

The utility utilizes a scheduled script to perform the operation.   After you confirm you want to delete your records, you will then be brought to a status screen as shown below:

Delete Operation Status Message for Queue
A link is provided that takes you to the scheduled script record area (more precisely, it is the Script Deployment Execution Log).   There, you can see the execution log and the status of the operation.  Because this is a scheduled operation, you will need to give it some time to complete.    Here is what the screen will look like when it is complete:

Scheduled Delete Record Script Area

We also will email you a message once the scheduled script completes with information about each record deleted and convenient links to help you review the operation:

Email message of scheduled script operation results

Be Sociable, Share!

Marty Zigman

Holding all three official certifications, Marty is Southern California's NetSuite expert and leads a team of senior professionals at Prolecto Resources, Inc. He is a former Deloitte & Touche CPA and has held CTO roles. For over 25 years, Marty has produced leadership in ERP, CRM and eCommerce business systems. Contact Marty to set up a conversation.

More Posts - Website - Twitter - Facebook - LinkedIn - Google Plus - YouTube

| Tags: , , , , , , , , , , , , , , , , , | Category: NetSuite, Technical | 9 Comments


  1. Jan Leigner
    Posted September 20, 2009 at 2:54 am | Permalink

    I am my company’s NS admin, and I am wondering about how this utility would work w/r/t child records.

    I have a lot of Item records currently set to Inactive that should be deleted. They are the vestiges of our old QB DB and my false starts while ramping NS after go-live.

    If I attempt to delete these records now, they will kick back the “This record cannot be deleted because it has Child Records”, since most were used on some form of transaction at one point or another before they were deemed “unfit for duty” so to speak.

    Does your tool overcome this without having to unwind every tx that occurred against the now erroneous Item records? Or is this utility only viable if the record is a.) needing to be deleted and b.) has never been used in any transaction record?

  2. Posted September 20, 2009 at 7:04 am | Permalink

    Hello Jan,

    Indeed, the child records are problematic. Our utility will try to delete those records and if they have children, we log that message and give you a reference to the child. We do not delete the record (parent in this case).

    However, have you considered using the utility to get rid of the child record first and then work your way back to the parent record? Otherwise, I think you will need to mark all these records as inactive. Let me know. Perhaps we may be able to create another utility that helps with this common problem.

    PS, say hello to Lily for me. We used to work closely together at Deloitte in the early 90s before she was at Microsoft.

    Marty Zigman

  3. Posted September 20, 2009 at 9:54 pm | Permalink


    That was a really useful article and an exercise we did this summer on a larger implementation. I really like the portal you put the searches in since we just changed the script “record” to accomplish the same tasks. Well done!

    On child records we did another search to find these as we hit them in the deletion process and working backwards were able to clean up a nightmarish NetSuite instance prior to go live.

    Cheers on a good read and let’s sync up on Skype from time to time: clint-d-wilson

  4. Posted September 20, 2009 at 10:48 pm | Permalink

    Thanks Clinton! Glad to see that working backwards to delete the child eventually got rid of them. I think this utility will help! Let me know if you are interested in collaborating on projects sometime in the future.

    Marty Zigman

  5. Jennifer Nagum
    Posted June 23, 2016 at 11:50 pm | Permalink

    we have a bit of a problem before our “go live” for our Netsuite. We need to wipe out all sample data but there is this cancelled vendor bill that cannot be deleted nor edited. do you know how to delete it?

  6. Posted June 26, 2016 at 8:25 pm | Permalink

    Hello Jennifer,

    Have you closed the Accounting Period as this can lock up records from being deleted. Can you post a link to a screen shot?


  7. Rajitha K S
    Posted May 29, 2017 at 9:36 pm | Permalink

    I have a subisidiary with lot of dependent records. i want to delete all dependent records of that subsidiary. Each record have lot of dependent records . can i delete this records programatically?Could you please help me?

  8. Posted June 10, 2017 at 3:11 pm | Permalink

    Hello Rajitha,

    This is going to be a challenging task given the number of different parent / child records that may be in the system. We have created a recursive mass update delete function that is part of our Prolecto Utilities Bundle. It will go after recursive elements such as sales orders, item fulfillments, and invoices. However, it would have to be tuned to go after records that we haven’t previously covered. We give our clients this bundle for free when they are under my team’s care.

One Trackback

  1. […] to delete records in bulk. ¬†Since 2009, many NetSuite users in the community have downloaded our NetSuite Bulk Delete Record Utility. ¬†However, with the support of Mass Updates, there is another way to do this that is much more […]

Post a Comment

Your email is never published nor shared. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>