Mass Product Actions

Extra mass actions for the Magento 2 product grid: prices, categories, websites, stock, attributes, links, images and more, run in batches with a job log and undo.

  • Version 1.2.2
$189

One-off payment, with 12 months of updates.

What is included

  • 12 months of new versions and fixes; the versions released in that time stay yours
  • Install with Composer, or download a zip from your account
  • Licence for one production domain, staging and development copies included
  • 30-day money-back guarantee, refund policy

No subscription or automatic renewal. Keep using the versions included in your update period. Update and licence details

Key features

  • 15 mass actions under Actions > More actions
  • Price, special price and cost with rounding to .99, .95 and more
  • Preview the new values before anything is saved
See all features

Composer package softaware/module-mass-product-actions

  • Hours of editing in one go

    Tick the products in the grid, pick an action, fill in a short form. No exports, spreadsheets or re-imports.

  • Undo when it goes wrong

    The old values are kept for each changed product, so a price change or category move can be reversed from the job log.

  • Safe for the whole team

    Every action has its own permission, and the job log shows who changed what, when and on how many products.

All features

What is included

Prices and stock

  • Update price and cost: set, plus or minus an amount or a percentage
  • Rounding to .99, .95, .90, .50, .49 or .00 (nearest, up or down)
  • Special price as a percentage or amount below the price, fixed or removed, with dates
  • Stock quantity set, increased or decreased, and stock status
  • Preview of the first 10 products for price, special price, cost and text

Catalogue structure

  • Add, remove or replace categories
  • Add to or remove from websites
  • Status and visibility per store view
  • Change attribute set with safety checks
  • Related, up-sell and cross-sell links, one way or both ways

Content

  • Assign any editable attribute value, per store view
  • Multiselect values: replace, add or remove options
  • Append, prepend or find and replace text in name, descriptions and meta fields
  • Copy custom options or images from another product
  • Duplicate products (1 to 5 copies each)

Jobs, safety and admin

  • Small selections run at once, large ones in cron batches
  • Job log with progress, cancel and per-product messages
  • Undo for 12 of the 15 actions
  • Permission per action, plus job log, undo and settings
  • CLI commands to process and list jobs

Feature tour

Everything your shoppers and your team see

01 / 06

New actions where you already work

Catalog > Products > Actions > More actions lists the extra actions. Magento's own actions stay as they are, and each admin only sees the actions their role allows.

02 / 06

Change prices and see the result first

Set, increase or decrease by an amount or a percentage, round to an ending such as .99, and press Preview to compare the current and new price before you apply.

03 / 06

Any attribute, any store view

Assign a value to text, select, multiselect, number, date and yes/no attributes, for all store views or one, or go back to the default value.

04 / 06

Every run is recorded

Who started it, what it changed, and how many products were updated, skipped or failed, with live progress for queued jobs.

05 / 06

Put the old values back

Undo restores the values from before the job. The job page warns when later jobs changed the same fields of the same products.

06 / 06

Batch sizes you control

Choose how many products run straight away, the batch sizes for cron and how long finished jobs and their undo data are kept.

Live demo

Try it before you install it

A full Magento store with the module installed, on Luma and on Hyvä. The admin demo signs you in with one click.

Compatibility

Requirements and compatibility

Compatibility of Mass Product Actions
Latest version 1.2.2 · 9 Oct 2026
composer.json requires php ~8.2.0||~8.3.0||~8.4.0||~8.5.0 magento/framework ~103.0.7 softaware/module-core ^1.0 magento/module-backend * magento/module-catalog * magento/module-catalog-inventory * magento/module-catalog-rule * magento/module-catalog-search * magento/module-config * magento/module-configurable-product * magento/module-eav * magento/module-media-storage * magento/module-store * magento/module-ui * magento/module-user *

Installation

Up and running in minutes

After you buy, create a Composer key in your account. Then, in the root of your Magento project:

  1. 01Add the repository and your key (once per project)

    composer config repositories.softaware composer https://repo.softawarecommerce.com
    composer config --auth http-basic.repo.softawarecommerce.com PUBLIC_KEY PRIVATE_KEY
  2. 02Install the module

    composer require softaware/module-mass-product-actions
  3. 03Enable it

    bin/magento setup:upgrade
    bin/magento setup:di:compile
    bin/magento setup:static-content:deploy
    bin/magento cache:flush

    The last three are only needed in production mode.

Prefer a zip? Every version you are entitled to can be downloaded from My modules. More about Composer access

User guide

How to set up and use Mass Product Actions

For version 1.2.2. The same guide comes with the module, in docs/user-guide.md.

Mass Product Actions adds fifteen extra mass actions to the Catalog > Products grid in the Magento admin. Each run is a job with a log, per-product messages and, for most actions, undo. This guide covers installation, the settings, every action, the job log, permissions and the command line.

More actions on the product grid
More actions on the product grid

1. Requirements

MagentoMagento Open Source 2.4.7 to 2.4.9 (Adobe Commerce content staging is not supported)
PHP8.2 to 8.5
InventoryDefault stock (CatalogInventory); Multi-Source Inventory per-source quantities are not supported
ThemesNot involved: the module only works in the admin
Othersoftaware/module-core (installed automatically)

2. Installation

Install with Composer. The access keys come from your account; see https://softawarecommerce.com/shop/composer-access/ for the details.

composer config repositories.softaware composer https://repo.softawarecommerce.com
composer config --auth http-basic.repo.softawarecommerce.com PUBLIC_KEY PRIVATE_KEY
composer require softaware/module-mass-product-actions
bin/magento setup:upgrade
bin/magento setup:di:compile            # production mode only
bin/magento setup:static-content:deploy # production mode only
bin/magento cache:flush

Make sure Magento's cron is running (bin/magento cron:install): larger selections are processed by cron. To update later, run composer update softaware/module-mass-product-actions and the same bin/magento commands.

3. Settings

Stores > Configuration > Softaware > Mass Product Actions (also under Softaware > Mass Product Actions > Settings). All settings are global.

Mass Product Actions settings
Mass Product Actions settings
SettingWhat it does
General > EnabledAdds the extra actions to Actions > More actions. When off, they are hidden and queued jobs wait. Default: Yes.
Processing > Run Immediately Up To (Products)Selections up to this size are updated straight away; larger ones are queued for cron. Actions that save each product in full use a fifth of this. 0 queues every job. Default: 50.
Processing > Batch SizeProducts per batch for price, attribute, stock, website and link changes. Default: 200.
Processing > Batch Size for Full Product SavesProducts per batch for categories, attribute set, custom options, images and duplicates. Default: 20.
Processing > Cron Time Budget (Seconds)How long one cron run keeps processing batches before it leaves the rest for the next run. Default: 50.
Job Log > Keep Finished Jobs For (Days)Finished jobs, their messages and undo data are deleted after this many days; after that they can no longer be undone. 0 keeps them forever. Default: 60.

4. Running an action

  1. Go to Catalog > Products (or Softaware > Mass Product Actions > Run on Products).
  2. Filter the grid and tick the products you want to change.
  3. Open Actions > More actions and choose an action.
  4. Fill in the form. For price, special price, cost and text, press Preview to check the new values first.
  5. Press Apply. A message tells you how many products were updated, skipped or failed and links to the job.

Each form shows whether the action can be undone. Products the action does not apply to (for example the price of a configurable product) are skipped with a reason instead of failing the job.

5. The actions

Update price, Update cost

Change: Set to, Increase by amount, Decrease by amount, Increase by %, Decrease by %. Rounding: no rounding (2 decimals), or round to the nearest ending, up to an ending or down to an ending, with the endings .99, .95, .90, .50, .49 and .00. Configurable products and bundles with dynamic prices are skipped, as their prices come from their variants or items. Amounts and results are checked (up to 999,999,999,999.99, never negative).

Price preview before applying
Price preview before applying

Update special price

Set the special price as a % below the price, an amount below the price, a fixed special price, or remove the special price. Dates: keep the current dates, set a from and to date, or clear them.

Add, remove or replace categories

Add the products to the chosen categories (existing ones are kept), remove them from the chosen categories, or replace all categories. "Replace" with no category chosen removes all categories. Each product is saved in full, so URL rewrites and category indexes are updated as when you edit a product. Undo restores the categories and their positions.

Add to or remove from websites

Uses Magento's own website assignment, including URL rewrites. A product removed from all websites is no longer sold anywhere.

Change status, Change visibility

Enabled or Disabled, and the visibility options, for all store views or one store view. Status has website scope in Magento, so a store-view change applies to all store views of that website. Optionally remove values set on individual store views so the new value applies everywhere.

Update stock

Quantity: keep, set to, increase by or decrease by. Stock status: keep, in stock or out of stock. This changes the default stock. Magento sets products with "Manage Stock" and no quantity left to out of stock automatically.

Update stock form
Update stock form

Assign attribute value

Choose any editable product attribute (a filter box helps with long lists) and enter the value. Text, text area, select, multiselect, number, date and yes/no attributes are supported. Multiselect values can replace, add to or remove from the current options. Remove the value empties it, or on a store view goes back to the default value. Choose the store view in Scope; global attributes always apply to all store views. Products whose attribute set does not contain the attribute are skipped. SKU, URL key, images and other attributes Magento manages itself are not offered.

Assign attribute value form
Assign attribute value form

Change attribute set

Moves the products to a new attribute set, with safety checks: configurable products and their variants are skipped if the new set lacks any of their configurable attributes, and products are skipped if a required attribute of the new set has no value. Values of attributes that are not in the new set stay in the database but are no longer shown or used.

Related, up-sell and cross-sell links

Choose the link type, then: link the selected products to each other (up to 200 products), link the selected products to these SKUs (optionally in both directions), remove links to these SKUs, or remove all links of this type. Enter SKUs one per line or separated by commas.

Copy custom options from a product

Enter the SKU to copy from, then keep the existing options and add the copied ones (options with the same title are not added twice), or delete the existing options and use only the copied ones. Grouped products are skipped. Cannot be undone.

Copy images from a product

Enter the SKU to copy from, then keep the existing images and add the copied ones, or use only the copied images, optionally with the source's image roles. The image files are copied, so every product keeps its own files. Cannot be undone.

Duplicate products

Uses Magento's "Save & Duplicate": 1 to 5 copies per product, an optional text added to the name (for example " (copy)"), and optionally enable the copies (copies are disabled by default). The new SKUs are listed in the job log. Cannot be undone. Duplicating needs Magento's admin configuration, so cron does not run it: large duplicate jobs run from the open job page in the admin or with softaware:mass-actions:process.

Append or replace text

Fields: name, description, short description, meta title, meta keywords and meta description. Append text at the end, Add text at the start, or Find and replace (with Match case). Spaces are kept, so start with a space to append " Sale" to "Blue Shirt". Leave the text empty with "Find and replace" to delete the found text. A name can never be emptied.

6. Job log and undo

Softaware > Mass Product Actions > Job Log lists every run: ID, created, admin user, mass action, summary, status, processed, updated, skipped and failed counts. Open a job with View.

Job log
Job log

The job page shows the progress (live for queued jobs), the details, the per-product messages (skipped products and errors with their SKU) and, under Technical details, the parameters. From there you can:

  • Cancel Job: stops a queued or running job before its next batch. Products already processed keep their changes.
  • Undo Job: restores the values from before the job, as a new job. The page lists later jobs (not undone) that changed the same fields of the same products, and the confirmation names them, because undo overwrites those later changes. Undo jobs in reverse order.
A finished undo job
A finished undo job

Undo is available for update price, special price and cost, categories, websites, status, visibility, stock, attribute value, attribute set, links and text. It is not available for copying custom options, copying images and duplicating.

7. How processing works

  • Every run is stored as a job. Small selections are processed during the request; larger ones are queued.
  • The cron job softaware_mass_product_actions_process runs every minute in its own cron group (softaware_mass_product_actions), which Magento runs as a separate process, so a long queue does not delay other cron jobs. Each run processes batches until the time budget is used.
  • Progress is saved after each batch, so an interrupted job continues where it stopped.
  • Attribute changes use Magento's Product\Action::updateAttributes(), with the same events and plugins as the native "Update attributes". Categories, attribute set, options, images and duplicates save each product in full.
  • Afterwards the price, EAV, category, stock, flat, search and catalogue rule indexers are run for the changed products (or left to Magento when they are "Update by Schedule"), and the page cache is cleaned for those products.
  • A daily cron job deletes finished jobs older than Keep Finished Jobs For (Days).

8. Permissions (ACL)

Under System > Permissions > User Roles > Role Resources > Softaware > Mass Product Actions:

ResourceAllows
Run Mass Actions > (one per action)Running that action. The More actions menu only lists the allowed actions.
View Job LogThe job log and job pages.
View Job Log > Cancel and Delete JobsCancelling and deleting jobs.
View Job Log > Undo JobsUndoing jobs.
Mass Product Actions SettingsThe configuration section.

Assign attribute value also requires the matching price permission for price, special price and cost (Update Price, Update Special Price, Update Cost), and Magento's "Edit Product Design" permission for design attributes such as the page layout and custom design.

9. Command line

bin/magento softaware:mass-actions:process [--job=ID] [--time=3600]   # process queued jobs now
bin/magento softaware:mass-actions:jobs [--limit=20] [--status=pending|running|complete|complete_errors|failed|cancelled]

process is useful for large duplicate jobs, or to run a big queue without waiting for cron.

10. Troubleshooting

ProblemSolution
"More actions" is missingCheck General > Enabled and the user's role permissions under Run Mass Actions.
A queued job stays at 0%Magento's cron is not running, or the module is switched off. Check bin/magento cron:install, or run bin/magento softaware:mass-actions:process.
Products were skippedOpen the job: each skipped product has a message with the reason (for example an attribute not in its attribute set, or a configurable product for a price change).
Undo is not offeredThe action cannot be undone (custom options, images, duplicate), the job is too old (undo data deleted with the job), or your role lacks Undo Jobs.
Prices do not change on the storefrontWith indexers on "Update by Schedule", Magento applies the changes at the next indexer cron run.

11. Limitations

  • Default stock only: no per-source quantities with Multi-Source Inventory.
  • Adobe Commerce content staging is not supported.
  • Copying custom options or images and duplicating cannot be undone.
  • Undo data is written after each batch. If PHP stops in the middle of a batch, that batch runs again when the job resumes, and its undo data then holds the values already changed in that batch.

12. Uninstall

bin/magento module:disable Softaware_MassProductActions
composer remove softaware/module-mass-product-actions
bin/magento setup:upgrade

Product changes made with the module stay.

Changelog

Release notes

1.2.2

Latest
  • Product listing, FAQ and user guide (docs/)

1.2.1

  • Job Log: a one-sentence intro, and an empty state ("No mass actions run yet" with a Go to Products button) instead of an empty table; a notice with a link to Settings when the module is switched off.
  • Job Log grid: status shown as Magento severity badges; clearer column names (ID, Mass Action, Summary — the job action and the row actions column were both called "Action"); "Finished" hidden by default so the grid fits narrower screens; progress numbers formatted in the admin locale.
  • Job page: Back, Cancel Job and Undo Job are standard buttons in the page actions bar; Cancel Job now asks for confirmation like Undo Job; compact progress counters with formatted numbers; status and message types as Magento severity badges; the later-jobs warning as a standard admin message; the raw parameters moved into a collapsed "Technical details" section; no inline styles.
  • Mass action forms on Catalog > Products: Magento's inline validation messages instead of the browser's pop-up bubbles; Add to or remove from websites now asks for a website in the form instead of reloading the page with an error; pressing Enter runs the same checks as Apply; the attribute set safety checks use a standard admin notice; undo badges use Magento's severity colours; labels for the filter and value inputs (screen readers).
  • Settings: all groups open, every field can be restored to its default ("Use system value"), comments state the default, and empty values are rejected.
  • Removed an unused form template.

1.2.0

  • Requires softaware/module-core instead of softaware/module-base. The admin menu and ACL now sit under Softaware_Core::core ("Softaware"); roles that had access keep it (migrated by module-core). After updating all SoftAware modules, softaware/module-base can be removed.

1.1.0

  • Preview button for "Update price", "Update special price", "Update cost" and "Append or replace text": shows the current and new value for the first 10 selected products before anything is saved.
  • The job page warns when later jobs (not undone) changed the same fields of the same products, and the undo confirmation names them.
  • The queue processor runs in its own cron group (softaware_mass_product_actions, separate process), so a long queue no longer holds up the default cron group for up to 50 seconds a minute.
  • New index on the undo snapshot table (product, job) for the conflict check.
  • Amounts such as 1e20, or results of large percentage increases, were silently cut by MySQL to the column maximum and reported as success; 1e400 failed with a raw JSON error. Amounts and results are now checked.
  • Stock quantities beyond the column range are refused instead of failing per product.
  • Negative values could be assigned to price and weight attributes with "Assign attribute value".
  • "Assign attribute value" could change price, special price and cost without the matching action permission, and design attributes without Magento's "Edit Product Design" permission. Both are now enforced (form, attribute details and submit).
  • The job page's progress request processed admin-only jobs (duplicate) for any admin with a mass action permission; it now requires that job's own action permission.

1.0.0

  • First release: 15 mass actions on the product grid (price, special price, cost, categories, websites, status, visibility, stock, attribute values, attribute set, product links, custom options, images, duplication, text).
  • Jobs processed immediately or in cron batches, job log with progress, per-product messages, cancel and undo.
  • ACL per action, settings, CLI commands softaware:mass-actions:process and softaware:mass-actions:jobs.

FAQ

Questions, answered

Something else on your mind? The developers who wrote the module answer before and after you buy.

Ask a question →

Already installed it? Open a support ticket

Where do the new actions appear?

On Catalog > Products: tick the products, open Actions and then More actions. Each action opens a short form in a pop-up. Magento's own actions (Delete, Change status, Update attributes) are not changed.

Which actions are included?

Fifteen: update price, special price and cost; add, remove or replace categories; add to or remove from websites; change status; change visibility; update stock; assign attribute value; change attribute set; related, up-sell and cross-sell links; copy custom options from a product; copy images from a product; duplicate products; append or replace text.

Can I see the result before I apply a change?

Yes, for update price, update special price, update cost and append or replace text. The Preview button shows the current and the new value for the first 10 selected products, or why a product would be skipped. Nothing is saved until you press Apply.

Can a change be undone?

Yes, for 12 of the 15 actions: everything except copying custom options, copying images and duplicating. The module keeps the values from before the job for every changed product, and Undo Job on the job page puts them back. Undo overwrites later changes to the same fields of those products; the job page lists later jobs that touched the same fields, and the confirmation names them. Undo data is kept as long as the job (60 days by default).

What happens with a large selection, for example 5,000 products?

Selections up to Run Immediately Up To (Products) (default 50) are updated straight away. Larger ones are queued and processed by cron in batches, in their own cron group so that other cron jobs are not held up. The job page shows the progress, and an interrupted job continues where it stopped.

Does it reindex and clear the cache?

Yes. Attribute changes go through Magento's own updateAttributes() (the same path as the native "Update attributes"), then the price, EAV, category, stock, flat, search and catalogue rule indexers are run for the changed products, or left to Magento when indexers are set to "Update by Schedule". The page cache is cleaned for those products.

How are store views and scopes handled?

Status, visibility and attribute values can be set for all store views or for one. Global attributes (for example the price with catalogue price scope "Global") are always written to all store views, and website-scope attributes apply to all store views of that website, as in Magento itself. You can also remove store-view values so the default value applies again.

Can I limit which admin users run which actions?

Yes. Every action has its own permission under Softaware > Mass Product Actions > Run Mass Actions, plus permissions for the job log, cancelling and deleting jobs, undo and the settings. The More actions menu only lists what the user may run. Assigning price attributes also needs the matching price permission, and design attributes need Magento's "Edit Product Design" permission.

Does it work with Multi-Source Inventory (MSI)?

Only with the default stock. Update stock changes the default stock quantity and status; quantities per source are not supported.

Does it work with Adobe Commerce?

Adobe Commerce content staging (scheduled updates with row versions) is not supported, so the module is meant for Magento Open Source 2.4.7 to 2.4.9.

Does it change anything on the storefront?

No. It only adds admin features. Products you change behave on Luma, Hyvä or any other theme exactly as if you had edited them in the product form.

Is there a command line?

Yes: bin/magento softaware:mass-actions:process processes queued jobs straight away (also one job with --job), and bin/magento softaware:mass-actions:jobs lists recent jobs.

Support

Help from the developers who wrote it

From the blog

Guides and articles