DataFirefly Waitlist — Documentation
Installation, configuration, combinations, cron, conversion tracking and troubleshooting for the back-in-stock alert module for PrestaShop 8 and 9.
Overview
DataFirefly Waitlist adds a back-in-stock alert to your PrestaShop 8 or 9 store. As soon as a product — or a specific combination — drops below the configured stock threshold, a “Notify me when back in stock” button appears automatically on the product page. The visitor leaves their email and receives an alert as soon as you restock. Every order placed afterwards by a notified subscriber is attributed as a conversion in the dashboard.
Installation
- In the back office, go to Modules → Module Manager → Upload a module.
- Upload the
dfwaitlist-x.x.x.zipfile. - Click Install. The module creates the
df_dfwaitlist_subscribertable, registers its hooks and adds its admin tab. - Open the configuration to set the merchant email and copy the cron URL.
No external dependency. PHP 7.4 minimum, compatible up to PHP 8.3. Source code unencrypted.
Configuration
Go to Modules → DataFirefly Waitlist → Configure. Available settings:
- Double opt-in — when active, subscribing first sends a confirmation email. Until the visitor clicks, the subscription stays unconfirmed and will not trigger any alert. Can be disabled if you prefer instant subscription.
- Stock threshold — the quantity below which a product is considered unavailable and shows the button.
- Merchant alert threshold — the number of subscribers on a single product above which you receive a notification email. 10 by default.
- Merchant email — recipient of the alert above.
- Subscription lifetime — subscriptions that were never notified are purged automatically beyond N days. 90 by default.
- Button label — customizable per language.
- GDPR notice — text displayed below the form, customizable per language.
- Cron URL — token-secured, regenerable with one click from the back office.
How it works on the customer side
Button appearance
The button is injected via the displayProductActions hook and its visibility is decided client-side. The module queries the /modules/dfwaitlist/stockcheck endpoint to get the real stock state of the displayed combination — which makes it independent of the theme’s AJAX re-render behaviour. The result: the button disappears if the selected variant is available, and reappears otherwise, with no page reload.
Combinations
Subscription is stored per (product, combination) pair. The form explicitly shows the variant concerned, for example “Variant: Red / Size L”. When the visitor switches combination before submitting, the target switches automatically. The alert email mentions the exact combination and links to the product page with the variant pre-selected: no possible confusion between one size and another.
Confirmation (double opt-in)
With double opt-in active, the subscriber receives an email containing a tokenized confirmation link. The subscription only counts after the click. This guarantees list quality (no bogus emails) and provides explicit proof of consent.
Back-in-stock alert
On restock, the subscriber receives a responsive HTML email with the product name, the combination concerned and a direct link to the page. Every email contains a one-click unsubscribe link.
Restock detection
Two complementary channels, best left both active:
- Hook
actionUpdateQuantity— real time. As soon as an employee changes stock in the back office, or a cancelled order releases stock, the emails go out immediately. - Safety-net cron — token-secured. It catches stock movements that bypass the hooks: API imports, ERP synchronization, CLI scripts, updates through the PrestaShop Webservice.
Setting up the cron
Copy the URL shown in the module configuration (it contains the security token) and wire it to an hourly call:
0 * * * * curl -s "https://your-store.com/module/dfwaitlist/cron?token=YOUR_TOKEN" > /dev/null 2>&1
If you suspect the token leaked, regenerate it with one click from the configuration — the old URL stops working immediately. Remember to update your crontab after regenerating.
Conversion tracking
On the actionValidateOrder hook, the module compares every order line against subscriptions in “notified” status. The match is made on the triple (email, id_product, id_product_attribute). On match, the subscription is marked converted and the id_order is recorded.
Since tracking is based on the email rather than the customer account, it works for guest orders just as well as for logged-in customers.
Admin dashboard
- 6 KPIs — subscribers, awaiting confirmation, notified, purchases, conversion rate, unsubscribed.
- Products with demand — sortable and paginated. This is your restocking priority list: a product with 47 subscribers is 47 near-certain sales if you restock quickly.
- Per-product detail view — each subscriber with their individual status.
- CSV export — full export for the active shop: email, product, combination, statuses (confirmed, notified, purchased, unsubscribed), dates, IP, order id on conversion. The file includes a UTF-8 BOM so it opens directly in Excel without encoding damage.
Merchant alert
When an out-of-stock product reaches the configured subscriber threshold, an automatic email notifies you with the number of people waiting and a link to the dashboard. The email is sent only once per product, to avoid noise. This is the signal that turns your waitlist into a restocking tool: you prioritize on measured demand rather than intuition.
Emails
Three templates, each shipped in FR/EN/ES/DE in responsive HTML + plain text:
- Confirmation — sent only if double opt-in is active, with the activation link.
- Back-in-stock alert — product, combination, direct link to the page, unsubscribe link.
- Merchant alert — number of waiting subscribers and a link to the dashboard.
Templates can be edited in modules/dfwaitlist/mails/<iso>/.
GDPR and list quality
- Double opt-in can be enabled, with proof of consent (the IP is recorded at subscribe time).
- One-click unsubscribe in every alert email, via a unique token distinct from the confirmation token. The subscription is marked unsubscribed rather than deleted, to preserve traceability, and no future email goes out.
- Automatic purge of never-notified subscriptions beyond the configured lifetime (90 days by default) — data minimization.
- Built-in anti-bot honeypot on the form, and a one-email-per-product limit to prevent burst subscriptions.
- No external calls: data stays in the PrestaShop database, scoped per shop. Nothing is sent to DataFirefly or any third-party service.
Multi-shop and multilingual
The subscriptions table carries the id_shop and id_lang columns. Each sub-shop in a multi-shop network therefore has its own waitlist, its own merchant alerts and its own KPIs. Emails go out in the subscriber’s language at subscribe time.
Troubleshooting
The button does not appear
- Check that the product is genuinely below the configured stock threshold — above it, the button is hidden by design.
- On a product with combinations, check the selected variant: the button only shows if that variant is unavailable.
- The theme must implement the
displayProductActionshook. Classic and Hummingbird do; on an unusual custom theme, verify it is present in the product template. - Clear the PrestaShop cache (Advanced Parameters → Performance).
Alerts do not go out on restock
- Check that the subscription is confirmed: with double opt-in, an unconfirmed subscription never receives an alert.
- If stock was changed outside the back office (API, ERP, CLI), the real-time hook does not fire — the cron takes over. Verify it is running and that the URL token is current.
- Test PrestaShop email delivery in general (Advanced Parameters → E-mail → Test).
Some conversions are not counted
The match requires the email and the product and the combination. If the customer orders with a different email address than the one they subscribed with, or buys a different combination than the one they were waiting for, the conversion is not attributed — this is deliberate, to avoid false positives that would distort your KPIs.
Uninstalling
Uninstalling drops the df_dfwaitlist_subscriber table and all configuration keys prefixed DFWAITLIST_. Nothing is left in the database. A confirmation is requested, since subscriptions and conversion statistics will be permanently lost — export the CSV beforehand if you want to keep the history.