Email and retention
Abandoned cart flows built around why people left
Most abandoned cart flows are a timed sequence with a coupon at the end. This one branches on the reason the shopper left, which checkout data records.
By CartKernel · Published
A shopper who left at the shipping step, one who left at the payment step, and one who added an item and closed the tab are three different people with three different objections. Most flows send all three the same sequence: a reminder, a nudge, a coupon. Building the flow around the reason for leaving means reading which step the shopper reached and what was in the cart, and both are available from the platform’s own events without new tooling. This is how we design it.
Three kinds of abandonment, and this flow handles two
- Browse abandonment. A product was viewed and nothing was added. It gets its own light-touch flow and is out of scope here.
- Cart abandonment. An item was added and checkout never started. The cart abandonment rate entry defines it.
- Checkout abandonment. Checkout started, contact details were entered, and the shopper left at the information, shipping or payment step. The checkout abandonment rate entry covers the measurement.
On Shopify, an abandoned checkout record exists once an email or phone number is entered, and the pixel events checkout_started, checkout_shipping_info_submitted and payment_info_submitted mark how far the shopper got. Those step markers are the raw material for the branches below; the events are listed in the Web Pixels API standard events.
What the data says about why they left
| Signal in the abandoned checkout | Likely reason | Branch |
|---|---|---|
| Left at the shipping step with a cart below the free-shipping threshold | Shipping cost | Show the threshold and what would reach it |
| Left at the shipping step with a remote or international address | Delivery time | State the delivery window and carrier plainly |
| Left at the payment step | Payment options, trust, or a declined card | List payment methods, returns policy, and a one-tap resume link |
| Size guide or several sizes viewed before the add | Fit uncertainty | Fit guidance and the exchange policy |
| A discount code attempted and rejected | Looking for a deal | Restate the current offer honestly; no new code |
| Cart value well above the store’s average order | Considered purchase | Longer delay, questions answered, no urgency |
| Returning customer | Habit interrupted | Short reminder, no incentive |
| An item in the cart went out of stock | Cannot complete | Back-in-stock notice or the closest alternative |
| Pre-order or made-to-order item | Unclear lead time | Confirm the ship date |
| Mobile session ended at payment | Interrupted | Resume link that restores the checkout in one tap |
Each branch answers one objection. A shopper who left because of shipping does not need three product photos and a headline; they need the number.
Flow architecture
Triggers and precedence. The checkout abandonment trigger takes precedence over the cart abandonment trigger for the same person, and one person is in one abandonment flow at a time. Without that rule the same cart produces two sequences.
Delays. Low-consideration carts get the first message within an hour or two, while the decision is warm. Considered purchases get it the next day. The second message follows a day later where the branch warrants one, and a third exists only for branches that earn it. How many emails should an abandoned cart flow have argues the case for fewer.
Evaluate branches at send time. The cart may have changed since the trigger. Check the current cart contents, the stock status and whether an order has been placed on any channel immediately before each send, not at the trigger.
The message. One subject line that names the reason, one objection handled in the body, one image, the resume link that restores the checkout, and a policy line for shipping and returns. On Shopify, the recovery link reopens the abandoned checkout with the cart intact.
The discount policy, written down. Never in the first message. Never to a returning customer within a set number of days of a full-price order. Never on categories where margin cannot carry it. Unique codes with an expiry, so the code cannot circulate. A store that discounts every abandoned cart teaches its customers to abandon carts.
SMS. One message, only where SMS consent exists, at the point in the branch where a short reminder is the whole content. SMS marketing covers consent capture and pacing.
Consent comes before the first send
An abandoned checkout email is a commercial message. In Canada, CASL requires consent for commercial electronic messages, and Shopify’s checkout has a marketing consent checkbox whose state is stored on the customer; the safest policy is to send recovery sequences only where that consent is recorded, and to take advice on how implied consent applies to your situation. In the United States, CAN-SPAM requires an accurate sender, a physical address and a working opt-out honoured promptly. Both are summarised on the government pages linked at the end. Gmail’s sender guidelines add authentication and one-click unsubscribe for bulk senders, and a flow that sends to people who did not ask for it is the fastest way to a spam-rate problem.
Suppression rules
Suppress anyone who has purchased since the trigger on any channel, anyone with an active subscription order for the same item, anyone with an open support conversation, anyone refunded in the last few weeks, carts containing only a gift card, carts whose items are unavailable, internal and test addresses, and anyone who has already received an abandonment sequence in the past week. The suppression list is where most of the complaints come from when it is missing.
Measuring by branch, not by flow
Report placed-order rate and revenue per recipient for each branch and each message, not for the flow as a whole, because the shipping branch and the considered-purchase branch have nothing in common. Open rates are unreliable since mail clients prefetch images, so do not steer by them. Hold out a share of eligible shoppers from the flow and compare their return rate against recipients, because a portion of abandoners come back on their own and the flow should only claim what it added. The incrementality entry explains the holdout method.
Feed the reasons back into the site
The branch counts are a diagnosis of the checkout. If the shipping branch is the largest, the fix is on the product page and in the cart, not in email: should shipping costs be shown on the product page and does free shipping increase conversion rate cover the options, and the free shipping threshold calculator models a threshold against margin. If the payment branch dominates, checkout optimisation is the work. If accounts are being forced, should checkout require creating an account has the answer. The flow recovers some of what the site loses; fixing the site loses less.
A starting structure
| Branch | First message | Second message | Third message |
|---|---|---|---|
| Shipping cost | Threshold and what reaches it, one to two hours | Delivery window and returns, next day | None |
| Payment step | Payment methods and trust signals, one hour | Resume link and support contact, next day | Offer only if policy allows, day three |
| Fit uncertainty | Fit guide and exchange policy, two hours | Reviews that mention fit, next day | None |
| Considered purchase | Questions answered, next day | Comparison of the options in the cart, day three | Reminder with delivery window, day six |
| Returning customer | Short reminder, two hours | None | None |
| Out of stock | Back-in-stock or alternative, when known | Notification when restocked | None |
Adjust the timings to the category’s buying process, and revisit the branch table each quarter with the branch counts in front of you. The full service, including the branch logic and the holdout, is described under abandoned cart flows, and abandoned cart emails not sending is the page for when the trigger itself is broken.