# NotifyMe: Magento 2 back in stock alerts

> Collect back-in-stock alert sign-ups on any product page and automatically email subscribers the moment stock returns.

---

## Overview

NotifyMe adds a "Notify Me" button to out-of-stock product pages, category listings, and wishlists. Customers and guests sign up for an alert; when you restock, NotifyMe's cron job queues and delivers personalised emails automatically - without you lifting a finger.

![NotifyMe overview - subscriber grid and notification button](images/overview.png)

This module helps you:

- Recover sales that would otherwise be lost when a product goes out of stock
- Build a warm re-engagement list of customers who already want to buy
- Throttle notification volume so one large restock doesn't flood your mail server
- Track which notifications convert to orders, with attribution via UTM parameters
- Stay GDPR-compliant with a built-in privacy checkbox and newsletter opt-in for guest sign-ups

---

## When to use this

Use NotifyMe when you want to:

- Capture demand for products that regularly go in and out of stock
- Re-engage customers automatically the moment a pre-order or restocked item is available
- Reduce "is this coming back?" support queries by giving customers a self-serve alert option
- Measure how many orders are driven by back-in-stock emails, not just traffic
- Offer category-page sign-ups so customers browsing a sold-out range don't leave empty-handed

---

## Key capabilities

- Back-in-stock button - injected automatically into product, category, and wishlist pages for all supported product types
- Configurable and bundle product support - variant-specific alerts so customers get notified for exactly the option they want
- Guest email verification - guests confirm their address before a subscription is saved, keeping your list clean
- Notify multiplier - caps how many emails go out per restock event (e.g. restock 20 units × multiplier 3 = up to 60 alerts)
- Message queue delivery - emails are processed via Magento's message queue for reliable, non-blocking sends
- Admin subscriber grid - view, filter, mass-send, and mass-delete subscriptions from a central grid
- Statistics page - see total alerts sent and how many converted to orders
- UTM tagging - every email link carries configurable UTM parameters so Google Analytics / GA4 attributes the revenue correctly
- GDPR & newsletter opt-in - optional checkboxes shown to guests at sign-up, remembered per email address once accepted
- Hyvä, Luma, and Porto theme support - dedicated Hyvä CSS module included; Luma and Porto work out of the box

---

## Installation

NotifyMe installs via Composer, then activates with a license key from your Moogento.com account. The whole flow takes about 5 minutes.

### Step 1: Get your Composer keys from Moogento.com

1. Sign in at **https://www.moogento.com** and open **My Plugins** in your account menu.
2. Find **NotifyMe** in the list of plugins you own.
3. Generate (or reveal) the Composer access keys for that plugin - a **public key** and a **private key**.
4. **Add your install domain to the key.** Each Composer key is tied to a specific domain - if you're installing on `yourstore.com`, add `yourstore.com` to the key's allowed domains. The Composer download will be rejected on any other domain.

If you run staging and production on different domains, add both - separate keys per environment are fine too.

### Step 2: Install the module with Composer

From your Magento 2 root directory:

```
composer require moogento/module-notifyme
```

When Composer asks for credentials, paste the **public key** as the username and the **private key** as the password. They'll be cached in `~/.composer/auth.json` for future runs.

### Step 3: Enable the module in Magento

```
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
```

Run `php bin/magento module:status Moogento_Notifyme` to confirm the module is listed as enabled.

### Step 4: Add your license key in the Moogento admin

1. Still on **https://www.moogento.com > My Plugins**, copy the **license key** for NotifyMe (separate from the Composer keys used above).
2. In your Magento admin, go to Stores > Configuration > Moogento > Licenses.
3. Find the row for **NotifyMe** and paste the license key.
4. Click **Save Config**, then run `php bin/magento cache:clean` once.

The license validates within a few seconds. If it stays inactive, double-check the domain on the license matches where you've installed - domain mismatch is the most common cause.

### Extra steps for NotifyMe

NotifyMe sends emails through Magento's message queue. After installation, make sure the queue consumer is running:

```
php bin/magento queue:consumers:start moo.notifyme.communication.product.alert.stock
```

For production, add this consumer to your `app/etc/env.php` cron consumers list or configure a dedicated cron entry so it restarts automatically.

---

## Setup overview

Most setup happens in:

Stores > Configuration > Moogento > NotifyMe

You'll mainly work with:

- **General** - enable the module, set email templates, configure the notify multiplier, and choose the email sender
- **Customize: Frontend** - button text, customer-facing messages, related products, and button colours
- **Setup: Google Analytics** - UTM parameters and conversion window

Navigate to the subscriber data via Moogento > NotifyMe, then use the hidden grid URLs listed under [Subscriber grid and statistics](#subscriber-grid-and-statistics) below.

---

## Common setups

### Turn on back-in-stock alerts for the first time

Enabling the module and pointing it at your email sender takes about two minutes.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > NotifyMe > General

   ![General configuration group](images/config-general.png)

2. Set:
   - **Enable** = Yes
   - **Email: Sender** = the store identity to send from (e.g. General Contact)
   - **Email template: Watched item back in stock (customer)** = NotifyMe: Product Back in Stock (or a custom template)
   - **Enable: On category pages** = Yes (default) - shows the button on category listings

3. Save Config.

4. Run `php bin/magento cache:clean`.

#### Notes

- Leave **Enable: Default Magento "Product Back in Stock" emails** = No (the default). If you enable it, Magento's built-in alert system will also send emails, resulting in duplicates.
- Make sure at least one cron job is running (`moo_notifyme_product_stock_alert` fires every minute). Check via Stores > Configuration > Advanced > System > Cron.

---

### Set the notify multiplier to protect your mail server

When a large restock arrives the multiplier controls how many subscribers get an alert. A multiplier of 3 on a restock of 20 units sends up to 60 emails - everyone on the list for that product, but proportional to actual stock.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > NotifyMe > General

2. Set:
   - **Restock qty: Notify multiplier** = `3` (default) - increase if you want to alert more subscribers per unit restocked, or lower it if you receive very large restocks and want to conserve sends.

3. Save Config.

#### Notes

- The multiplier applies at the website scope (not per store view).
- If you restock enough to cover every subscriber, all of them will be notified regardless of the multiplier - it only caps sends when stock is limited relative to demand.

---

### Add GDPR and newsletter opt-in for guest sign-ups

For stores that need a privacy consent tick-box - or that want to grow their newsletter list at the moment of alert sign-up - these checkboxes appear only for guests and only until each is accepted once.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > NotifyMe > Customize: Frontend > Add for Guests: GDPR & Newsletter Options

   ![GDPR and newsletter guest options](images/config-gdpr-newsletter.png)

2. Set:
   - **Enable: GDPR/Privacy checkbox** = Yes - guests must tick this before their first subscription is saved
   - **Label for: GDPR/privacy checkbox** = e.g. `I agree with the [Privacy Policy]` (use square brackets around the link text)
   - **Link to: GDPR/privacy policy** = `privacy-policy` (appended to your store URL)
   - **Enable: Newsletter checkbox** = Yes - shown to guests who are not yet subscribed

3. Save Config.

#### Notes

- Once a guest accepts the GDPR checkbox for one product, it is not shown again for that email address site-wide.
- The newsletter opt-in is only shown if the guest is not already subscribed to your Magento newsletter.
- These options only apply to guests. Registered customers are assumed to have already accepted your terms.

---

### Configure UTM tracking for back-in-stock emails

Add UTM parameters to every link in your back-in-stock alert emails so Google Analytics attributes revenue to the NotifyMe campaign.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > NotifyMe > Setup: Google Analytics

   ![Google Analytics UTM configuration](images/config-analytics.png)

2. Set:
   - **General: utm_source** = `notifyme` (default)
   - **Emailed: utm_medium** = `email` (default)
   - **Emailed: utm_campaign** = `NM emailed` (default, or your preferred campaign label)
   - **Conversion: Window** = `30` (days - how long after an email click a resulting order counts as a NotifyMe conversion)

3. Save Config.

#### Notes

- The `utm_source`, `utm_medium`, and `utm_campaign` values are appended to all product URLs inside notification emails.
- **Other** medium and campaign fields (`utm_medium_other`, `utm_campaign_other`) apply to non-email touchpoints such as the customer watchlist page - set these if you want to distinguish email-driven traffic from in-store page traffic.

---

## Features reference

### Subscriber grid and statistics

NotifyMe's subscriber management pages are ACL-protected but not listed in the top navigation menu. Access them directly:

- **Subscriptions grid**: Moogento > NotifyMe then navigate to `notifyme/watchlists/subs` - lists every active and historical subscription with product, email, sent count, and status
- **Watched products grid**: `notifyme/watchlists/products` - one row per product with aggregate watcher counts
- **Statistics page**: `notifyme/watchlists/stats` - total alerts sent and conversion counts

From the subscriptions grid you can:
- Filter by product, email, or status
- Mass-send alerts immediately (useful after a manual restock)
- Mass-delete stale or test subscriptions
- Export to CSV via `notifyme/csv/subsExport`

![Subscriptions grid](images/page-subscriptions-grid.png)

---

### Frontend customisation

Control every customer-facing string and colour from:

Stores > Configuration > Moogento > NotifyMe > Customize: Frontend

Key fields:

| Setting | Default | Config path |
|---|---|---|
| Button text | Notify Me | `moogento_notifyme/frontend/notifyme_button_title` |
| Label for customers (un-watched) | Get notified when this is back in stock | `moogento_notifyme/frontend/notifyme_button_label_customers` |
| Label for guests (un-watched) | Get notified when this is back in stock | `moogento_notifyme/frontend/notifyme_button_label_guests` |
| Message: after subscription | Done - we'll email you when this is back in stock | `moogento_notifyme/frontend/notifyme_success_message` |
| Message: guest pending confirm | To confirm your alert just click the link we emailed | `moogento_notifyme/frontend/guest_pending_confirm_message` |
| Message: already subscribed | On my Watch List | `moogento_notifyme/frontend/notifyme_already_subscribed_message` |
| Message: unsubscribed | Done - we'll no longer let you know when this product is back in stock | `moogento_notifyme/frontend/notifyme_canceled_message` |

Button colours are under Customize: NotifyMe Button Design:

- **Background color** - default `#86aa81` (`moogento_notifyme/moo/button_bkg_color`)
- **Text color** - default `#FFFFFF` (`moogento_notifyme/moo/button_text_color`)

---

### Related products in alert emails

When a product is out of stock, NotifyMe can display a configurable number of related products inside the alert email and on the product page widget.

- Go to Stores > Configuration > Moogento > NotifyMe > Customize: Frontend
- **Enable: RelatedProducts** = Yes (`moogento_notifyme/frontend/enable_related_products`)
- **Count Related Products** = `2` (default; `moogento_notifyme/frontend/count_related_products`) - how many related items to display

Use this to cross-sell while a product is unavailable.

---

### Email templates

NotifyMe ships two transactional email templates:

| Template | Purpose | Config field |
|---|---|---|
| NotifyMe: Product Back in Stock | Sent to subscribers when a product is restocked | `moogento_notifyme/general/watched_item_restocked_customer_email_template` |
| NotifyMe: Guest Email Verification | Confirmation link sent to guest subscribers before their address is saved | `moogento_notifyme/general/verify_guests_email_template` |

To customise a template: go to Marketing > Email Templates, click **Add New Template**, load the NotifyMe template as the base, then select your custom version in the config fields above.

Set templates per store view if you run a multi-language store - the email sender identity (`moogento_notifyme/general/email_sender`) can also be set per store view.

---

### Import from Magento's built-in product alerts

If you were previously using Magento's default product alert system, you can migrate those subscribers into NotifyMe with one click.

Go to Stores > Configuration > Moogento > NotifyMe > General and click **Import: Un-contacted customers from the default system**.

This imports only subscribers who have not yet been contacted in the native Magento system, so no one gets a duplicate alert. After the import, set **Enable: Default Magento "Product Back in Stock" emails** = No to disable the native system.

---

## Advanced configuration

### Cron jobs and message queue

NotifyMe's email delivery depends on two cron jobs and a Magento message queue consumer. If either is not running, alerts will queue up but not send.

| Cron job | Schedule | What it does |
|---|---|---|
| `moo_notifyme_product_stock_alert` | Every minute | Checks for restocked products and publishes alert messages to the queue |
| `moo_notifyme_check_orders` | Hourly | Updates conversion statistics (license-gated feature) |

The queue consumer `moo.notifyme.communication.product.alert.stock` processes up to 50 messages per run.

#### Setup

1. Verify Magento cron is running: `bin/magento cron:run --group=default`
2. Confirm the consumer is active: `bin/magento queue:consumers:list`
3. If the consumer is not listed as running, start it: `bin/magento queue:consumers:start moo.notifyme.communication.product.alert.stock`

For production environments, add the consumer to your process manager (e.g. Supervisor) so it restarts automatically.

#### Notes

- Logs are written to `var/log/moogento_notifyme.log`. Check this file first when investigating delivery issues.
- The message queue must be configured in `app/etc/env.php`. The default Magento database queue adapter works fine; RabbitMQ is supported for high-volume stores.

---

## Tips & best practices

- Start with the **notify multiplier at 3** and adjust after your first few restocks. Too low and many subscribers never hear from you; too high and you risk over-promising stock you don't have.
- **Customise button text** to match your brand voice - "Notify Me" works, but "Alert me when available" or "Join the waitlist" can lift sign-up rates on certain product types.
- **Set email templates per store view** if you operate multiple languages. Sending a French-language store alert in English is a common oversight that hurts conversion.
- **Run a test import** from the default Magento product alert system before going live, then immediately disable the native system to prevent duplicates.
- **Monitor `var/log/moogento_notifyme.log`** after each deployment that touches inventory or product data - this is the fastest way to spot a broken observer or queue consumer.
- **On Hyvä stores**, enable `Hyva_MoogentoNotifyme` after installing and run `php bin/magento setup:di:compile` and `php bin/magento cache:clean` before testing the button in the storefront.
- Use the **CSV exports** from the subscriptions grid to periodically back up your subscriber list or feed it into your email marketing platform.

---

## Troubleshooting

### Alerts are not being sent after a restock

Subscribers are signed up but no emails arrive when stock is replenished.

- **Cause:** The cron job or queue consumer is not running.
- **Check:** Look at `var/log/moogento_notifyme.log` for recent activity. Run `bin/magento cron:run --group=default` manually and watch for log output. Confirm the consumer is alive with `bin/magento queue:consumers:list`.
- **Resolution:** Start the consumer with `bin/magento queue:consumers:start moo.notifyme.communication.product.alert.stock`. For production, configure Supervisor or an equivalent process manager to keep it running.

---

### Guest subscribers do not receive their confirmation email

A guest enters their email to sign up, but the verification link never arrives.

- **Cause:** The guest verification email template is not selected, or Magento's SMTP transport is misconfigured.
- **Check:** Go to Stores > Configuration > Moogento > NotifyMe > General and confirm **Email template: Verify email address for guests** is set to *NotifyMe: Guest Email Verification*. Then verify Stores > Configuration > Advanced > System > Mail Sending Settings > SMTP host is correct.
- **Resolution:** Select the correct template and save. If SMTP is the problem, fix the transport settings and re-test with a fresh guest sign-up.

---

### The Notify Me button is not appearing on product pages

The button is missing on out-of-stock products despite the module being enabled.

- **Cause:** The module is disabled, the product type is not supported, or the full-page cache has not been flushed.
- **Check:** Confirm `moogento_notifyme/general/enable` = Yes. Confirm the product is genuinely out of stock (not just a display issue). Run `php bin/magento cache:clean`.
- **Resolution:** If the module was just installed or upgraded, run `php bin/magento setup:di:compile` followed by `php bin/magento cache:clean`.

---

### The Notify Me button is missing or unstyled on a Hyvä theme

The button appears in the wrong position, has no styling, or throws a compile error mentioning `NotifymeIcons`.

- **Cause:** The `Hyva_MoogentoNotifyme` compatibility module is not enabled or its CSS has not been compiled into the Tailwind build.
- **Check:** Run `php bin/magento module:status Hyva_MoogentoNotifyme`. Check the browser console for 404s on CSS files under `Moogento_Notifyme/`.
- **Resolution:** Enable the Hyva compatibility module, run `php bin/magento setup:di:compile` and `php bin/magento cache:clean`. For the `NotifymeIcons` compile error specifically, ensure the latest module code is deployed - the icon renderer no longer depends on `Hyva\Theme\ViewModel\SvgIcons`, so an older version in a cache or deployment artifact can cause this.

---

### Too many emails are being sent for a single restock

A restock of 10 units triggers far more alert emails than expected.

- **Cause:** The notify multiplier is set too high, or the default Magento product alert system is still enabled and sending separately.
- **Check:** Review `moogento_notifyme/general/notify_multiplier` and `moogento_notifyme/general/allow_stock`.
- **Resolution:** Lower the multiplier. Set **Enable: Default Magento "Product Back in Stock" emails** = No to stop the native system from sending a second wave.

---

## FAQs

<!-- seo: FAQPage schema - the page converter should emit JSON-LD for this section -->

## How do customers sign up for a back in stock alert?

When a product is out of stock, NotifyMe displays a "Notify Me" button directly on the product page. Customers click it; if they are logged in their email is captured instantly, while guests receive a confirmation email with a verification link before their subscription is saved. The button also appears on category listing pages and wishlists if those options are enabled.

## Does NotifyMe work with configurable and bundle products?

Yes - NotifyMe supports simple, configurable (including swatches), grouped, and bundle product types. For configurable products, the alert is tied to the specific variant the customer selects, so they are notified when that exact size, colour, or option comes back, not just the parent product.

## How do I see who has signed up for alerts?

Go to the subscriptions grid at `notifyme/watchlists/subs` in your admin. It lists every subscription with the customer or guest email, the product, how many emails have been sent, and the current status. You can filter, mass-send, mass-delete, or export the list to CSV.

## Why is the Notify Me button not showing on my product pages?

The most common reasons are that the module is disabled, the full-page cache has not been flushed, or `setup:di:compile` has not been run since installation. Go to Stores > Configuration > Moogento > NotifyMe > General, confirm **Enable** = Yes, then run `php bin/magento setup:di:compile` and `php bin/magento cache:clean`.

## Is NotifyMe compatible with Hyvä, Luma, and Porto themes?

Yes - NotifyMe works with all three. Luma and Porto are supported out of the box. For Hyvä, a dedicated companion module (`Hyva_MoogentoNotifyme`) is included; enable it and run `setup:di:compile` after installation to load the Tailwind component styles and correct button sizing.

## What happens to existing Magento product alert subscribers when I install NotifyMe?

Your existing Magento default product alert subscribers are preserved in the native tables. Use the **Import: Un-contacted customers from the default system** button in the General config to migrate them into NotifyMe. After importing, set **Enable: Default Magento "Product Back in Stock" emails** = No so only one system sends alerts.

## How does the notify multiplier work?

The notify multiplier controls how many alert emails are sent relative to the number of units restocked. If you restock 20 units and the multiplier is 3, NotifyMe will send up to 60 alerts. This prevents you from notifying more people than you can actually fulfil orders for. When you restock enough to cover every subscriber, everyone is notified regardless of the multiplier.

## Can I track which sales came from NotifyMe emails?

Yes - go to Stores > Configuration > Moogento > NotifyMe > Setup: Google Analytics and configure your UTM parameters. Every link inside a back-in-stock email will carry those parameters, so GA4 or Universal Analytics attributes the resulting session to the NotifyMe campaign. The statistics page at `notifyme/watchlists/stats` also shows total emails sent and orders converted within your configured conversion window.

## Does NotifyMe collect GDPR consent from guests?

Yes - when **Enable: GDPR/Privacy checkbox** is turned on, guest subscribers must tick a privacy acceptance checkbox before their first subscription is saved. The acceptance is remembered per email address site-wide, so the checkbox is not shown again once accepted. This option only applies to guests; registered customers are assumed to have accepted your terms.

## What happens if I disable NotifyMe?

Disabling the module (setting **Enable** = No) removes the Notify Me button from the storefront immediately after a cache flush. Existing subscription records are retained in the database and no emails are sent while it is disabled. Re-enabling the module restores the button and resumes normal cron-driven delivery.

---

## Related guides

- **AnalyticsEasyPro** - connects NotifyMe conversion events to GA4 via Measurement Protocol for accurate revenue attribution in your analytics account

---

## Need help?

- moo@moogento.com
- Include:
  - Magento version
  - Module name
  - What you're trying to do
