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.
Package info
github.com/byte8io/magento-stock-radar
Type:magento2-module
pkg:composer/byte8/module-stock-radar
Requires
- php: ~8.2.0||~8.3.0||~8.4.0||~8.5.0
- byte8/module-activation: ^1
- byte8/module-core: *
- magento/framework: *
- magento/module-backend: *
- magento/module-catalog: ^104
- magento/module-catalog-inventory: *
- magento/module-configurable-product: *
- magento/module-customer: *
- magento/module-email: *
- magento/module-graph-ql: *
- magento/module-store: *
- magento/module-ui: *
Suggests
- byte8/module-stock-radar-hyva: Hyva Theme storefront integration.
- byte8/module-stock-radar-plenty: Bridges Stock Radar with the PlentyONE connector so notifications fire on ERP-confirmed inbound stock.
- magento/module-captcha: Enables the CAPTCHA toggle under Byte8 → Stock Radar → Abuse protection.
- magento/module-inventory-sales-api: Stock Radar uses MSI's IsProductSalable for the in-stock check when this is available (default on Magento 2.4+). Falls back to legacy CatalogInventory when disabled.
This package is auto-updated.
Last update: 2026-05-21 13:04:36 UTC
README
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.
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
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
- Stock observer queues subscriptions into
byte8_stock_radar_dispatchwhenis_in_stockflips 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
- 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
mutation { byte8StockRadarSubscribe(input: { sku: "ABC-123", email: "x@y.com" }) { success message } } mutation { byte8StockRadarUnsubscribe(token: "...") { success } } query { byte8StockRadarSubscriptions { items { sku created_at status } } }
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
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
composer require byte8/module-stock-radar bin/magento module:enable Byte8_StockRadar bin/magento setup:upgrade bin/magento setup:di:compile
Cron
The dispatch worker runs every minute by default (byte8_stock_radar_dispatch). Make sure Magento's default cron group is active.
Support
Byte8 Ltd — support@byte8.io