CLEANUP
How to bulk delete products in Shopify
The Shopify admin lets you select and delete products a page at a time, which is slow and easy to get wrong when the list is long. With a spreadsheet you delete exactly the products you list, and nothing else.
Step by step
Back up first
Deleting a product in Shopify is permanent. Export your products, or run a BulkCSV backup, before you delete anything, so you have a file to recreate from.
List the products to delete
Create a file with a Handle column (or ID) and a Command column. Put DELETE in the Command column for every row. Filtering your product export down to the unwanted rows is the quickest way to build this list.
Load the file into BulkCSV
Open BulkCSV in your Shopify admin and drop the file onto the import area. CSV, XLS and XLSX files all work, and you can also paste the link to a public Google Sheet.
Check the preview
The preview shows which rows will delete a product. Read it carefully. This is your last chance to catch a product that should not be on the list.
Run the import
Each matched product is deleted and the result is logged per row. Rows whose handle does not match any product are skipped and reported.
Example file
Handle and Command are all a delete row needs.
| Handle | Command |
|---|---|
| discontinued-tote-2023 | DELETE |
| sample-product-old | DELETE |
| test-listing-do-not-buy | DELETE |
Download this example as a CSV ↓
Good to know
- DELETE only needs an identifier. Other columns in the row are ignored.
- Use IGNORE in the Command column to keep a row in the file but skip it for this run.
- Rollback cannot bring back a deleted product. Your backup or export is the way to recreate it.
- To delete a single variant and keep the product, use a Variant Command of DELETE on a variant row instead.
Try it on your own store
BulkCSV is free for your first 250 rows, with every feature included. No card needed.
Install BulkCSV free →Common questions
Can I archive products instead of deleting them?
Yes, and it is often the safer choice. Use Command UPDATE with Status set to ARCHIVED. Archived products leave your storefront but keep their history.
What if a handle in my file does not exist?
The row is skipped and listed in the results. Nothing else is affected.