PHPackages                             byte8/module-stock-radar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. byte8/module-stock-radar

ActiveMagento2-module[HTTP &amp; Networking](/categories/http)

byte8/module-stock-radar
========================

Stock Radar for Magento 2 — back-in-stock notifications with throttled batching, per-variant subscriptions, demand heatmap, GraphQL. Luma compatible; Hyva via byte8/module-stock-radar-hyva.

1.1.0(2mo ago)01[1 PRs](https://github.com/byte8io/magento-stock-radar/pulls)1MITPHPPHP ~8.2.0||~8.3.0||~8.4.0||~8.5.0CI passing

Since May 18Pushed 1mo agoCompare

[ Source](https://github.com/byte8io/magento-stock-radar)[ Packagist](https://packagist.org/packages/byte8/module-stock-radar)[ RSS](/packages/byte8-module-stock-radar/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (2)Dependencies (12)Versions (5)Used By (1)

Stock Radar for Magento 2
=========================

[](#stock-radar-for-magento-2)

Back-in-stock notifications that scale. Customers subscribe to out-of-stock products and get notified when inventory returns — but unlike most "notify me" extensions, Stock Radar is built for stores that move real volume.

Ships **Luma** support out of the box and a full GraphQL surface for headless storefronts. Hyvä support lives in the companion module [`byte8/module-stock-radar-hyva`](https://github.com/byte8io/magento-stock-radar-hyva).

Why another back-in-stock module
--------------------------------

[](#why-another-back-in-stock-module)

Most free competitors blast all subscribers in one go and forget about the merchandiser. Stock Radar fixes both ends:

- **Throttled batched notifications** — when 800 people subscribed to a sold-out hero SKU, dispatch is staggered over a configurable window (default 30 min) so a single restock event doesn't crash inventory or your mail provider.
- **Per-variant subscriptions on configurables** — subscribe to "Red, M" specifically, not just the parent.
- **Demand heatmap in admin** — sortable grid of products with the most pending subscriptions, so reorder decisions are data-driven.
- **GraphQL surface** — Hyvä, headless, and PWA Studio out of the box (REST adapter not shipped — file an issue if you need it).
- **GDPR-first** — guest subscribers stored with hashed email + unsubscribe token; data subject deletion lookups are O(1) by `email_hash`.
- **Admin alert on high-demand SKUs** — when pending subscriber count for a single product first crosses a configurable threshold, a message appears in the Magento admin notification inbox (bell icon top-right).

Features
--------

[](#features)

### Subscription

[](#subscription)

- "Notify me" button on out-of-stock product pages (Luma block + GraphQL mutation `byte8StockRadarSubscribe`; Hyvä via companion module)
- Customer + guest support
- Per-variant subscriptions for configurable products
- One-click unsubscribe via signed token
- Per-store email/storefront templates

### Dispatch

[](#dispatch)

- Stock observer queues subscriptions into `byte8_stock_radar_dispatch` when `is_in_stock` flips from 0 to 1
- Cron worker drains the queue with a configurable throttle window
- Failed sends retried with exponential backoff (max 3 attempts)
- Skips subscriptions older than the configurable expiry (default 90 days)

### Admin

[](#admin)

- Subscription grid (`Byte8 → Stock Radar → Subscriptions`)
- Demand heatmap (`Byte8 → Stock Radar → Demand`) — products ranked by pending subscriber count
- Per-store config (`Stores → Configuration → Byte8 → Stock Radar`):
    - enable/disable
    - throttle window (minutes)
    - subscription expiry (days)
    - email sender / template
    - admin-alert threshold (post a message in the admin notification inbox when subscriber count for a single SKU first crosses N — see `docs/advanced/admin-alerts.md`)
    - five admin-toggleable abuse-protection switches (rate limit, honeypot, hide-created-flag, CAPTCHA, double opt-in) — see `docs/configuration/general.md`

### GraphQL

[](#graphql)

```
mutation { byte8StockRadarSubscribe(input: { sku: "ABC-123", email: "x@y.com" }) { success message } }
mutation { byte8StockRadarUnsubscribe(token: "...") { success } }
query   { byte8StockRadarSubscriptions { items { sku created_at status } } }
```

Database
--------

[](#database)

Two tables:

- `byte8_stock_radar_subscription` — one row per (product, email, store)
- `byte8_stock_radar_dispatch` — staggered send queue, drained by cron

See `etc/db_schema.xml` for the full schema.

Optional companion modules
--------------------------

[](#optional-companion-modules)

- **`byte8/module-stock-radar-hyva`** — Hyvä storefront integration.
- **`byte8/module-stock-radar-plenty`** — bridges Stock Radar with the Byte8 PlentyONE connector so notifications fire on ERP-confirmed inbound stock, not just Magento stock saves.

Installation
------------

[](#installation)

```
composer require byte8/module-stock-radar
bin/magento module:enable Byte8_StockRadar
bin/magento setup:upgrade
bin/magento setup:di:compile
```

Cron
----

[](#cron)

The dispatch worker runs every minute by default (`byte8_stock_radar_dispatch`). Make sure Magento's `default` cron group is active.

Support
-------

[](#support)

Byte8 Ltd —

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance89

Actively maintained with recent releases

Popularity1

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

64d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/612c19aab21c48e9c7d11d11eab8863b9473743c6ab7335aeb5a1424129b46cc?d=identicon)[softcom](/maintainers/softcom)

---

Top Contributors

[![softcommerceltd](https://avatars.githubusercontent.com/u/6104757?v=4)](https://github.com/softcommerceltd "softcommerceltd (18 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (2 commits)")

### Embed Badge

![Health badge](/badges/byte8-module-stock-radar/health.svg)

```
[![Health](https://phpackages.com/badges/byte8-module-stock-radar/health.svg)](https://phpackages.com/packages/byte8-module-stock-radar)
```

###  Alternatives

[buckaroo/magento2

Buckaroo Magento 2 extension

32420.3k8](/packages/buckaroo-magento2)[mollie/magento2

Mollie Payment Module for Magento 2

1131.9M16](/packages/mollie-magento2)[dotdigital/dotdigital-magento2-extension

Dotdigital for Magento 2

50398.5k20](/packages/dotdigital-dotdigital-magento2-extension)[opengento/module-category-import-export

This module add the capability to import and export the categories from the back-office.

1310.9k2](/packages/opengento-module-category-import-export)[loki/magento2-components

Core module for defining Alpine.js components with advanced AJAX features

1011.8k26](/packages/loki-magento2-components)[mage-os/module-inventory-reservations-grid

Add a grid with the list of inventory reservations.

1615.9k](/packages/mage-os-module-inventory-reservations-grid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
