Back In Stock

Back in stock and price drop alerts for Magento 2: guests and customers, per configurable option, double opt-in, MSI-aware batched sending, unsubscribe links, My account list, admin grid with CSV export and a Most Wanted Products report. Luma and Hyvä.

  • Version 1.2.3
$139

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

  • Back in stock alerts for guests and customers
  • Alerts per configurable option, such as size M
  • Optional price drop alerts
See all features

Composer package softaware/module-back-in-stock

  • Turn "out of stock" into a sale later

    Shoppers leave their email address instead of leaving empty-handed, and get one email with a link to the product when it can be bought again.

  • Know what to reorder

    Most Wanted Products lists the products and options with the most people waiting, with their stock now and a CSV export.

  • Careful with addresses

    Guests confirm their address first, every email has an unsubscribe link, and the form never reveals who has signed up.

All features

What is included

Storefront

  • Form on out-of-stock product pages
  • Out-of-stock options of configurable products
  • "Email me if the price drops" on in-stock products
  • Optional link or bell on category and search pages
  • My Stock Alerts in My Account, with Remove

Sending

  • Cron job every 5 minutes, in batches
  • Salable quantity with MSI, stock index without
  • Minimum quantity before sending
  • Maximum emails per run, oldest sign-ups first
  • Three email templates per store view

Privacy and spam protection

  • Guest double opt-in with single-use tokens
  • Unsubscribe page and one-click unsubscribe headers
  • Same answer for every guest sign-up
  • Honeypot, hourly limit and optional reCAPTCHA
  • Automatic clean-up of old alerts

Admin and developers

  • Alerts grid and Most Wanted Products report
  • Alert counts on the product edit page
  • Hides Magento's own alert links
  • CLI: run, preview emails, import Magento's alerts
  • Separate ACL permissions

Feature tour

Everything your shoppers and your team see

01 / 06

A simple form where the Add to Cart button was

Out-of-stock products show "Out of stock. We can email you when it is back." Guests enter an email address, signed-in customers sign up with one click.

02 / 06

Native Hyvä templates

Alpine.js and Tailwind templates for Hyvä, picked automatically. The page stays in the full-page cache on both themes.

03 / 06

Comfortable on small screens

The form uses the full width on phones, and the email field opens the email keyboard.

04 / 06

Every alert in one grid

Type, product, email, customer, store view and status, with keyword search, filters, mass delete and CSV export.

05 / 06

See what people are waiting for

Products and options with the most people waiting, unconfirmed sign-ups, price watchers, emails in the last 30 days and the stock now.

06 / 06

Sensible defaults, per store view

Guests, double opt-in, price drop alerts, category page links and a marketing consent box, each with its default named in the admin.

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 Back In Stock
Latest version 1.2.3 · 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-config * magento/module-configurable-product * magento/module-customer * magento/module-email * magento/module-store * magento/module-tax * magento/module-ui *

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-back-in-stock
  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 Back In Stock

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

Let shoppers ask for an email when an out-of-stock product, or one option of a configurable product, is back in stock, or when a price drops. Guests and signed-in customers can sign up. This guide covers installation, every setting, what shoppers see, the admin pages and the command line.

Out-of-stock product page with the alert form
Out-of-stock product page with the alert form

1. Requirements

MagentoOpen Source or Adobe Commerce 2.4.7 to 2.4.9
PHP8.2 to 8.5
ThemesLuma, Blank and themes based on them; Hyvä 1.4 and later (tested on 1.5)
Othersoftaware/module-core (installed automatically)
OptionalMSI (Inventory modules), Magento's reCAPTCHA modules

Without MSI, stock is read from Magento's stock index. With MSI, from the salable status and salable quantity of the website's stock. The MSI and reCAPTCHA integrations follow Magento's APIs but were not tested on a store with those modules installed.

2. Installation

Install with Composer from repo.softawarecommerce.com. Your access keys and the full set-up are described at https://softawarecommerce.com/shop/composer-access/.

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-back-in-stock
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

Magento's cron must be running, because the emails are sent by cron jobs. On Hyvä, run your usual Tailwind build after installing so the module's classes are included (the module registers itself for Hyvä's Tailwind source scanning).

No set-up is needed after installing: out-of-stock product pages show the form and the cron job sends the emails. To update later: composer update softaware/module-back-in-stock, then the same bin/magento commands.

3. Settings

Stores > Configuration > Softaware > Back in Stock Alerts (also Softaware > Back in Stock Alerts > Settings).

General settings
General settings

General (store view)

SettingDefaultWhat it does
EnabledYesShows the form on out-of-stock product pages and sends the alerts. When No, nothing is shown or sent for this scope.
Replace Magento's Own AlertsYesHides Magento's "Notify me when this product is in stock / the price drops" links. Their data is not deleted.
Guests Can Sign UpYesGuests enter an email address. Signed-in customers always sign up with one click.
Guests Confirm by EmailYesGuests get a confirmation link first; unconfirmed sign-ups are never used. Recommended.
Price Drop AlertsNoShows "Email me if the price drops" on in-stock products.
Show on Category and Search PagesNoAdds a link (Luma) or bell button (Hyvä) to out-of-stock products in lists, opening the product page at the form. Only useful when Catalog > Inventory > Display Out of Stock Products is Yes.
Marketing Consent BoxemptyWhen filled in, an unticked box with this text is shown on the form. The answer is stored with the alert and shown in the grid and export. Nothing else is done with it.

Emails (store view)

SettingDefault
Email SenderGeneral Contact
Back in Stock Emailthe module's template
Price Drop Emailthe module's template (shown when Price Drop Alerts is Yes)
Confirmation Email (Guests)the module's template (shown when guests confirm by email)

To change the wording, create a template from the module's template under Marketing > Email Templates and select it here. The product box in the emails (image, name, option, price, link) is the template Softaware_BackInStock::email/product.phtml, which a theme can override.

Sending and Clean-up

SettingDefaultScopeWhat it does
Send When Quantity Reaches1websiteWaits until this many units can be sold (for products that track quantity without backorders).
Emails per Run100globalMaximum alert emails per cron run, oldest sign-ups first.
Delete Unconfirmed Sign-ups After (Days)7globalUnconfirmed guest sign-ups are deleted after this.
Delete Sent and Stopped Alerts After (Days)365global0 keeps them.

Spam Protection (website)

SettingDefaultWhat it does
Sign-ups per Hour per Visitor10Limit per IP address and session for guests.
Google reCAPTCHA on the Alert FormNoUses the reCAPTCHA keys of Magento's reCAPTCHA modules.

4. What shoppers see

Out-of-stock products. Below the price, the product page shows "Out of stock. We can email you when it is back." Guests enter their email address and click Email me when it is back. Signed-in customers see one button; the alert goes to their account address.

HyväMobile
Hyvä product pageMobile product page

Configurable products. The form lists the options that are out of stock (for example "M, Blue"), also when the product itself is still in stock: "Option out of stock? We can email you when it is back." The shopper picks the option in the form.

Guest confirmation. With double opt-in, the guest sees a message that a confirmation link is on its way. The confirmation email is sent by cron within a minute. The link opens a page with a Confirm alert button.

Message after a guest sign-up
Message after a guest sign-up

Price drops. With price drop alerts on, in-stock products (simple, virtual, downloadable, configurable and bundle) show Email me if the price drops. The price at sign-up is the final price for the shopper's customer group and website from Magento's price index, so special prices and catalogue price rules count. For configurable and bundle products the "as low as" price is compared.

The alert email. When the product can be bought again, or the price falls below the price at sign-up, the shopper gets one email with the product image, name, chosen option, price (old and new for price drops) and a link to the product. The alert then ends.

Unsubscribe. Every alert email has an unsubscribe link and one-click unsubscribe headers (RFC 8058, Magento 2.4.8 and later). The page offers Stop this alert and Stop all alerts for the address, and Switch alerts back on. This list is separate from the newsletter and from other modules.

My Account > My Stock Alerts. Signed-in customers see their waiting alerts (with Remove) and the ones already emailed.

5. Admin pages

Alerts

Softaware > Back in Stock Alerts > Alerts lists every sign-up: ID, type (Back in stock or Price drop), product (linked, with SKU and option SKU), email, customer, store view, status, created and sent. Hidden columns: consent, confirmed, price at sign-up, source and note.

Alerts grid
Alerts grid
  • Statuses: Not confirmed yet, Waiting, Sent, Stopped, Failed.
  • Keyword search by email address, SKU or product name; filters on every column.
  • Mass delete and CSV or Excel XML export.

Most Wanted Products

Softaware > Back in Stock Alerts > Most Wanted Products shows the products and options with the most people waiting, to help decide what to reorder: waiting for stock, not confirmed yet, waiting for a lower price, emailed in the last 30 days, waiting since and stock now. The "Waiting for Stock" number opens the alerts for that product. The report can be exported as CSV.

Most Wanted Products
Most Wanted Products

Product edit page

Each product has a Back in Stock Alerts (N waiting) section with the counts for the product and its options, and links to its alerts and to Most Wanted Products.

6. Cron jobs

JobScheduleWhat it does
softaware_back_in_stock_confirmevery minuteSends guest confirmation emails.
softaware_back_in_stock_processevery 5 minutesChecks stock and prices of products with waiting alerts and sends the alert emails.
softaware_back_in_stock_cleanupdailyDeletes unconfirmed and old alerts.

Stock and prices are read from Magento's indexes. With indexers on "Update by Schedule", an alert is sent once the index has been updated, which is also when the storefront shows the product as in stock. Emails are only sent for products that are enabled and visible on the alert's website.

7. Command line

bin/magento softaware:back-in-stock:run [--limit=N] [--cleanup]
bin/magento softaware:back-in-stock:preview <alert id> [--email=stock|price|confirm] [-o file.html]
bin/magento softaware:back-in-stock:import-native [--type=stock|price|all] [--dry-run]
  • run does what the cron jobs do, now. --cleanup also deletes unconfirmed and old alerts.
  • preview renders an email for an existing alert without sending it or changing anything.
  • import-native copies Magento's own alerts of existing customers (unsent stock alerts and price alerts) into this module. Alerts that exist already are skipped, so it can be run twice. Magento's tables are not changed.

8. Permissions (ACL)

Under System > Permissions > User Roles > Role Resources > Softaware > Back in Stock Alerts:

ResourceAllows
View AlertsThe Alerts grid and export
Delete AlertsDeleting alerts in the grid
Most Wanted ProductsThe report and its export
SettingsThe configuration section

9. Privacy

  • An alert stores the email address, product, option, store view, customer (if signed in), status, dates, price at sign-up for price alerts and the consent answer.
  • IP addresses are only stored as a keyed hash, for the hourly limit.
  • Customer alerts are deleted with the customer account; unconfirmed and old alerts are deleted by the clean-up job.
  • Confirmation tokens are random, stored only as a hash, work once and expire. Unsubscribe links are signed.
  • Customers can only see and remove their own alerts.

10. Troubleshooting

ProblemSolution
The form does not appearCheck General > Enabled for the store view and that the product is out of stock (or, for configurable products, that an option is). Flush the cache.
No emails are sentCheck that Magento's cron runs and that the stock index is up to date. Run bin/magento softaware:back-in-stock:run to send now. Check Send When Quantity Reaches.
Guest alerts stay "Not confirmed yet"The guest has not clicked Confirm alert in the confirmation email. Check that the confirmation cron job runs and that your store can send email.
Magento's own "Notify me" links still showSet Replace Magento's Own Alerts to Yes and flush the cache.
The category page link does not showSwitch on Show on Category and Search Pages and set Display Out of Stock Products to Yes.
An email looks wrongRender it with bin/magento softaware:back-in-stock:preview <alert id> -o preview.html.

11. Uninstall

bin/magento module:disable Softaware_BackInStock
composer remove softaware/module-back-in-stock
bin/magento setup:upgrade

The tables softaware_back_in_stock_alert and softaware_back_in_stock_unsubscribe keep their data until you drop them. Magento's own product alerts were never changed, so they work again as before once the module is removed.

Changelog

Release notes

1.2.3

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

1.2.2

Fixed

  • README: the module requires softaware/module-core ^1.0 (the README said ^1.2; composer.json was right).

1.2.1

  • Alerts grid export (CSV/Excel XML): the Store View column holds the store view name the grid shows ("Default Store View") instead of "Main Website Main Website Store Default Store View". The column uses a flat list of store views; the website is added only when two store views share a name.

1.2.0

  • Alerts grid: keyword search by email address, SKU or product name. The grid can be opened with a search (?search=<SKU>), used by the new links below.
  • Most Wanted Products: the "Waiting for Stock" number links to the alerts of that product or option.
  • Product edit page: "View the Alerts for This Product" link in the Back in Stock Alerts section.
  • Admin UI review. Alerts grid: status shown as colour-coded Magento status badges (Failed stands out), a one-line introduction, header button renamed to "Settings", and a short explanation with an "Open Settings" button instead of an empty table when there are no alerts yet.
  • Most Wanted Products: All Alerts and Export CSV moved to the page actions bar; an explanation replaces the plain notice when nobody is waiting; SKUs and numbers no longer break across lines; stock badge and quantity aligned.
  • Product edit page: the counts are shown as a small table, or one sentence when nobody has signed up.
  • Settings: General opens first; every field names its default; email template comments explain how to change the wording (instead of Magento's generic text); the Price Drop Email is only shown when Price Drop Alerts is on and the Confirmation Email only when guests confirm by email; "(Days)" in title case; menu item and ACL resource renamed "Settings".
  • Admin styles moved to one small file (view/adminhtml/web/css/admin.css, was report.css).

1.1.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.0.0

  • Back in stock alerts for guests and signed-in customers on out-of-stock product pages, per option for configurable products. Luma and Hyvä templates; full-page cache safe.
  • Price drop alerts (off by default), based on the final price for the shopper's customer group and website.
  • Guest double opt-in with a confirmation email; unconfirmed sign-ups are ignored and deleted after a set number of days.
  • Optional marketing consent box, stored with the alert.
  • Optional link to the alert form for out-of-stock products on category and search pages.
  • Cron sending in batches, MSI-aware (salable quantity per website stock) and working without MSI, with a minimum quantity and a maximum number of emails per run.
  • Three email templates per store view (back in stock, price drop, confirmation) with product image, name, option, price and link; unsubscribe link and RFC 8058 one-click unsubscribe headers.
  • Unsubscribe page: stop one alert, stop all alerts, or switch them back on.
  • My account > My Stock Alerts with Remove.
  • Admin: Alerts grid (filters, mass delete, CSV export), Most Wanted Products report (CSV export), alert counts on the product edit page.
  • Magento's own "Notify me" links are hidden while "Replace Magento's Own Alerts" is Yes.
  • CLI: softaware:back-in-stock:run, softaware:back-in-stock:preview, softaware:back-in-stock:import-native.
  • Sign-up endpoint: POST with form key, address validation, honeypot, hourly limit per IP address and session, optional reCAPTCHA, identical answers for guests (no email enumeration), confirmation emails sent by cron.
  • At most 5 confirmation emails per address per day.
  • Hashed, single-use, expiring confirmation tokens; HMAC-signed unsubscribe links; no-referrer and no-store on the pages that carry them.

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

How is this different from Magento's own product alerts?

Magento's alerts work for signed-in customers only and have no reporting. This module lets guests sign up too (with email confirmation), handles each option of a configurable product separately, has a Most Wanted Products report, an admin grid with CSV export, an unsubscribe page and a My Stock Alerts page in the customer account. While "Replace Magento's Own Alerts" is Yes, Magento's "Notify me" links are hidden. Magento's tables are not changed.

Can guests sign up, or only customers?

Both. Guests enter an email address; signed-in customers sign up with one click and the alert goes to their account address. You can switch guest sign-ups off with Guests Can Sign Up = No.

Do guests have to confirm their address?

By default, yes: Guests Confirm by Email sends a confirmation email first, and only confirmed sign-ups get alerts. The link opens a page with a "Confirm alert" button, because mail scanners open links on their own. Unconfirmed sign-ups are deleted after 7 days (configurable).

Does it work with configurable products?

Yes. The form lists the options that are out of stock (for example "M, Blue"), also when other options of the product are still in stock. The shopper picks the option in the form; it does not follow the swatches clicked on the page. Bundle and grouped products get one alert for the whole product.

How do price drop alerts work?

They are off by default. When switched on, in-stock products show "Email me if the price drops". The module stores the final price for the shopper's customer group and website from Magento's price index at sign-up, so special prices and catalogue price rules count. The email is sent when that price falls below the stored price.

When are the emails sent?

A cron job runs every 5 minutes. It checks the products that have waiting alerts and sends at most "Emails per Run" emails (100 by default), oldest sign-ups first. With Send When Quantity Reaches you can wait until a given number of units can be sold. Each alert sends one email and then ends; a shopper who wants another one signs up again.

Does it support MSI (Multi-Source Inventory)?

The code checks stock through MSI when its modules are installed (salable status and salable quantity of the website's stock) and through Magento's stock index when they are not. Our tests ran on a store without MSI; the MSI path follows Magento's MSI interfaces but has not been tested on a store with MSI installed.

Does it work with Hyvä?

Yes. Hyvä templates are included (Hyvä 1.4 and later, tested on 1.5): product page form, category list button, confirmation and unsubscribe pages, and My Stock Alerts. Luma and themes based on it use the Luma templates.

Does it slow down product pages or break the full-page cache?

No. The product page HTML is the same for every visitor and stays in the full-page cache. Whether the shopper is signed in comes from Magento's customer data (Luma) or Hyvä's private content in the browser. Stock checks and emails run in cron, not during page requests.

How are spam and abuse handled?

The sign-up form is POST only with a form key, checks the address, has a hidden honeypot field and an hourly limit per visitor (10 by default). One address gets at most 5 confirmation emails a day. Google reCAPTCHA can be switched on through Magento's reCAPTCHA modules; this option follows Magento's reCAPTCHA API but was not tested on our dev store.

Can someone find out whether an address has signed up?

No. Guests always get the same answer, whether the address is new, already waiting or has stopped all alerts, and confirmation emails are sent by cron, so the response time gives nothing away either.

How do shoppers unsubscribe?

Every alert email has an unsubscribe link and one-click unsubscribe headers (List-Unsubscribe, RFC 8058, on Magento 2.4.8 and later). The page lets the shopper stop that alert, or all stock and price alerts for the address, and switch them back on later.

Can I move Magento's existing alerts into the module?

Yes, with bin/magento softaware:back-in-stock:import-native. It copies customers' unsent stock alerts and their price alerts, skips alerts that exist already and does not change Magento's tables. Use --dry-run to count first.

Which Magento and PHP versions are supported?

Magento Open Source and Adobe Commerce 2.4.7 to 2.4.9, PHP 8.2 to 8.5.

Support

Help from the developers who wrote it

From the blog

Guides and articles