---
name: "abandoned_cart_recovery"
description: "Recover abandoned carts without training customers to abandon: design the full email and SMS sequence by objection, set timing and channel order, apply discount discipline with margin math, split first-time and repeat buyers, and read recovery against a holdout group. Use when building, fixing, or auditing a cart or checkout abandonment flow on any ecommerce platform."
---

# Abandoned Cart Recovery

## Purpose

Build a recovery sequence that earns orders the store would not have gotten anyway, at a margin the store can keep. Baymard Institute puts the average documented cart abandonment rate at 70.22 percent across 50 studies, so abandonment is normal buying behavior, not an emergency. The job is to answer the reason the shopper left, in the right order, and then stop. A single reminder email with an early discount does the opposite of this job: it pays full margin to shoppers who only needed a nudge, and it teaches repeat buyers to abandon on purpose and wait for a code.

Two flows, not one. Started Checkout abandonment (shopper reached checkout, contact details exist, intent is high) and Added to Cart abandonment (shopper added an item but never started checkout, many profiles are not reachable) behave differently and carry different data. Build the checkout flow first. Add a cart flow later, with a filter that excludes anyone who started checkout, so no shopper sits in both.

## Workflow

1. **Diagnose before writing.** Pull the store's own abandonment reasons first: checkout step drop-off, exit surveys, support tickets, and replies to earlier recovery messages. Use Baymard's survey of US shoppers as the checklist of what to look for, not as a prediction for this store. Excluding the just browsing segment, its top stated reasons are extra costs too high (40 percent), delivery too slow (20 percent), distrust with card information (19 percent), forced account creation (18 percent), and a too long or complicated checkout (17 percent). Map each top reason in the store's data to one message variant from `references/message-sets.md`.

2. **Fix prevention leaks the flow keeps exposing.** If a variant exists because the store hides shipping until the payment step, forces an account, or buries the returns policy, log the store fix alongside the flow work: show the full total in the cart, offer guest checkout, state delivery dates and returns terms before checkout. Recovery recovers a fraction. Prevention removes the cause.

3. **Set the trigger and the filters that stop bad sends.** Trigger on Started Checkout (platform name varies). Set flow filters, checked before every send, not only at entry:
   - Placed Order zero times since starting this flow. Without this, buyers get asked why they left minutes after paying.
   - Started Checkout zero times since starting this flow, so a shopper who returns to checkout restarts from the newest cart instead of running two sequences.
   - Not in this flow in the last 7 to 14 days, so repeat browsing does not stack sequences.
   - Suppressed, unsubscribed, or SMS opted out profiles excluded per channel.
   Turn off any built-in platform recovery email before activating this flow, or shoppers get doubled messages.

4. **Lay out the default sequence.** Three emails over about three days, plus at most one SMS, is the default to test from:
   - About 1 hour: email 1, the distracted shopper variant. Items, images, one button back to the restored cart. No discount, no urgency claim.
   - About 3 to 5 hours, only if no order and SMS consent exists: one short SMS with the cart link.
   - About 24 hours: email 2, the objection variant matched in step 1 (cost total up front, delivery dates, trust and payment facts, or fit and sizing help, with real reviews for the exact product where available).
   - About 48 to 72 hours: email 3, the incentive touch if the discount rules below allow it for this segment, otherwise the no-offer value variant. State a real expiry.
   Then stop. Longer sequences belong to high price or long consideration products, and only when holdout data says the extra touches add orders. Timing is a default to test against the store's own data, not a law. High consideration products often need the gaps stretched, impulse products shortened.

5. **Split by buyer history before splitting by cart value.** First-time buyers get the trust, objection, and proof variants, and they are the only segment eligible for a first-order incentive under the rules below. Repeat buyers get the saved cart, product use or care facts, and replenishment or subscription options where they fit. A repeat buyer who already trusts the product and gets 10 percent off for being distracted is pure margin loss.

6. **Apply discount discipline.** All of these gates, every time:
   - No discount in the first two touches.
   - One incentive maximum per sequence, single use, tied to the profile or cart, with a real expiry enforced by the store.
   - Cap incentive frequency per profile (for example, no more than one discounted recovery in 90 days). Repeat eligibility is what trains strategic abandonment.
   - Prefer the cheapest fix for the actual objection: free shipping when shipping cost is the blocker, a small fixed amount when the cart is small, a percentage only when the math in step 7 stays positive at the store's margin and average order value.
   - Never announce a discount on site or in ads as waiting for abandoners. The offer lives inside the flow only.

7. **Run the margin math before the incentive goes live.** Use the bundled CLI (`bin/cart_math.py`) with a pilot or the store's prior flow numbers. Feed it treated and holdout carts and orders, average order value, gross margin, the discount rate, the share of orders expected to redeem it, and the blended send cost per cart. If the projected net after send cost is not positive, shrink the incentive, narrow it to first-time buyers or high carts, or drop it and keep the objection variants.

8. **Measure against a holdout, always.** Hold out a random 10 to 20 percent of eligible abandoners from the whole sequence, permanently while the flow runs. Report recovery as orders per abandoned cart in treated versus holdout, and run both groups through `bin/cart_math.py` on a fixed cadence (weekly for high volume, monthly otherwise). Raw flow revenue and platform attributed revenue are not the result, because many treated buyers would have returned on their own. The holdout gap is the result. Also watch unsubscribe rate, spam complaints, SMS opt outs, and repeat abandonment rate among past discount redeemers. Rising repeat abandonment after an incentive is the training effect showing up in the data.

9. **Audit monthly.** Check that filters still stop post purchase sends (place a test order after triggering the flow), that expiry and stock claims in live messages are still true, that no second platform flow is double sending, and that the incentive segment has not quietly widened. Re-run the holdout read before changing timing, copy, or the offer, and change one thing at a time so the read stays interpretable.

## Output Contract

A completed build or audit delivers:

- A flow map: trigger, every filter with its exact platform setting, each touch with channel, delay, variant name, and segment branch (first-time versus repeat, cart flow versus checkout flow).
- The message set: one written message per touch, each matched to a named objection, with subject lines, the exact offer wording where an incentive passes the gates, and the real expiry mechanics.
- A discount rule sheet: who is eligible, the offer, the per profile frequency cap, single use mechanics, and the margin math output that justifies it.
- A measurement plan: holdout size and how it is randomized, the metrics reported, the reporting cadence, and the kill or shrink criteria written in advance (for example, net after send cost at or below zero for two consecutive reads, or complaints above the store's campaign norm).

## Operating Rules

- Consent is per channel and comes first. Email sends follow the law that applies to the store and the recipient (CAN-SPAM in the US, CASL in Canada, GDPR and ePrivacy rules in the EU), with a working unsubscribe and the required sender identification. Marketing SMS needs prior express written consent under the TCPA in the US: a phone number typed at checkout for delivery updates is not marketing consent. Honor STOP and any other opt out immediately, on every channel the rules require, and keep consent records. When in doubt about a jurisdiction, send less and get the store's legal answer in writing.
- Never fabricate urgency, stock levels, review counts, or expiry dates. Every claim in a message must be true at send time and backed by the store system that enforces it.
- Stop all touches the moment an order lands, the profile opts out, or the sequence ends. No recovery flow bleeds into general campaigns.
- Do not double run flows. One platform owns recovery. Built-in store emails, a second app, and this flow firing together is a defect, not coverage.
- Keep the human reply path real. Objection variants that invite a reply must land in a monitored inbox or a staffed two-way SMS thread. An unanswered objection reply is worse than never asking.
- Report holdout results honestly, including flat or negative reads. A sequence that only moves attributed revenue while the holdout gap stays at zero gets cut back to the first reminder, not expanded.
