Skip to main content

Bulk archive, unarchive & delete products

When you need to retire or remove many products at once, the products list gives you a bulk-action toolbar instead of touching one row at a time. The same rules that govern a single product still apply — archiving hides a product (and its variations) reversibly, deleting only succeeds when nothing depends on it — but bulk mode adds two things worth understanding: a scope toggle that lets you act on your explicit selection or everything the current filter matches, and a background queue for large deletes so the browser never hangs on a big run.

For the single-product path and the full deletion-block model, see archive, unarchive & delete a product.

Before you begin

  • Archive and Unarchive require the products.archive permission.
  • Delete requires the products.delete permission.
  • Bulk Edit requires the products.update permission and opens a separate page — see bulk-edit products.
  • Each button only renders if you hold its permission, so the toolbar you see reflects your role. See the product permissions reference.

Select products and open the bulk toolbar

  1. Open the products list and filter or search down to the products you want to act on.
  2. Tick the checkbox on each row you want, or use the header checkbox to select the visible page.
  3. A bulk-action bar appears showing n items selected with the action buttons and a scope toggle.

Choose the action scope

The scope toggle decides what an Archive or Unarchive action operates on:

ToggleWhat it acts on
Selected Only (n)Exactly the rows you ticked — sent to the server as an explicit list of ids.
All Filtered (total)Every product matching the current filters, not just the current page — the count shown is the full filtered total.

All Filtered is how you archive thousands of matches without paging through them. Behind the scenes SKU resolves your active filters into an explicit list of product ids on the server (via the products query), then runs the operation on that resolved list. This resolution is deliberate: it snapshots the ids up front so a large, slow filter isn't re-evaluated partway through the run.

Delete always uses your ticked selection

The scope toggle governs Archive and Unarchive. Delete always works from the rows you explicitly selected, because it first runs an eligibility check on each one (see below). The delete endpoint itself can accept either an explicit id list or a raw filter set, but the products list always resolves your selection to explicit ids through the eligibility screen before submitting.

Bulk archive

  1. With rows selected, set the scope toggle, then choose Archive.
  2. Confirm the dialog. It names how many products will be archived. Archived items can be restored later.

What happens:

  • Each product's archived_at timestamp is set to now, and the archive cascades to every variation — a matrix product and its children retire together.
  • Archived products drop out of the default list. Turn on the Archived toggle in the list footer to see them again.
  • SKU reports a running result such as "18/20 products had been archived successfully." Products that were already archived are counted as skipped (a harmless warning), not errors — re-archiving never fails.
  • The Archive button is hidden when every product in your selection is already archived, so you can't run a no-op.

Bulk unarchive

  1. Turn on the Archived toggle in the list footer so archived products are visible, then select the ones to restore.
  2. Choose Unarchive and confirm.

Unarchiving clears archived_at on each product and all its variations and returns them to your active working set. Products that were already active are skipped with a warning. Like Archive, the Unarchive button only shows when at least one selected product is currently archived.

Bulk delete

Deleting is permanent and only succeeds for products that are completely unused, so bulk delete opens a dedicated review screen rather than firing immediately.

  1. With rows selected, choose Delete. The Delete Products screen opens and checks each selected product's eligibility.
  2. Every product is sorted into one of two buckets:
    • Ready to delete — nothing references it.
    • Has usages — the product (or one of its variations) is linked to other records. Expand the row to see each blocking relationship and drill into the specific records that hold it (for example, the sales orders or purchase orders involved).
  3. Review the summary chips (n eligible for deletion / n have usages), then select Delete N Eligible Product(s). Only the eligible ids are submitted — products with usages are left untouched, so you never accidentally attempt an impossible delete.

When a product is deleted, SKU cascades the removal to all of its owned data (attributes, kit/bundle components, listings, pricing, suppliers, images, variations, the inventory cache, reporting rows, and Amazon-owned FIFO layers) inside a single transaction. If a database constraint that the eligibility check doesn't cover still blocks a delete, that product is reported as a failure with a "linked to other relations" warning — it's never silently reported as deleted. For the full list of what makes a product non-deletable, see archive, unarchive & delete a product.

Large deletes run in the background

To keep the request responsive, SKU decides between an inline delete and a queued one by size:

Selection sizeBehavior
30 or fewer productsDeleted synchronously — you get the result (success/skipped counts) in the same response.
More than 30 productsPushed to a background queue. SKU immediately marks the batch as archived so it drops out of your active list, then a job deletes the records. You get "Added to the Queue, it will be processed shortly."

Because a large delete is handed off, the confirmation is an acknowledgement, not a final count — the rows disappear from the active list right away, and the actual row removal completes in the background. If any individual delete in the batch hits a constraint, that product is logged and left in place rather than failing the whole run.

Other bulk actions on the toolbar

The same selection powers two more actions that live outside this guide:

  • Bulk Edit — navigates to a dedicated bulk-edit page where you change fields across the selection. See bulk-edit products.
  • Stock Take — starts an inventory count for the selected products. This is an inventory workflow; see create a stock take.

On mobile

On a phone the same actions surface through a sticky bulk-action bar at the bottom of the screen. It carries the selection count, the same scope toggle (n vs All), an Edit button, and an Actions menu holding Stock Take, Archive, Unarchive, and Delete. Each entry still respects your permissions and the same already-archived / already-unarchived visibility rules.

Next steps

Video transcript

Tick the products you want on the list, and a bulk toolbar appears. The scope toggle decides what an action hits — Selected Only, exactly the rows you ticked, or All Filtered, every product matching your current filters, even across pages. Archive hides the products reversibly, cascading to their variations — you confirm, and they can be restored later. Delete removes them permanently, and only when nothing depends on them; a large delete runs in the background so the browser never hangs.

Last verified: