How a cart recovery stops on checkout
A reminder lands in a shopper’s inbox at 8:03am. The linen shirt and the candles are still in the cart. They click through and buy. What happens next is the most important thing the whole system does: nothing. No third email, no “thanks for finally paying.” This post walks through how the chase stops the moment a shopper checks out — and the three ways a human can stop it by hand: suppress one cart, unsubscribe an email, write it off.
Key takeaways
- A checkout event flips the cart to bought and cancels its wake-up — no reminder goes out.
- Three owner actions: suppress (stop one cart), unsubscribe (stop an email), write off (close it out).
- Each action updates the cart list and writes an audit row.
- The shopper’s own unsubscribe link is the same path as the owner’s unsubscribe action.
- Every stop is recorded so you can always see why a cart went quiet.
The automatic stop, plus three by hand
The automatic stop (the one that matters most)
The whole point of the system is that it disappears the moment it’s no longer needed. When a shopper checks out, your store posts a checkout event to the same webhook from Part 2. The intake Lambda finds the matching cart row, flips its status in cr-state to bought, and cancels the scheduled wake-up. If a wake-up somehow still fires — the cancel and the buy raced — the “bought or unsubscribed?” check from Part 3 catches it and routes to still shopping, so no reminder goes out either way.
This is the single most important rule in the design. A shopper who just paid you should never get an email implying they didn’t. Belt and braces — the status flip and the wake-up check both guard it — because the cost of getting it wrong is a customer who feels nagged the instant after they bought.
Action 1: suppress (stop one cart)
Sometimes a cart shouldn’t be chased even though it’s technically open. The shopper called and said they’ll pay by invoice. The order’s being handled offline. The cart is a test the owner placed themselves. The owner opens the day’s cart sheet, finds the row, and taps Suppress.
Suppress submits to a Function URL Lambda. Two things happen: the cart’s status in cr-state flips to closed, and its scheduled wake-up is cancelled. Crucially, suppress is scoped to one cart — the same shopper’s other carts, now or later, are untouched. It’s the narrowest stop available, for the case where this one cart is the exception.
Action 2: unsubscribe (stop an email)
When a shopper clicks the unsubscribe link in a reminder, that’s the same action as the owner choosing Unsubscribe on a row — both add the email to the unsubscribe list. The do-not-disturb gate from Part 4 reads that list on every single send, so once an address is on it, no reminder ever reaches it again, for any cart, now or in the future.
The shopper’s one-click link and the owner’s button hitting the same path is deliberate. There is exactly one unsubscribe list and one way onto it, so “did this person opt out?” always has a single, honest answer. An unsubscribe is forever unless the shopper themselves opts back in; the system never quietly re-adds anyone.
Action 3: write off (close it out)
Some carts are simply not worth chasing. A $4 cart of out-of-stock items. A cart from an address that’s bounced before. A duplicate. Write off closes the cart out: the Lambda marks it closed in cr-state with a written-off reason, cancels any wake-up, and that’s the end of it. Unlike suppress (“don’t chase this, but it’s a real cart”), write-off is the owner saying “this cart was never going to convert.” The distinction matters for the monthly summary in Part 6, which counts written-off carts separately so the recovery rate isn’t dragged down by carts nobody ever meant to chase.
Every stop is logged, every stop is clear
The cr-audit table records every stop — the automatic one on checkout and all three manual ones — with the user (or “system” for the automatic stop), the timestamp, and a snapshot of the cart row before and after. Two months from now, when someone asks “why did this cart never get a second reminder?”, the answer is one lookup away: bought on the 14th, or written off by Sam on the 15th, or unsubscribed by the shopper at 9:02am. No mystery, no guessing.
This kind of clarity is what lets the owner trust the system to run unattended. The reminders go out on their own, the stops happen on their own, and when a human does want to know what happened, the trail is right there.
Next post: the cost breakdown. The whole pipeline above runs in coffee-money territory at SMB volume; Part 6 explains exactly where the dollars go and why.
All posts