Email marketing automation for PrestaShop: abandoned cart recovery that converts
Last updated: June 2026.
Most PrestaShop stores recover almost none of the carts they lose. Not because the email sequence is hard to write, but because nobody finishes the plumbing underneath it. Abandoned-cart email recovery is the one automation that pays for itself every month after a one-time setup: the shopper already chose the product, already started checkout, and already left their email. You're not selling to a stranger. You're reminding someone who almost bought.
This is the deep, build-it guide: the exact email sequence and timing, what each message should say (and what it must not say), how to generate a working PrestaShop cart-recovery link, the deliverability records that decide whether any of it reaches an inbox, and how the main email platforms actually integrate with PrestaShop. If you just want the case for why every store needs this automation, start with abandoned-cart emails: the one automation every store must have, this post assumes you're already sold and want to build it properly.
First, fix the leak, then catch the overflow
Recovery email is the safety net, not the floor. If your checkout itself is bleeding orders, you'll spend money emailing people who left for reasons an email can't fix. A surprise shipping cost, a forced account, a five-step form on a phone. Email recovers the carts you lose despite a good checkout; it does not paper over a bad one.
So before you wire up the sequence, make sure the checkout earns the carts in the first place. The diagnostic side of that lives in dedicated posts so this one can stay focused on email: the 12 reasons people leave before paying and why shoppers abandon carts in PrestaShop cover the causes; reducing cart abandonment with proven strategies covers the on-site fixes. With that done, the email below catches what still slips through.
The sequence: three emails, and why three
A single reminder recovers a meaningful share of carts on its own, but a short sequence consistently outperforms one message, each email catches a different reason the person stalled. Three is the practical sweet spot: enough to cover "distracted," "unconvinced," and "needs a nudge," without tipping into the volume that earns spam complaints. The job of each email is different, and the timing matters as much as the copy.
| Send timing | Job | Incentive | |
|---|---|---|---|
| 1, The reminder | ~1 hour after abandonment | "You got interrupted, here's your cart, one click away." | None |
| 2, The reassurance | ~24 hours later | Handle the silent objection: shipping, returns, trust, reviews. | None (or free shipping) |
| 3, The nudge | ~48–72 hours later | Time-boxed reason to act now. | Discount, segmented by cart value |
Email 1, the reminder (about an hour out)
This is almost always the highest-converting message in the sequence, because most first-email recoveries are simply people who got distracted, a phone call, a closed tab, a kid in the next room. They didn't object to anything. They just need the cart put back in front of them.
An hour is the window that tends to work best: not instant (it reads as creepy and the person may still be deciding in another tab), not next-day (the intent has cooled). Keep the email almost boringly simple:
- One CTA, and only one. "Complete your order." No "browse more," no "contact us," no newsletter sign-up competing for the click.
- Show the actual products, image, name, quantity, price, not a generic "you left something."
- Link to a real cart-recovery URL that restores their basket, not to your homepage. This is the part most setups get wrong; the PrestaShop mechanics are below.
- No discount. Discounting people who were about to pay anyway just trains shoppers to abandon on purpose.
Subject lines for email 1 work best when they read like a helpful nudge rather than a sales push. "You left something in your cart," "Did something go wrong at checkout?", or the product name itself ("Your [product] is still waiting"). Test two or three against each other rather than trusting any single line; open rates vary enormously by store, list, and audience, so the only numbers worth acting on are your own.
Email 2, the reassurance (next day)
If they didn't come back after email 1, the interruption wasn't the problem, a doubt was. Email 2's job is to answer the objection they never voiced. The angle shifts from "here's your cart" to "here's why you can trust the purchase":
- Social proof: a star rating and a one-line review excerpt for the main product in the cart.
- Pre-empt the usual blockers: shipping time, return policy, accepted payment methods. Stated plainly, in the email, so they don't have to go digging.
- A human exit: "Reply to this email or call us" gives a hesitant buyer a way to ask the one question holding them back.
Still no discount here in most cases. If your margins on this cart band support it, a free shipping offer is the gentlest incentive, it removes a common objection without touching your product price or teaching customers to wait for markdowns.
Email 3, the nudge (two to three days out)
This is the one email where a discount earns its place, and even here, not everyone should get one. A time-boxed offer ("10% off, expires tomorrow") gives a genuine reason to act now to people who've now had two reminders and still haven't returned. The key is to segment the incentive by cart value so you never discount yourself into a loss:
- Carts under ~EUR 30: no discount. A percentage off can erase your whole margin. A plain final reminder is fine.
- Mid-value carts: free shipping is often more effective than a percentage and costs you less.
- High-value carts: a modest percentage discount, and for your very top orders, a personal email or call from a real person converts far better than any coupon.
The discount mechanics live in PrestaShop already: a Cart Rule (Catalog → Discounts → Cart rules in modern versions; "Price rules → Cart rules" on 1.6) with a unique code, a value, and crucially an expiry date set in the rule's Conditions tab so "expires tomorrow" is true and not just copy. Most email platforms can generate a unique single-use code per recipient, which stops a "COMEBACK10" from leaking onto coupon sites and getting applied to full-price orders forever.
The piece that actually breaks: the cart-recovery link

An abandoned-cart email is only as good as its link. Send someone to your homepage and you've lost them again; send them to a URL that rebuilds their exact cart and you've done the one thing the email exists to do. In PrestaShop, every cart is a row in the cart table with an id_cart and a secure_key, tied either to a logged-in id_customer or to a guest cart held in the visitor's cookie.
The reason recovery is fiddly is that the cart lives in a cookie, and the email is opened in a different session, often a different device entirely. So the link has to re-establish the cart server-side, and it has to be tamper-proof: you never want someone recovering a stranger's cart by incrementing an ID in the URL. PrestaShop's own native mechanism handles this with a recover_cart parameter guarded by a hashed token, so a guessed id_cart alone is useless:
- Build a link carrying the
id_cartas arecover_cartparameter plus atoken_cartthe core computes asmd5(_COOKIE_KEY_ . 'recover_cart_' . id_cart), the same scheme PrestaShop uses internally to rebuild a cart from a link. (If you roll your own instead, a token derived from the cart'ssecure_keyis a reasonable custom pattern, but it isn't what core does.) - On arrival, validate the token, then set the visitor's cart cookie to that
id_cartbefore redirecting into checkout. - Use the customer's saved
id_langandid_shopso a multi-store or multi-language shopper lands in the right context, not the default one.
Concretely, building the native link is two lines of PHP. Exactly what core does internally when it emails a cart from Orders → Shopping Carts:
$token = md5(_COOKIE_KEY_ . 'recover_cart_' . (int) $idCart);
$link = Context::getContext()->link->getPageLink(
'order',
true, // SSL
(int) $cart->id_lang,
[
'step' => 1,
'recover_cart' => (int) $idCart,
'token_cart' => $token,
]
);
// -> .../order?step=1&recover_cart=123&token_cart=ab12cd...
One thing to know before you lean on the native path: recoverCart() loads the cart's id_customer and logs that customer back in, so the built-in mechanism is designed for carts tied to a known customer. A pure guest cart with no customer record won't restore through it. Which is one more reason a guest-first checkout that captures an email early (so the cart has a customer to recover) feeds your recovery sequence better than one that doesn't.
If you use an integrated email platform (Brevo, Mailchimp), its PrestaShop module generates these recovery links for you. This is one of the main reasons to use the official connector rather than exporting a CSV and emailing blind. If you're building custom, the non-negotiable rule is that the recovery token must be cryptographically tied to the cart; an unguessable token is the difference between a feature and a data-leak.
Where PrestaShop's own "abandoned carts" view fits in
PrestaShop has always shown you abandoned carts in the back office, Orders → Shopping Carts (older 1.6 versions list it under the Customers menu as "Carts"), where you can filter by carts with no associated order and see the contents and the customer. This is genuinely useful for spotting patterns and for manual outreach on big B2B carts. What it is not is an automation: it won't send a timed sequence, segment by value, or restore the cart on click.
The back-office view tells you who left; the email platform is what wins them back at scale. Don't mistake one for the other.
Deliverability: the foundation nobody sets up
The best-written sequence in the world is worthless if it lands in spam, and since the major mailbox providers tightened their bulk-sender rules in early 2024, that's exactly where unauthenticated store email goes. Three DNS records decide your fate, and all three live in your domain's DNS, not in PrestaShop:
- SPF lists which servers may send mail as your domain. You publish one SPF TXT record that
include:s each sending service (your email platform, plus your shop's own transactional sender). The classic mistake is having two SPF records. That's an automatic fail; everything must be merged into a single record. - DKIM cryptographically signs each message so receivers can prove it really came from you. Your email platform gives you the public key to publish as a TXT (or CNAME) record. Skip it and you fail the new bulk-sender requirements outright.
- DMARC ties SPF and DKIM together and tells receivers what to do on failure. Start at
p=none(monitor only, collect reports), and only after the reports come back clean for a few weeks tighten top=quarantineand eventuallyp=reject. Jumping straight to reject before you've verified your setup will block your own legitimate mail.
A few practical rules that matter as much as the records:
- Separate transactional from marketing. Order confirmations and shipping notices should keep sending from your primary domain; abandoned-cart and promotional email is safer on a dedicated subdomain (e.g.
mail.yourdomain.com) so a marketing complaint never poisons the reputation that gets order emails delivered. - Warm up a new sending domain. Don't send to your whole list on day one, ramp volume over a couple of weeks so providers learn you're legitimate.
- Keep your list clean. Drop hard bounces immediately and stop emailing people who've ignored two full sequences; engagement is itself a deliverability signal, and a high unsubscribe or complaint rate will sink your inbox placement.
- Score your setup with a free tool like mail-tester before you go live, and fix anything it flags.
Platform comparison: Brevo vs Mailchimp vs Klaviyo on PrestaShop
All three can run an abandoned-cart sequence; they differ a lot in how cleanly they bolt onto PrestaShop and how much they cost as you grow. The PrestaShop integration story is the deciding factor for most stores, because it's what makes cart-recovery links and product data "just work."
| Factor | Brevo | Mailchimp | Klaviyo |
|---|---|---|---|
| PrestaShop integration | Official module on the PrestaShop Addons marketplace; cart-recovery and product sync built in. | Module available but less actively maintained than it once was. | Has an official PrestaShop Addons module, though integration and setup are heavier than Brevo's. |
| Abandoned-cart automation | Built-in trigger and starter templates; quick to launch. | Workflow builder with branching and A/B testing. | Deepest flow logic, conditional splits, time delays, predictive triggers. |
| Cost as you scale | Generally the most affordable at small-to-mid list sizes. | Rises steeply as contacts grow. | Premium pricing aimed at higher-volume stores. |
| SMS in the same tool | Yes, alongside email. | Add-on. | Yes. |
| Segmentation depth | Solid, behaviour and purchase-based segments. | Decent tag/segment model. | Best-in-class, predictive analytics, lifetime-value and churn scoring. |
| Setup effort | Lowest. Connect the module and you're close to live. | Moderate. | Highest, real learning curve. |
| Best fit | Most PrestaShop stores wanting strong integration without the price climb. | Stores already invested in the Mailchimp ecosystem. | High-volume stores needing advanced, deeply-branched segmentation. |
For most PrestaShop stores, Brevo is the pragmatic default. Its official module makes the cart-recovery link and product sync the platform's problem rather than yours, the pricing stays reasonable as your list grows, and SMS lives in the same place. Klaviyo earns its premium only once you genuinely need predictive segmentation and complex flows, and even with its official Addons module, expect a heavier integration and setup than Brevo's. Mailchimp is hard to recommend for a new build today; if you're already on it and it works, there's no urgency to move, but its PrestaShop integration hasn't kept pace.
Segment, or you're leaving most of the money on the table
The single biggest lever in abandoned-cart recovery isn't the email copy, it's not treating every cart the same. A first-time visitor who abandoned a small cart needs a different message than a repeat customer who abandoned a large one. Three axes cover most of the value:
- By cart value, drives the incentive logic above: no discount on small carts, free shipping in the middle, a real offer plus human touch at the top.
- By customer type. First-time visitors need trust signals (reviews, guarantees, payment security); past customers already trust you, so keep it short and warm; your repeat VIPs justify a personal note and your best offer.
- By where they dropped. Leaving at the shipping step usually means cost shock (lead with free or flat shipping); leaving at payment usually means a trust or technical wobble (lead with security and alternative payment methods). PrestaShop's checkout runs through the order controller's steps, personal information, addresses, delivery, payment, so the drop-off point is a real signal about the objection, and the post on why your checkout page is losing you sales maps each step to its likely cause.
Recovery email is downstream of the checkout itself
Here's the loop that ties this together. Email wins back a slice of lost carts; a better checkout means fewer carts are lost in the first place, which makes every recovery euro go further. The two compound. Forcing account creation, for example, is one of the most common abandonment causes, and it also shrinks the pool of recoverable carts, because a guest who bailed before entering an email can't be emailed at all. The data on that trade-off is in guest checkout vs account creation.
This is where the checkout itself pulls its weight. Our Checkout Revolution module rebuilds PrestaShop's stepped checkout into a single-page flow with guest checkout as the default and inline validation, all configured from the back office without forking your theme, so fewer carts reach the "abandoned" state your email sequence has to clean up afterwards. So what does that mean for recovery specifically? A guest-first checkout captures the email earlier in the flow, which means more abandoned carts you can actually send a recovery email to. We rebuilt it from the ground up. The details are in Checkout Revolution 3.0, and if you're deciding between fixing the checkout and waiting for the platform, the full checkout optimization guide lays out the routes.
Beyond abandoned carts: the rest of the automated stack
Once the abandoned-cart sequence is live, the same plumbing, the email platform, the authenticated domain, the PrestaShop data sync, powers the other automations that quietly earn revenue:
- Welcome series (triggered on first account or first purchase): introduce the brand, set expectations, and nudge the critical second purchase.
- Post-purchase follow-up (triggered on delivery, not shipping): ask for a review once the product has actually arrived, then cross-sell or remind to replenish later.
- Win-back (triggered after a dormant period): re-engage customers who already trust you and have details saved, cheaper to convert than a cold prospect.
- Browse abandonment (viewed a product, never added it): effective but consent-gated, only send to shoppers who opted into marketing, since it relies on tracking behaviour.
- Price-drop alert (a watched or wishlisted product gets cheaper): combines existing intent with a fresh reason to buy, and converts well when your platform syncs PrestaShop price data.
FAQ
How many recovery emails should I send?
Three is the practical sweet spot: a reminder about an hour out, a reassurance the next day, and a time-boxed nudge two to three days later. One email already recovers a meaningful share; a short sequence catches the different reasons people stalled, distracted, unconvinced, needing a push, without the volume that triggers spam complaints. Going beyond three rarely adds enough to justify the deliverability risk.
Should every recovery email include a discount?
No. Email 1 and usually Email 2 carry no discount. Discounting people who were about to pay anyway just trains shoppers to abandon on purpose. Save any real offer for Email 3, and segment it by cart value: no discount on small carts, free shipping in the middle, a modest percentage or a personal touch on your highest-value carts.
Why does my recovery link send people to the wrong place or fail?
Almost always one of two things: the link points at your homepage instead of rebuilding the cart, or the token is wrong. PrestaShop's native mechanism needs recover_cart=<id_cart> plus token_cart=md5(_COOKIE_KEY_ . 'recover_cart_' . id_cart), and it only restores carts tied to a known customer. If you use an official connector (Brevo, Mailchimp), it generates these links for you. Building them by hand is where most setups break.
Why do my recovery emails land in spam?
Missing or broken authentication. Since the major mailbox providers tightened bulk-sender rules in 2024, unauthenticated store mail goes to spam by default. Publish a single merged SPF record, DKIM, and DMARC (start at p=none), send marketing from a dedicated subdomain so it can't poison your transactional reputation, and score the setup with a tool like mail-tester before going live.
Which email platform is best for PrestaShop?
For most stores, Brevo. Its official module makes cart-recovery links and product sync the platform's problem, and pricing stays reasonable as your list grows. Klaviyo earns its premium only when you genuinely need predictive, deeply-branched segmentation. Mailchimp is hard to recommend for a new build because its PrestaShop integration hasn't kept pace.
Keep reading
Recovery is the safety net under a good checkout, so fix the leak before you scale the net: 12 reasons people leave before paying and reducing cart abandonment in PrestaShop cover the on-site fixes, and the case for the automation itself is in abandoned-cart emails: the one automation every store must have. A guest-first, single-page checkout captures the email earlier and shrinks the pool of unrecoverable carts, that's Checkout Revolution, with the rebuild detail in Checkout Revolution 3.0.
The two-hour minimum viable setup
If you have nothing running today, you don't need the full stack to start collecting recovered revenue. The minimum that works:
- Create an email-platform account (Brevo's free tier is enough to test) and install its PrestaShop module, then connect the API key.
- Publish SPF, DKIM and DMARC (
p=noneto start) for your sending domain. - Build one email, email 1 above, branded, and set its trigger to roughly one hour after abandonment.
- Test end to end: add products as a test shopper, abandon, wait for the email, click the recovery link, and confirm the cart is actually restored. This last check is the one people skip, and it's the one that breaks.
- Go live, then add emails 2 and 3, segmentation, and the other sequences over time.
That one email is the highest-ROI hour of marketing work most PrestaShop stores can do, because it monetises intent you've already paid to acquire. For stores already sending a basic reminder, the upgrade that moves the needle is almost never "more emails", it's fixing deliverability and adding cart-value segmentation, so the messages you already send land in the inbox and stop discounting carts that didn't need it. Build the safety net well, keep the checkout that feeds it tight, and the carts you used to lose quietly turn back into orders.