Recover Abandoned Checkouts
Plenty of shoppers type their email at checkout, then leave to compare prices or find their card. WooCommerce forgets them. Getting them back usually means a separate abandoned cart plugin, often one that grabs the email before anyone agreed to hear from you.
Checkout Recovery emails shoppers who started a checkout and left. It works on the Checkout block and the classic checkout, captures an email only with consent or under a legitimate-interest notice you choose, and sends one to three reminders. Each reminder has a signed link that refills the cart and opens checkout, and the last one can carry a one-use coupon. A report shows how many came back and what they paid.
Turn On Checkout Recovery
- Open Stackless → Dashboard and turn on Checkout Recovery.
- Go to Stackless → Settings → Checkout Recovery and choose a Lawful basis.
- Set the reminders, the subject and the coupon, then save.
Results show under Stackless → Checkout recovery. The module pauses while another abandoned cart plugin it knows is active, such as Cart Abandonment Recovery for WooCommerce, CartBounty or Retainful. The Dashboard says which plugin paused it.
Choose a Lawful Basis
Lawful basis decides when an email may be captured:
- Consent: a checkbox the shopper ticks: the default. A checkbox with your Checkbox text, or “Email me a reminder if I do not finish my order”. Nothing is captured until it’s ticked.
- Legitimate interest: a notice under the email (check this is allowed where you sell): the email is captured as soon as it’s typed. Your Notice text explains why, or the default: “If you leave before finishing, we may email you a reminder about your cart. Every email has a one-click unsubscribe link.”
On the Checkout block, the consent checkbox or the notice sits in the contact section, under the email. On the classic checkout, the checkbox or the notice shows after the billing fields.
If a shopper unticks the box before the first reminder goes out, their captured checkout is deleted. Legitimate interest isn’t accepted for marketing email everywhere, so check the rules where you sell before you choose it.
When a Checkout Is Captured
Capture starts when a shopper with items in the cart types a valid email at checkout. The checkout is saved with the email, first name, cart items and total, and kept up to date as they fill in the form. Stackless never captures:
- An empty cart, or an email that isn’t valid.
- An address that unsubscribed from cart reminders.
- A shopper who didn’t tick the box, when the basis is consent.
- Internal and test addresses you list under Stackless → Settings → Extra Enhancements in Internal and test emails, while Don’t run integrations is ticked. See Extra Enhancements.
A cart that never reaches checkout isn’t tracked, because there’s no email to remind.
Set the Reminders
| Setting | Default | What it does |
|---|---|---|
| Reminders | 2 | How many emails a left checkout gets: 1, 2 or 3. |
| First reminder after (hours) | 1 | Counted from the shopper’s last change at checkout. |
| Second reminder after (hours) | 24 | Counted from the reminder before it. |
| Third reminder after (hours) | 72 | Counted from the second reminder. |
| Email subject | You left something in your cart | The subject of every reminder. |
Each delay can be from 15 minutes (0.25) to 720 hours. Reminders run through Action Scheduler. Before each one goes out, Stackless looks for an order from that email placed since the checkout was captured (paid, pending or on hold) and stops if it finds one.
Reminders are WooCommerce emails, so they use your email template, with the heading “Still thinking it over?”. Each one greets the shopper by first name, lists the cart items with quantities, and has a Finish my order button. The footer says prices and stock are checked again when they return, next to a Stop these reminders link.
Add a Coupon to the Last Reminder
Coupon in the last reminder can be No coupon (the default), Percentage off or Amount off the cart. Coupon amount is a percent or an amount in your store currency, 10 by default. Coupon valid for (days) runs from 1 to 90, with 7 as the default.
- Each checkout gets its own code starting with BACK-, made when the last reminder goes out.
- The code works once, only for the shopper’s email, and can’t be combined with other coupons.
- The email shows the discount and the code, and the Finish my order link applies it.
- The subject of that reminder gets “(and a little thank-you)” added.
- Unused codes are deleted after they expire.
The Finish My Order Link
The button opens a signed link that refills the cart with what the shopper left and goes straight to checkout, with the coupon applied. If the email field is empty when they arrive, the captured email is filled in.
- With Buy Links on, the link goes through a signed Buy Link, which replaces whatever is in the cart.
- With Buy Links off, Stackless empties the cart and adds the saved items itself. Items that can’t be bought any more are skipped. If nothing can be added, the cart page opens.
- Prices and stock come from your store when the shopper returns, not from the email.
- A link that was changed, or one for a checkout that’s been deleted, opens the cart page.
Unsubscribe
Every reminder has a Stop these reminders link and a List-Unsubscribe header. The link opens a page that asks “Stop all cart reminder emails to this address?” with an Unsubscribe button. Only the button unsubscribes, so mail scanners that open links don’t unsubscribe anyone.
Unsubscribing stops every open checkout for that address, and the address is never captured again. The unsubscribe is kept after the retention period ends.
Read the Results
Stackless → Checkout recovery shows the last 30 days:
- Captured: checkouts with an email.
- Reminded: checkouts that reached their first reminder without an order.
- Recovered orders: reminded checkouts that came back and paid.
- Recovery rate: recovered divided by reminded.
- Recovered revenue: what recovered orders paid, in your store currency.
An order placed after a reminder, or from a reminder link, counts as recovered. An order placed before any reminder went out shows as Ordered without a reminder and isn’t counted. Revenue is counted once, when the order reaches a paid status. An order in another currency is converted at the rate on that day.
Filters show All, In checkout, Reminded, Recovered, Ordered without a reminder and Unsubscribed. The table lists the 50 newest checkouts with the email and its basis, the cart, the status, reminders sent, last activity and the order. Delete removes a checkout and stops its reminders.
Send Reminders From FluentCRM
With the Stackless FluentCRM module on, FluentCRM automations get two triggers:
- Checkout abandoned (Stackless): a captured checkout reached its first reminder without an order.
- Checkout recovered (Stackless): a reminded checkout came back and paid.
To send the emails from FluentCRM, set Who sends the reminders to My FluentCRM automation (Stackless only tracks and reports). Stackless then sends nothing, but still steps through the schedule, so the triggers fire and the report keeps working. The default, Stackless (WooCommerce emails), sends the reminders itself.
In those emails, these smart codes fill in the checkout:
{{stackless_checkout.recover_url}}: the signed Finish my order link. It stays empty once the checkout became an order, so a late step never links a finished cart.{{stackless_checkout.cart_items}}: the products in the cart.{{stackless_checkout.cart_total}}: the cart total.
In a Checkout abandoned or Checkout recovered automation they describe the checkout that started it. Anywhere else they describe the contact’s newest open checkout.
Privacy
- No outside service is used. Captured checkouts are stored in your database, in
{prefix}stackless_checkout_recovery: the email, first name, account if signed in, the basis, cart items and total, reminders sent, any coupon code and the order. - The visitor’s WooCommerce session is stored as a one-way hash.
- Keep checkouts for (days): 60 by default, from 7 to 365. Older checkouts are deleted once a day. Unsubscribes are kept so nobody is emailed again.
- Tools → Export Personal Data and Tools → Erase Personal Data include a Checkout recovery group. Erasing an address removes its checkouts and its unsubscribe, and cancels pending reminders.
Limits
- Reminders are only emailed from your live store. On a copy, such as staging, they’re scheduled but not sent, and the Checkout recovery screen says so.
- The link restores products, variations and quantities, up to 20 cart lines. Extras attached to a cart item, such as add-on choices, aren’t restored.
- FluentCRM emails can carry the Finish my order link but not the last reminder’s coupon code. Add a FluentCRM coupon to your automation if you want one.
- Recovered revenue in another currency uses the exchange rate when the order is paid.
For Developers
stackless_checkout_recovery_abandoned runs once per checkout, when its first reminder is due. stackless_checkout_recovery_recovered runs when a reminded checkout’s order is paid:
add_action('stackless_checkout_recovery_abandoned', function ($row) {
// $row['email'], $row['first_name'], $row['cart'], $row['cart_total'], $row['currency']
});
add_action('stackless_checkout_recovery_recovered', function ($row, $order) {
$order->add_order_note('Came back from a cart reminder.');
}, 10, 2);
To change the reminder email, copy templates/checkout_recovery/email-reminder.php from the plugin to stackless/checkout_recovery/email-reminder.php in your theme.