In Klaviyo, a Shopify store needs three separate flows: one triggered by Started Checkout (abandoned checkout), one by Added to Cart (abandoned cart) and one by Viewed Product (browse abandonment). Each has the flow filter "Placed Order zero times since starting this flow", its own delays, and one to three emails.
This guide covers the full setup: why three flows instead of one, how to configure the trigger, filters and delays of each, and how to handle Smart Sending and overnight send times. At the end you'll find how to test everything without emailing real customers, and what to check, in order, when a flow doesn't send.
Why you need three flows, not one
The three events show three levels of intent. Started Checkout fires when the customer enters their details on the payment page: they meant to buy. Added to Cart means a product went into the cart without the customer reaching checkout. Viewed Product records only a visit to a product page. With a single flow you would send the same message, at the same times, to someone one click from paying and to someone who was just browsing.
The separate flows must not overlap, though. The answer is cascading filters: the cart flow excludes anyone who started checkout, and the viewed product flow excludes anyone who added to cart or started checkout. That way each customer only gets the sequence for the furthest step they reached.
| Abandoned checkout | Abandoned cart | Viewed product | |
|---|---|---|---|
| Trigger metric | Started Checkout | Added to Cart | Viewed Product |
| Flow filters | Placed Order zero times since starting this flow; not in the flow in the last 5 days | same as checkout, plus Started Checkout zero times since starting this flow | same as cart, plus Added to Cart zero times since starting this flow |
| First email | within 1 hour | 1-2 hours | 2-4 hours or the next morning |
| Follow-up emails | 24 hours, 48-72 hours | 24 hours, 48-72 hours | optional second email at 24-48 hours |
| Number of emails | 3 | 3 | 1-2 |
| Smart Sending | consider turning it off on the first email | on | on |
Two practical notes. On Shopify, Added to Cart has to be enabled in the settings of the Klaviyo integration (the on-site behavior tracking): if you don't see it among your metrics, the cart flow has nothing to trigger on. Viewed Product, in turn, is only recorded for visitors Klaviyo can identify, and for European visitors only if they have consented through the store's privacy settings.
How to set up the three flows, one by one
Abandoned checkout. Create the flow with the Started Checkout trigger and add the two flow filters. Then add a one-hour Time Delay, the first email, a 23-hour delay, the second email, a 24-48 hour delay, and the third email. Watch out: in Klaviyo, delays add up. If you enter "24 hours" after the first email, the second one goes out 25 hours after the abandonment, not 24.
Abandoned cart. Same structure, with the Added to Cart trigger, a first delay of 1-2 hours and one extra filter, "Started Checkout zero times since starting this flow": anyone who reaches checkout in the meantime leaves this flow and enters the one that fits them better.
Viewed product. Trigger on Viewed Product, one or two emails, and a tone closer to a recommendation than a nudge. Klaviyo's documentation suggests a longer re-entry window for this flow (up to 30 days): otherwise people who keep looking at the same catalog would get too many emails.
Two examples of a first email, to show the difference in register:
Subject: Your order is almost complete Hi Emily, you left checkout before finishing your magnesium powder order. Your cart is saved, and shipping is free over $45. Pick up where you left off: it takes two minutes.
Subject: One detail about the ring you looked at Hi Jake, the silver ring you viewed yesterday can be resized for free within 30 days. If you're unsure about the size, the product page has a guide for measuring at home.
In the flows AchillesAI creates, the text of each email is written for the individual customer: AchillesAI is connected by webhook to exactly these three flows, and sending stays in Klaviyo, with the triggers, filters and delays described here.
Smart Sending, send times and consent: who actually gets the email
Smart Sending skips a profile that has already received an email in the last few hours; the default window for email is 16 hours, and you can adjust it for each email in the flow. It's useful on the viewed product flow and on follow-up emails, but on the first checkout email it can skip your best-timed reminder just because a newsletter went out that morning. Consider turning it off there and leaving it on everywhere else.
Send times matter as much as delays. A checkout abandoned at 11:40 p.m. shouldn't be followed up at 12:40 a.m. but at 8 a.m.: in the Time Delay block you can set a time of day to resume from, instead of a fixed duration. Finally, consent: these are marketing emails, so a profile that hasn't given email consent, or has unsubscribed, won't receive them.
How to test the flow without emailing real customers
Start with the preview: in the email editor you can see the message with the data of a real profile and a real event, to check that the name, product, image and cart link all fill in. In the trigger panel, the Preview function shows which filters a profile passes.
Then run a real abandonment: using an address of your own (for example a +test alias), subscribe, add a product, start checkout and close the page. If the flow is already live, you have two ways to keep customers out of it: set the emails to Manual, so profiles queue up in "Needs Review" and you can check and cancel them; or temporarily add a flow filter that only lets test addresses in. Remember to remove it when you're done.
Why your flow isn't sending: the checks, in order
1. Flow status. Only emails set to Live send. In Draft they queue no one; in Manual they queue but wait for your approval. Check the status of each individual email, not just the flow.
2. Wrong metric. A flow on Added to Cart without tracking enabled receives no events; one on Viewed Product without on-site tracking stays empty.
3. Filter too narrow. A filter with "OR" instead of "AND", or a re-entry window that's too long, excludes more people than you expect. In "Recipient activity", the "Skipped" tab tells you why each profile was skipped.
4. Profile not identified or not subscribed. If Klaviyo doesn't know who the visitor is, it can't email them: no email address on the profile, no flow.
5. Smart Sending. If profiles show as skipped for a recent send, this is the cause.
6. Consent. Profiles without email consent, or European visitors who haven't consented to tracking, don't enter or don't receive.
Where to start
If you have a single recovery flow, split it into three with cascading filters: it's the change that puts each customer in the right sequence. Then check that your delays are calculated as a sum and that the first email doesn't go out overnight. For detailed timing, read when to send abandoned cart emails; for the copy, see these abandoned cart email examples; and if you're still choosing a platform, read what Klaviyo is, how it works and what it costs.
