01What happens between the click and the email
A cart is only abandoned in a way you can act on if the shopper gave you an email address. Without one, you know someone left and nothing else. So the first design decision is where the address gets collected: early in checkout, before the payment step. After that the flow is short. The store records that a checkout started, a timer waits, and if no payment arrives one email goes out with a link back. In Stripe Checkout, a session counts as abandoned when it reaches its expiry time unpaid, and Stripe then fires a checkout.session.expired event. With recovery switched on, that event carries a link. Opening it creates a new session that copies the old one, and the link works for 30 days. A session lives 24 hours by default and you can shorten it to 30 minutes, so the timer is a setting you choose, not a law of nature.
- Collect the email address before the payment step, or there is nobody to write to
- Stripe Checkout calls a session abandoned when it expires unpaid: 24 hours by default, 30 minutes at the shortest
- With recovery switched on, the expiry event carries a link that opens a copy of the original session, valid for 30 days
- The wait before the email is a setting, so choose it on purpose
02Consent decides whether the email is allowed
Stripe's documentation files cart abandonment emails under promotional emails and says customers must agree to receive them before you contact them. Checkout can collect that agreement with a consent setting, and when a session expires, the customer's email reaches your webhook only if they gave promotional consent. No ticked box, no email. That is the rule inside Stripe's own tooling, not legal advice, so check what applies to your shop with a lawyer. You also need memory. One shopper can abandon three sessions in an afternoon, and each one fires its own event, so the store must record every recovery email it sends and stop at one per customer. If the email service is down, the flow should log the failure and alert a person instead of dropping the message in silence. Stripe also marks a completed order with the session it was recovered from, so you can count recoveries instead of guessing.
- Stripe treats cart abandonment emails as promotional: the customer has to agree first
- At expiry, the customer's email reaches your webhook only if they gave promotional consent
- Record every recovery email sent, so one shopper is never mailed three times
- Log a failed send and alert a person
- A completed order carries a recovered_from field, so recovered orders can be counted
03Why the email is the smaller part of the fix
Baymard Institute's list puts the average documented cart abandonment rate at 70.22%, across 50 studies. That is an average between studies, not a Romanian figure, and we have not measured the rate for any shop we built. The reasons are more useful, though they come from US shoppers. Baymard's latest study found that 42% had abandoned a cart because they were just browsing, which no email will fix. Among the remaining reasons it lists, extra costs such as shipping, tax and fees lead at 40%, followed by slow delivery at 20% and distrust of the site with card details at 19%. Forced account creation is 18% and a long or complicated checkout 17%. An email recovers the shopper who was interrupted. It does not recover the one who saw a delivery fee on the last screen. So for a small store the order of work is: show the total cost early, allow checkout without an account, shorten the form, and only then add the email.
- Baymard: 70.22% average documented abandonment rate across 50 studies (list updated 22 September 2025)
- Its latest study of US online shoppers: 42% were just browsing; among the other reasons, extra costs 40%, slow delivery 20%, distrust of the site with card details 19%, forced account creation 18%, long or complicated checkout 17%
- An email recovers interruptions, not surprise fees
- We measure no client's abandonment or recovery rate, so we quote none
04What it costs, and when to use the built-in version
If your store runs on a platform with the feature built in, switch that on and stop here. Shopify's help centre describes an automated abandoned checkout email, set under Apps, Messaging, Automations, with a delay you choose. Stripe Checkout gives a custom store the pieces, but someone still has to write the webhook handler, the email and the send log. PROOF48 builds stores at 2,500 to 4,500 EUR, and a store is not part of the 48-hour offer: it gets its own timeline. Our terms say larger or custom projects may require a deposit as agreed, so ask before you assume the standard no-deposit build applies. A recovery flow on top of a store is custom work. The AUTOMATE plan, 2,997 EUR a month, includes email auto-responders and two custom automations a month, and for abandoned cart emails alone it is the wrong spend. It makes sense when there is more to automate than one email. This post covers email only. An SMS or WhatsApp reminder would be a custom build, scoped on request.
- On Shopify the abandoned checkout email is built in (Apps, Messaging, Automations)
- A custom store on Stripe Checkout needs a webhook handler, an email and a send log
- PROOF48 stores: 2,500 to 4,500 EUR on their own timeline, not 48 hours; our terms say larger or custom projects may need a deposit as agreed
- AUTOMATE, 2,997 EUR a month, is the wrong spend for abandoned cart emails alone
A store with Stripe checkout and transactional email, and no claim beyond that
Noryse, a luxury corsetry label, has a store PROOF48 built with six product pages, Stripe checkout and transactional email, live at noryse.com. Those are the two pieces any recovery email builds on: a checkout and a way to send mail. The Noryse case study does not list abandoned cart emails, so we do not say it has them. It is a launch, so there is no sales history to quote, and we publish no order or cart figures.
See the build: NoryseQuestions, answered
Do I need an abandoned cart email at all?
Not first. Fix surprise shipping costs, forced accounts and long forms, which Baymard lists among the common reasons. If you still lose shoppers who were simply interrupted, add the email. We have no recovery rate to quote for any client.
Can I email everyone who abandons a cart?
Under Stripe's documentation, only customers who agreed to promotional emails. Its own tooling withholds the email address at expiry unless they consented. That is not legal advice, so check your case with a lawyer.
How long should the email wait?
We have no measured answer. In Stripe Checkout the shortest session expiry is 30 minutes and the default is 24 hours. Shopify lets you set the delay. Pick one, send a single email, and compare recovered orders against the ones you would have had anyway.
Does PROOF48 send SMS or WhatsApp cart reminders?
This post is about email only. A WhatsApp or SMS reminder would be custom work, scoped on request.
Where PROOF48 fits
Abandoned cart automation is a signal, a wait and one email, and Stripe's own rules allow the email only if the shopper agreed to hear from you. Fix the shipping surprise first, since Baymard's list puts extra costs first among checkout reasons, at 40%. Use the built-in feature if your platform has one. PROOF48 builds stores at 2,500 to 4,500 EUR and scopes a recovery flow as custom work.
Cosmin Tiu · Founder, PROOF48
Cosmin has worked in online marketing and software development since 2018, and has built with AI every day since January 2023. He still writes code from scratch daily, in Python, React, Rust and C#. PROOF48 ships business websites in 48 hours and invoices afterwards, so every opinion on this blog was paid for in real builds, not in theory.