Multi-Step Abandoned Cart Recovery — Full Guide
Install, configure and run abandoned cart recovery: automatic detection, multi-step email sequences, escalating vouchers, one-click cart restoration, tracking and recovery analytics for PrestaShop 8 and 9.
Overview
The Multi-Step Abandoned Cart Recovery module (datafireflycartrecovery) automatically detects abandoned carts and re-engages your customers through a sequence of scheduled emails. Each step has its own delay, its per-language content and an optional voucher whose incentive can escalate over time. A signed link lets the customer restore their cart in one click, and a dashboard measures the revenue you actually recover.
On average, nearly 7 out of 10 carts are abandoned before checkout. A well-tuned recovery sequence (a plain reminder, then a moderate discount, then a stronger offer with free shipping) recovers a significant share of that revenue with no manual effort.
Compatibility
- PrestaShop 8.0 to 9.x
- PHP 8.1 to 8.3
- Single-store and multistore (campaigns and statistics segmented per store)
- 5 languages: FR, EN, ES, DE, IT
- PSR-4 architecture without Composer, one class per file, no external dependency
Installation
- In the back office, open Modules > Module Manager.
- Click Upload a module and select the
datafireflycartrecovery.zipfile. - Once installed, click Configure.
On installation, the module creates its tables (tracked carts, send queue, events, suppression list), registers its hooks, adds a Cart Recovery tab in the Customers menu, and seeds a ready-to-use default three-step campaign: +1 h (plain reminder, no voucher), +24 h (−5% voucher) and +72 h (−10% voucher + free shipping).
CRON configuration
The module relies on two scheduled tasks, run by a single token-secured URL: the scan (marks inactive carts as abandoned and schedules the steps) and the processing (sends due emails while respecting the safeguards). The exact URL, with its token, is shown on the module configuration page.
https://YOUR-STORE/index.php?fc=module&module=datafireflycartrecovery&controller=cron&token=THE_TOKEN
Schedule a task roughly every 15 minutes, for example:
*/15 * * * * wget -q -O /dev/null "https://YOUR-STORE/index.php?fc=module&module=datafireflycartrecovery&controller=cron&token=THE_TOKEN"
Without an active cron task, no cart will be marked as abandoned and no reminder will be sent. The token protects the URL against unauthorised calls: do not share it publicly. If you regenerate it, remember to update your cron line.
General settings
From the configuration page, adjust the global behaviour of detection and sending:
- Abandonment delay (60 min by default): the inactivity period after which a cart is considered abandoned.
- Batch size (50 by default): the number of emails processed on each cron pass, to smooth server and SMTP load.
- Maximum emails per cart (3 by default): the cap on emails sent for a single cart, across all steps.
- Tracking lifetime (30 days by default): beyond this, an unconverted cart stops being re-engaged and is archived.
- Automatic re-login (enabled by default): re-logs the customer in when they click the restore link (see below).
- Sender: the email address and name used to send. Leave blank to use the store address and name.
Campaigns and sequences
Campaign settings
A campaign groups a sequence of steps and its targeting rules:
- Minimum cart value: only re-engage carts above a threshold (0 = no minimum).
- Sending window: a time range (e.g. 8 a.m.–9 p.m.) outside of which due emails are postponed, to avoid night-time sends. The window handles crossing midnight.
- Anti-repeat cooldown: the minimum delay between two sequences for the same customer, to avoid over-soliciting them.
- Target guests: includes or excludes guest checkouts (carts without a customer account).
- Exclude B2B accounts: excludes customers whose company, SIRET or VAT number is filled in.
Sequence steps
Each step defines when and what to send:
- Position: the step’s order in the sequence.
- Delay after abandonment (in minutes): e.g. 60 = 1 h, 1440 = 24 h, 4320 = 72 h.
- Subject and HTML body per language: the marketing content, translatable for each active language.
- Step active: lets you enable or pause a step without deleting it.
The HTML content you enter is inserted into a responsive email template provided in five languages: the header, the call-to-action button, the cart summary table, the voucher block and the footer (including the unsubscribe link) are added automatically. Three variables are available in your text: {firstname}, {shop_name} and {voucher_code}.
Vouchers
Each step can generate a personalised voucher, created on the fly for the specific customer:
- Type: percentage or fixed amount.
- Value and minimum spend.
- Validity in days.
- Free shipping (combinable with the discount).
- Tax included or excluded.
Vouchers are personalised, single-use and time-limited: they cannot be shared or reused. A good practice is to offer no discount at the first step (a plain reminder) and then escalate gradually (−5%, then −10% + free shipping), so you only grant a discount to the customers who need it to convert.
One-click cart restoration
Every email contains a signed restore link (HMAC) that rebuilds the customer’s exact cart and, if the option is enabled, re-logs them in automatically. A single click brings them back to their cart page, ready to pay — with the step’s voucher already attached.
The link is signed: any tampering with its parameters invalidates it. Automatic re-login can be disabled in the general settings if you prefer the customer to log in manually.
Tracking and revenue attribution
- Opens: an invisible pixel records the opening of each email.
- Clicks: the click on the restore link is counted.
- Conversion: when an order is validated, the module automatically matches the order to the re-engaged cart, marks the cart as recovered, attributes the revenue and cancels the remaining reminders in the sequence.
GDPR compliance
Every email includes an unsubscribe link. When a customer unsubscribes, their address is added to a persistent suppression list: they will never be re-engaged again and pending sends for them are cancelled. Carts without a usable email address are never tracked. Uninstalling the module removes the tables, the configuration and the admin tab.
Dashboard and statistics
The Cart Recovery tab shows the key metrics over 30 days: detected carts and abandoned value, recovered carts and recovery rate, emails sent, open and click rates, and recovered revenue. A chart compares detections against recoveries day by day, and a table details the performance of each step in the active campaign (sent, opened, clicked, click rate). The Carts tab lists the latest tracked carts with their status.
FAQ and troubleshooting
No reminders are being sent
First check that the cron task is active and calls the URL with the correct token. Without cron, nothing is detected or sent. Then check that the campaign is active, that at least one step is active, and that the current time is within the sending window.
How are abandoned carts detected?
The module records carts through a PrestaShop hook, then the cron scan marks as abandoned those left inactive beyond the configured abandonment delay, provided a usable email address is available.
Can a customer receive too many emails?
No: the maximum emails per cart, the anti-repeat cooldown between sequences and the sending window strictly frame the frequency. As soon as a cart is converted or the customer unsubscribes, the remaining reminders are cancelled.
Are the vouchers secure?
Yes. Each voucher is personalised, single-use and time-limited; it is generated for a specific customer and cannot be reused by a third party.
Is the module multistore compatible?
Yes. Campaigns, tracked carts and statistics are segmented per store.
Is it compatible with PrestaShop 9?
Yes. The module is tested on PrestaShop 8 and 9 and follows the PS9 API changes (price formatting via the Locale API, controllers, etc.).