Skip to main content

Bulk-edit products

When you need to change the same field across dozens of products — bump a cost, retag a range, set a default supplier, adjust a pricing tier — the Bulk Edit page does it in one pass. You pick the fields, choose how each one changes, preview every diff, and only then commit. This guide walks the happy path and the variations along the way.

Before you begin

  • You need the products.update permission. Without it the Bulk Edit button doesn't appear on the products list, and the bulk-edit endpoint rejects the request. See the product permissions reference.
  • Bulk editing never touches stock levels, opening balances, or FIFO cost layers. It edits product records (fields, tags, pricing, attributes, suppliers). For stock numbers, see the Inventory guides.
  • Publishing changes out to sales channels is a separate step — bulk edit updates SKU.io only. Channel republishing is covered in the Listings guide (coming soon).

Open the Bulk Edit page

  1. Go to the products list and select the products you want to change — tick individual rows, or use the header checkbox to grab the whole page.
  2. Click Bulk Edit in the bulk-actions bar. The selected products carry over to the Bulk Edit page.
  3. At the top you see N products selected. Click the chevron next to it to expand the list of SKUs and confirm you have the right set.
Each mode has its own selection cap

A single Apply to All run accepts at most 500 products. Edit Individually is capped at 100 products per run (its per-product grid is heavier to process). If you selected more than the mode allows, narrow your selection (filter the list first) or split the job into batches.

Choose a mode

The page has two modes, toggled at the top:

ModeUse it when
Apply to AllYou want to set the same change on every selected product — for example, "increase Default Cost by 5%" for all of them.
Edit IndividuallyYou want different values per product — a grid with one row per product, one column per field.

Switching modes carries your selected fields across, so you can start by picking fields in Apply to All and flip to the grid if you decide the values differ.

Apply the same change to all products

  1. In the Select Fields to Update panel, expand a group (Basic Information, Shipping & Dimensions, Costing, Accounting, Tax, Taxonomy, Tags, Inventory Settings) and tick the fields you want to change. Use the search box to jump straight to a field by name. Your pricing tiers, supplier pricing tiers, attributes, and suppliers appear as their own groups, built from your data.
  2. For each selected field, choose an operation and, where the operation needs one, enter a value. The available operations depend on the field type — see Field operations below.
  3. Click Preview Changes.

Edit each product individually

  1. Tick the fields you want as columns (in either mode's field selector).
  2. Switch to Edit Individually. Each selected product is a row; each field is an editable cell. A Name column is always shown so you can tell rows apart. This mode handles up to 100 products at a time — see the cap note above.
  3. Fill in the cells you want to change. Blank cells are left untouched.
  4. Click Preview Changes.

Individual mode validates each field per product before saving — for example Name and Barcode cap at 255 characters, dimensions must be numeric, and Min Stock Level must be a whole number of 0 or more. If a product's values fail validation, that product is reported as failed with the specific field error, and the rest still go through.

Set attribute values in bulk

Attributes are one of the record fields Bulk Edit can change across your whole selection — so this is the fastest way to set a product attribute on many products at once. In the Select Fields to Update panel, each of your attribute groups (plus an Ungrouped bucket) appears as its own group, with one checkbox per attribute:

  1. Expand the attribute's group (or search for it by name) and tick the attribute.
  2. Choose Set value and enter the value to apply to every selected product, or Remove attribute value to clear it. In Edit Individually mode each product gets its own cell instead.
  3. Preview Changes, then commit.

Pricing tiers and suppliers appear as their own groups and work the same way — see Field operations. To set attributes (and other fields) across a very large catalog in one pass, import a spreadsheet with an Attr: <name> column per attribute instead.

Preview, then commit

Clicking Preview Changes runs a dry run — nothing is written yet. The preview dialog summarizes the diffs:

  • Apply to All shows one row per field: the field, the operation, the new value, and how many products it affects.
  • Edit Individually shows one row per change: product, field, operation, old value, new value.

Only products whose value actually changes appear. If the values you entered already match the current data, you see No changes detected and the Apply Changes button stays disabled.

When the preview looks right, click Apply Changes.

Each product is saved in its own transaction, so one bad product doesn't roll back the rest. On success you get a Successfully updated N products confirmation and return to the list. If some products fail, the successful ones are still saved and an error banner lists the SKUs that didn't update, so you can retry just those.

Unknown fields are rejected, not silently skipped

If a field name isn't one the page recognizes, that product's save fails loudly (it appears in the failure list) rather than being reported as "updated" with nothing changed. This protects you from a silent no-op when something is mistyped upstream.

Field operations

The operation menu changes with the field type. This is the full set:

Field typeOperationsNotes
Text / lookup (Name, Barcode, MPN, Brand, units, nominal codes, tax rate)Set value, ClearClear sets the field to empty.
Numeric (Weight, dimensions, case sizes, Default Cost, proforma costs/%, Min Stock Level)Set value, Increase by amount, Decrease by amount, Increase by %, Decrease by %, ClearIncrease/decrease start from each product's current value (treated as 0 if empty). Results are rounded to 2 decimal places. A decrease never goes below 0.
Boolean (Is Dropshippable, Is Taxable)Set to Yes, Set to NoNo value input needed.
TagsAppend (add new), Replace (purge + set), Remove specific, Clear allAppend keeps existing tags; Replace swaps the whole set; Remove drops the tags you name; Clear all removes every tag.
Pricing tier (one per tier)Set value, increase/decrease by amount or %, Remove pricing levelAdjustments compute from the product's current price on that tier.
Supplier pricing tier (one per tier)Set value, increase/decrease by amount or %, Remove supplier pricing levelApplies to every supplier linked to the product for that tier.
Attribute (one per attribute)Set value, Remove attribute valueSets or clears that product's value for the attribute.
Supplier (one per supplier)Set as default supplier, Add as supplier, Remove supplierNo value input needed. Set as default auto-links the supplier first if it isn't already attached.
Primary CategorySet value, ClearReplaces (or removes) the product's primary category.

The numeric math is worth spelling out, since it's the same everywhere numeric operations appear (fields, pricing tiers, supplier pricing tiers):

  • Increase by amount — current value plus your amount.
  • Decrease by amount — current value minus your amount, floored at 0.
  • Increase by % — current value multiplied by (1 + percent / 100).
  • Decrease by % — current value multiplied by (1 - percent / 100), floored at 0.

All results round to 2 decimal places.

Next steps

Video transcript

To change a field across many products at once, select them on the products list — tick individual rows, or the header checkbox for the whole page. A bulk-actions bar appears; click Bulk Edit, and the selected products carry over to the Bulk Edit page. Choose Apply to All to set one value on every product, or Edit Individually for a per-product grid. Pick the fields to change from the grouped list — say, Default Cost — then set how each one changes on the right. You preview every diff before anything is committed.

Last verified: