An abandoned cart reminder is a message that invites a shopper to return to an unfinished purchase. It should send only when the cart is still incomplete, the recipient is eligible for that message, and the return link works. New cart activity should update the decision; a completed purchase should stop it.
The awkward failure is familiar: a customer buys the shirt, then receives an email asking whether they forgot it. Better subject lines cannot fix that. The reminder needs an accurate view of what happened after the shopper first added the product.
What counts as an abandoned cart reminder?
A cart reminder follows an unfinished cart or checkout, rather than a product-page visit. A browse reminder follows viewing activity. An order confirmation follows a completed purchase. Those messages need different triggers and exclusions, even when they feature the same product.
For design inspiration, Really Good Emails’ abandoned-cart collection shows published messages from brands, including simple return-to-cart prompts and product-led reminders. The collection is useful for studying presentation. It cannot establish which shoppers your store may contact or whether your automation stops after purchase.
Keep three decisions separate:
- Detection: Has a cart been inactive long enough to count as abandoned under your rule?
- Eligibility: May this shopper receive this message, and is it still relevant?
- Delivery: Did the sending system accept and deliver the approved message?
A detected abandoned cart is not proof that an email was sent. A delivered email is not proof that it caused a sale.
When should you send an abandoned cart reminder?
Choose the delay from a defined shopper action, then test it against your buying cycle. There is no universal best hour. Klaviyo’s guide recommends a first reminder two to four hours after abandonment. CleverReach’s guide describes configurable delays of one, three, ten, or twenty-four hours. These are provider recommendations and options, not measured results for your store.
The more important question is what starts the clock. A timer measured from the first add-to-cart can expire while someone is still shopping. A timer measured from the latest qualifying activity gives the shopper time after their most recent change.
Consider this illustrative one-reminder policy with a twenty-four-hour inactivity window:
| Time | Shopper activity | Expected decision |
|---|---|---|
| Monday, 10 | Adds a shirt and provides an email | Schedule a check for Tuesday, 10 |
| Monday, 18 | Changes the shirt size | Move the check to Tuesday, 18 |
| Tuesday, 09 | Completes the purchase | Suppress the reminder |
| Tuesday, 18 | The delayed check runs | Do not send a cart reminder for that purchase |
If the shopper had not purchased, the delayed check would still need to verify message eligibility, current cart contents, and the destination. Expiry of the timer is permission to check, not permission to send.
Write down the clock’s starting event, the activity that resets it, the completion event that stops it, and the maximum number of reminders. Without those definitions, two teams can implement the same timing instruction and produce different customer experiences.
A Runner AI source example: detection is not sending
Runner AI’s cart-abandonment source provides a concrete example of these boundaries. In the source inspected for this guide, cartAbandonmentDebounce defines a twenty-four-hour trailing timer. The decision function, decideCartAbandonment, suppresses a converted cart and a cart without a captured email. Its tests cover both exclusions and give conversion priority when both apply.
The Medusa cart-activity handler also distinguishes a new recoverable state from a stale one. Activity with an email can arm the timer. Activity without an email invalidates the earlier state, so clearing an address does not leave an old address eligible for detection. An order event with the cart identifier registers conversion suppression.
That example illustrates detection safeguards. It does not establish consent, configure a sender, validate stock, or prove that a reminder reached an inbox. A contact address is an identity input, not a marketing permission record.
Disclosure: Runner AI publishes this guide. This example describes inspected source and test cases, not a live delivery test or a guarantee that every account has an active recovery flow. The abandoned-cart email feature page explains the product’s review and availability boundaries. The broader email marketing guide covers how recovery fits into a store’s lifecycle program.
What should the reminder say?
Start with a straightforward invitation and one action. Use verified cart details, not an invented explanation for why the shopper left.
Here is an illustrative first-reminder template, not a message sent by Runner:
Subject: Take another look at your selected shirt
Still considering it? You can return to your cart to review your selection and the current checkout total.
Return to your cart
Questions about sizing or delivery? Reply and we can help.
Use the product reference only when it matches the shopper’s actual selection. Use the reply invitation only when someone monitors that inbox. Add the sender identification, unsubscribe controls, and other required footer information through your approved sending system.
Avoid saying “reserved for you” unless inventory really is reserved. Avoid “last chance” unless there is a genuine deadline. If you mention a price, discount, delivery estimate, or available size, confirm it against current store facts before sending.
A discount is optional. First decide whether the reminder helps the shopper resume the purchase. If you add an offer, approve the margin impact, eligible products, expiry, and checkout behavior separately. An email must not promise a discount the cart cannot apply.
Test who must not receive the reminder
Before activation, use test addresses and a non-customer test environment where available. Record the expected message count for each scenario. Checking the final count matters because two individually successful runs can still send a duplicate.
| Scenario | Expected result to verify |
|---|---|
| Identified, eligible cart remains incomplete | One reminder after the configured inactivity window |
| Shopper changes the cart before the check | The old check does not send stale cart details |
| Shopper completes the purchase | No recovery reminder for the completed purchase |
| Shopper removes their email | No reminder to the previously captured address |
| Contact unsubscribes during the wait | Sending eligibility is checked again and the message is suppressed |
| The same activity is delivered twice | No duplicate reminder for the same recovery attempt |
| Cart becomes empty or a variant becomes unavailable | The message stops or follows an explicitly approved alternative |
| Return link expires or opens the wrong cart | The test fails; do not activate that destination |
Treat this table as a proposed acceptance checklist, not a claim that one platform implements every row automatically. Verify the behavior in the system that owns each decision.
For Runner’s conditional workflow interface, the Workflow guide distinguishes simulation from live tests. Simulation stubs write-side effects. A live test can make real calls and send messages. Confirm access and test consequences before using either; a saved draft is not an active automation.
For permission and message classification, have the responsible owner verify the rules that apply to the recipient’s market. Do not assume that a cart reminder is transactional just because checkout supplied the address. Obtain market-specific legal advice where needed.
Related questions
Why did a customer receive a reminder after buying?
Check whether the order event reached the recovery system, whether it matched the correct cart or shopper, and whether the sending step checked completion after the wait. Also check for a second active flow. A purchase can stop one automation while another continues independently.
How many abandoned cart reminders should a store send?
Start with a sequence you can explain and stop reliably. For an initial rollout, one reminder makes eligibility and duplication easier to inspect. Add messages only with an explicit frequency cap, a new eligibility check before each send, and evidence that the extra contact is useful.
How should you measure a reminder?
Track eligible carts, suppressed attempts, messages sent, delivery failures, return visits, purchases, unsubscribes, and complaints. Define the attribution window before reporting recovered revenue. A purchase after an email is an attributed outcome under that rule, not proof that the customer would not have bought otherwise.
What should you fix before improving the subject line?
Fix a reminder that reaches purchasers, ignores an unsubscribe, repeats itself, or opens the wrong destination. Once those checks pass, work on wording and timing. The shopper should receive a relevant invitation to return, not evidence that your systems disagree.
Sources and scope
- Runner source inspected October 16, 2026:
cartAbandonmentDebounce,decideCartAbandonment, andbuildAbandonedCartEventDatain the server package’scart-abandoned-timer-core.ts. - Runner cart activity and conversion handling:
armCartAbandonmentandregisterOrderConversionin the server package’smedusa-cart-abandonment.ts. - Runner regression cases: the jobs package’s
cart-abandoned-timer-core.test.ts. Source inspection is not evidence of live delivery. - Klaviyo, CleverReach, and Really Good Emails, accessed October 16, 2026.