If you run a Shopify store, roughly 70% of the carts your shoppers start never become orders. That is the industry-wide average, and it has been stable for years. The shoppers loaded up their cart, got to checkout, and left. Some got distracted. Some saw the shipping cost and bailed. Some just wanted to think about it. The good news is that a meaningful chunk of those carts are recoverable, and the tools to recover them are already inside your Shopify admin.
This guide walks through building a complete abandoned cart recovery sequence using Shopify Flow, Shopify's native automation builder, paired with Klaviyo for the email side and Slack for internal alerts. You do not need a developer. You do not need to write code. By the end, you will have a three-touch email sequence, tiered by cart value, with a dashboard to track what it is actually earning back.
Why Shopify Flow instead of just turning on the default emails
Every Shopify plan ships with built-in abandoned checkout recovery emails. They work. They send one email, roughly 10 hours after the abandonment, to anyone who entered their email address at checkout. That single email captures a slice of recoverable revenue, but it leaves most of the money on the table.
Shopify Flow is the difference between sending one email and running a real recovery program. Flow is a visual automation builder that lets you chain triggers, conditions, and actions. It comes free with every Shopify plan as of 2024 (it used to be Plus-only). With Flow, you can:
- Send a sequence of three emails instead of one, spaced over 48 hours
- Branch the sequence by cart value (different offers for a $30 cart vs a $300 cart)
- Trigger a Slack alert to your team when a high-value cart is abandoned
- Pause the sequence the moment a customer places an order, so you never email someone who already bought
- Push abandoned cart events into Klaviyo, which gives you better email deliverability and richer analytics than Shopify's native emails
The data backs this up. A Klaviyo report on cart recovery flows found that businesses using recovery email sequences earn back 3.33% of lost sales, the highest rate of any email flow they track, with an average revenue per recipient of $3.65. Multiply that across thousands of abandoned carts over a year and it adds up fast. (Source: Klaviyo cart abandonment research)
<figure> <img src="/blog/img/shopify-flow-automation-recovery-abandoned-carts-revenue-2.webp" alt="A vintage 1950s tin-toy robot character arranging colored envelopes on a workshop desk to represent an email recovery sequence" /> <figcaption>A three-touch email sequence beats a single reminder email. The first email reminds, the second offers help, the third creates urgency.</figcaption> </figure>What you need before you build
Three things, all of which you may already have:
- A Shopify store on any plan. Flow is included on Basic, Shopify, and Advanced plans as well as Plus.
- Klaviyo installed and connected to your Shopify store. Klaviyo has a free tier up to 250 contacts and 500 emails per month, which is enough to test the flow. Paid plans start at $45/month for up to 1,000 contacts. You can run the recovery sequence on Shopify's native emails alone, but Klaviyo gives you better deliverability, A/B testing, and revenue tracking per email.
- A Slack workspace for your team (optional, but worth it). The high-value cart alert only matters if someone on your team can act on it.
If you skip Klaviyo and use Shopify's native emails, the Flow logic is the same. You will just send fewer emails (Shopify native caps you at one automated recovery email per abandonment) and get less analytics.
Step 1: Map the recovery sequence before you build it
The biggest mistake stores make with cart recovery is sending one generic discount email to every abandoned cart. That trains shoppers to abandon on purpose, waiting for the discount. Instead, build a tiered sequence.
The three-touch sequence
| Timing | Purpose | Offer | |
|---|---|---|---|
| Email 1 | 2 hours after abandonment | Friendly reminder | No discount, just "you left these behind" |
| Email 2 | 24 hours after abandonment | Remove friction | Free shipping (if not already free) or a small incentive |
| Email 3 | 48 hours after abandonment | Create urgency | Time-limited discount (5-10%) or "low stock" alert |
The first email should never include a discount. Most carts are abandoned because of distraction, not price. The Shopify abandoned cart guide notes that 86% of internet users "second screen," meaning they shop while watching TV or doing something else. A clean reminder without a discount often recovers the cart on its own. Save the discount for email 3, where it serves as a last nudge rather than an expected reward.
The value tiers
Not every cart deserves the same treatment. A $30 cart and a $300 cart have different recovery economics. Here is a tiered approach that stores like Alex Mill and Dollar Shave Club use:
| Cart value | Email 1 | Email 2 | Email 3 |
|---|---|---|---|
| Under $50 | Reminder, no discount | Free shipping offer | 5% discount, 24-hour expiry |
| $50 to $150 | Reminder, no discount | Free shipping + small incentive | 10% discount, 24-hour expiry |
| Over $150 | Reminder, no discount | Personal note from customer service | Personal outreach + priority support |
The over-$150 tier skips the automated discount entirely. Instead, Flow triggers a Slack alert to your team and a task to send a personal email. High-value carts are worth a human touch, and a blanket 10% discount on a $500 order costs you more than it earns.
Discounts should be your last tool, not your first. The Klaviyo data shows reminder emails (no discount) recover most of the revenue. If you lead with a discount on email 1, you teach shoppers to wait. Lead with a reminder, and you recover the cart without training bad behavior.
Step 2: Build the Flow in Shopify
Open your Shopify admin, go to Apps, then Flow. Click Create workflow. You will see three columns: Trigger, Condition, Action. This is the full logic of every Flow workflow.
Set the trigger
The trigger is Customer abandons cart. Flow fires this trigger when a customer adds items to their cart, enters their email at checkout, and then leaves without completing the purchase. Flow waits a configurable delay before firing, which is how you control email timing.
Set the first trigger delay to 2 hours. This is short enough to catch the "got distracted" shoppers while their intent is still warm, and long enough to not feel spammy.
Add the value-tier conditions
After the trigger, add a condition block that checks Cart total. Create three branches:
- Branch A: Cart total less than $50
- Branch B: Cart total between $50 and $150
- Branch C: Cart total greater than $150
Each branch gets its own email sequence.
Add the email actions
For each branch, add a Send email action (if you are using Shopify native emails) or a Send event to Klaviyo action (if you are using Klaviyo). The action sends the first email in the sequence for that tier.
Then add a Wait condition (Flow supports delay steps between actions) set to 22 hours, followed by another send action for email 2. Then another 24-hour wait and email 3.
Add the order-placed stop condition
This is the step most stores skip, and it matters. Between each email, add a condition that checks Has the customer placed an order? If yes, end the workflow. If no, send the next email. This prevents the embarrassing and revenue-killing situation of emailing a customer a discount on a cart they already completed.
Shopify Flow handles this with a condition node. After each wait step, insert a check: "If customer's order count since trigger is greater than 0, then stop." Otherwise, proceed to the next email.
Step 3: Build the emails in Klaviyo
If you are using Klaviyo (recommended), you build the actual email content there and Flow triggers the send. Each email in the sequence is a Klaviyo flow email that waits for the Shopify Flow event to arrive.
Email 1: The reminder (2 hours)
Subject line options (A/B test these):
- "You left something behind"
- "Your cart is waiting"
- "[First name], your items are still in stock"
Body: Show the abandoned items with product images, a clear "Return to cart" button (make it at least 44 by 44 pixels for mobile taps), and one line of friendly copy. No discount. No urgency yet. This email is about removing friction.
Forbes reports that 41% of all emails are opened on mobile, so design for the phone first. If your email looks broken on a phone, your recovery rate drops.
Email 2: The friction-remover (24 hours)
Subject line: "Need help with your order?" or "Free shipping on your cart"
Body: Offer free shipping (if it was not already free) or address a common objection. If your store sells apparel, link to the size guide. If you sell electronics, link to the return policy. The goal is to answer the question that stopped the purchase.
Email 3: The urgency push (48 hours)
Subject line: "Last chance: your 10% discount expires tonight"
Body: Time-limited discount, clearly stated expiry, and a single call to action. Alex Mill uses "Get Them For 15% Off" and it works because the offer is specific and the deadline is real.
<figure> <img src="/blog/img/shopify-flow-automation-recovery-abandoned-carts-revenue-3.webp" alt="A vintage 1950s tin-toy robot character studying a colored bar chart on graph paper at a drafting table, representing analytics tracking" /> <figcaption>Track recovered revenue per email, not just open rates. The email that earns the most back is the one worth optimizing.</figcaption> </figure>Step 4: Add the Slack alert for high-value carts
For carts over $150, the automated email sequence is not enough. High-value carts warrant a human follow-up. Add a Slack action to Branch C of your Flow:
- In Flow, under Branch C, add an action after the first email
- Select Send Slack message
- Connect your Slack workspace (Flow walks you through the OAuth)
- Set the message to: "High-value cart abandoned: [customer name], [cart total], [items]. Check the order and consider a personal follow-up."
The message should go to a channel your customer service or sales team monitors. The follow-up is a plain, personal email, not a templated discount. Something like: "Hi [name], I noticed you were looking at [product]. Happy to answer any questions or help with sizing. Let me know."
This personal touch on high-value carts recovers a meaningful percentage that automated emails miss. The threshold ($150) depends on your average order value. If your AOV is $80, set the threshold at $200. If your AOV is $500, set it at $750.
Step 5: Track what it earns
The whole point is recovered revenue, not email opens. Klaviyo tracks this automatically once the flow is live. Open Klaviyo, go to Analytics, then Revenue, and filter by the abandoned cart flow. You will see:
- Placed order rate: what percentage of emailed shoppers eventually bought
- Revenue per recipient: how much each email earned on average
- Revenue per email: which email in the sequence is doing the heavy lifting
The Klaviyo benchmark is $3.65 per recipient and a 3.33% recovery rate on lost sales. If your numbers come in below that, the usual culprits are: subject lines that do not get opened (test more), email 1 including a discount (remove it), or the sequence running too long (cap at 48 hours, not 5 days).
Shopify Flow itself does not track revenue the same way Klaviyo does, but you can see workflow run counts and completion rates in the Flow analytics tab. If your workflow is firing but Klaviyo shows no revenue, the problem is in the email content, not the Flow logic.
What to expect in the first 30 days
A well-built recovery sequence does not recover 100% of abandoned carts. It recovers a realistic 10-15% of the revenue that was abandoned. If your store does $50,000/month in revenue and your abandonment rate is 70%, that is $35,000 in abandoned carts. Recovering 10-15% of that adds $3,500 to $5,250 per month, with no additional ad spend.
The first 30 days are a calibration period. You will learn:
- Which email in the sequence earns the most (usually email 1 or email 3)
- Whether your tier thresholds need adjusting (if 80% of recoveries come from the under-$50 tier, lower the thresholds)
- Whether the Slack alert actually gets acted on (if no one follows up, the high-value recovery stalls)
Adjust one variable at a time. Change a subject line, wait a week, measure. Move a tier threshold, wait a week, measure. Cart recovery is a system you tune over months, not a setup you configure once.
Common mistakes to avoid
Leading with a discount. If email 1 offers 10% off, shoppers learn to abandon and wait. Email 1 is a reminder. Email 3 is where discounts belong.
Sending five emails instead of three. Beyond three touches, you annoy people and hurt your sender reputation. Three is the sweet spot.
Ignoring mobile. If your recovery email breaks on a phone, you lose 41% of your opens before they even read the subject line.
Forgetting the order-placed stop. Emailing a customer who already bought is the fastest way to lose trust and trigger spam complaints. The stop condition is not optional.
Setting the wrong value tiers. Your tiers should reflect your actual order distribution, not a guess. Pull your last 90 days of orders, find the median and the 75th percentile, and set your tiers there.
Abandoned cart recovery is one of the highest-ROI automations a Shopify store can build. The tools are free or cheap, the setup takes an afternoon, and the revenue shows up in the first week. Start with the three-touch sequence, tier it by value, and let the data tell you what to tune next.