Playbooks

Setting Up a Shopify Abandoned Cart Flow in Klaviyo That Doesn't Annoy Buyers

Most abandoned cart problems are trigger problems, not copy problems. A three-email Klaviyo flow built so buyers who already paid stop receiving reminders.

Setting Up a Shopify Abandoned Cart Flow in Klaviyo That Doesn't Annoy Buyers

The most common abandoned cart problem isn't weak copy. It's a mis-set trigger: people who already paid keep getting reminders, one customer receives several emails the same day, or Shopify and Klaviyo both send their own recovery series.

A working flow gets the right recipient right first, and only then worries about discounts and subject lines. Here's a three-email Shopify + Klaviyo flow a small team can actually maintain.

First, know the difference between Added to Cart and Started Checkout

The two events represent different intent:

  • Added to Cart: the shopper put something in the cart and may not have left an email address at all;
  • Started Checkout: the shopper entered checkout and submitted enough information to identify them (usually the better email trigger).

Klaviyo's prebuilt abandoned cart flow generally uses Started Checkout. Using Added to Cart requires the matching behavioural tracking in the Shopify integration. For a first version, start with Started Checkout: the data is cleaner and problems are easier to trace.

Step 1: turn off the duplicate senders

Shopify has its own abandoned checkout automation. Klaviyo can send too. With both live, the same shopper gets two sets of reminders.

Before launch, write a sender inventory: Shopify Messaging, Klaviyo, any other email app. Does each one have an abandoned cart template active? Keep one primary flow and pause the rest. Klaviyo's own guidance is to disable the ecommerce platform's default abandoned messages to avoid duplicates.

Step 2: set the trigger and the filters

In Klaviyo, pick the prebuilt Abandoned Cart flow from the Flow Library, or create a metric trigger:

  1. trigger on Started Checkout;
  2. add a flow filter: Placed Order zero times since starting this flow;
  3. add a frequency guard, e.g. hasn't entered this flow in the last 7 days;
  4. if you run Buy with Prime or another separate checkout, build a separate flow and exclusion per channel.

Filter 2 is the one that matters. Once someone completes a purchase mid-flow, every later email should skip. If your testing shows a lot of profiles being skipped, that's usually the filter working correctly, not a bug.

Step 3: pace the three emails

"As fast as possible" isn't a rule. Sync delays, order value and how long people take to decide all change the right timing. Use this as a starting point:

EmailSuggested timingJobDiscount?
1~2 hours after abandonmentRemind them the cart exists, fix the path backNo
2~24 hoursAnswer shipping, returns and product questionsUsually not
3~72 hoursFinal reminder; test on price-sensitive segmentsDepends on margin and segment

Klaviyo notes that some integrations don't sync instantly, so very short delays can make the trigger unreliable; don't set email 1 so early that it fires before the data lands.

The three emails

Email 1: help them get back to checkout

Subject: Your cart is still here

Do three things only: show the items, give a clear button back to the cart, and state that stock and price are confirmed at checkout. Don't lead with a discount: you'll train people to abandon on purpose.

Email 2: handle the hesitation

Subject: A few things about shipping and returns

Answer two or three real high-frequency questions from your actual policies: delivery windows, return period, sizing. Don't let AI invent policy; pull from an FAQ that a human has already approved.

Email 3: use the offer conditionally

Subject: One last reminder before your cart expires

If you're giving an incentive, branch it by first-time buyer, margin headroom or cart value rather than blasting everyone. The expiry you state must match what the checkout actually enforces.

What to check in the dynamic cart block

Klaviyo's template can show cart images, titles, quantities, prices and a link back. Before going live, test at least:

  • multi-item carts render completely;
  • discontinued or out-of-stock items behave sensibly;
  • the button is tappable on mobile;
  • the discount code actually applies and doesn't conflict with other offers;
  • currencies and languages display correctly;
  • after a test purchase, later emails are skipped.

The numbers to judge it by

Open rate is distorted by privacy features and shouldn't be your success metric on its own. Look at:

  • share of clicks that end in a completed order;
  • recovered revenue per email in the series;
  • unsubscribes, complaints and bounces;
  • margin on discount-recovered orders;
  • how many already-purchased customers wrongly received an email.

Run two to four weeks for a baseline, then change one variable at a time: email 1 timing, or email 2 subject. Change timing, discount and template at once and you'll never know which one moved the number.

A prompt for drafting the three emails

AI is useful for first drafts here, as long as it can only work from policy text a human has already approved:

You are writing abandoned cart emails for [STORE NAME], which sells [PRODUCT CATEGORY].
Use only the policy text below. Do not invent delivery times, return periods, guarantees,
stock claims or discounts.
Write three emails:
1. Email 1 (about 2 hours after checkout started): remind them the cart is saved, one
   button back to the cart, no discount;
2. Email 2 (about 24 hours): answer the questions listed below using only the policy text;
3. Email 3 (about 72 hours): a final reminder. Include an incentive only if one is supplied
   below, with its exact expiry.
For each email: subject line, preview text, a body of at most [NUMBER] words, a placeholder
[CART BLOCK] where the items go, and a list of every policy sentence you relied on.
Brand voice: [THREE WORDS]
Approved policy / FAQ text: [PASTE]
Most common pre-purchase questions: [PASTE FROM SUPPORT]
Incentive: [CODE, CONDITIONS AND EXPIRY, or "none"]

The [CART BLOCK] placeholder keeps the model from writing product names into the copy; Klaviyo's dynamic block fills those in.

Worked example: what a reviewer changes

Take a fictional store selling merino running socks as an example. Its approved policy says returns are accepted within 30 days on unworn items, with the buyer paying return postage, and its email 3 incentive is a first-order code valid for 48 hours.

The drafts came back readable, with two errors a reviewer caught by checking the "policy sentences relied on" list:

  • email 2 said "free, no-questions returns"; the policy says buyer-paid returns on unworn items, so the line was rewritten from the policy text;
  • email 3 said the code "expires tonight"; the code is valid for 48 hours from the email, so the line now states the actual window.

Neither error would show up in a design preview. Both would show up in support tickets.

Common abandoned cart mistakes

  1. Shopify's own abandoned checkout email still running alongside Klaviyo's flow.
  2. No Placed Order filter, so paying customers keep getting reminders.
  3. A discount in email 1, which teaches regulars to wait for it.
  4. Copy promising things checkout doesn't enforce, such as an expiry or a stock hold.
  5. Judging the flow on open rate instead of completed orders and wrongly sent emails.

Launch checklist

  • duplicate abandoned flows in Shopify and other apps are off;
  • trigger, purchase exclusion and frequency guard are configured;
  • sending domain, unsubscribe link and consent status match your target markets;
  • dynamic cart block and cart link verified with a test order;
  • discount, stock, shipping and returns copy come from real rules;
  • someone reviews skip reasons and anomalies daily for the first week.

FAQ

Should an abandoned cart email include a discount? Not the first one. Use an incentive, if at all, in email 3 and only for segments where margin allows it, such as first-time buyers.

Why does Klaviyo show so many skipped profiles in my abandoned cart flow? Usually because the Placed Order filter is doing its job: people who bought mid-flow drop out. Check a few skipped profiles to confirm they ordered before treating it as a problem.

Should I trigger on Added to Cart or Started Checkout? Start with Started Checkout. It's the cleaner signal, and the shopper has usually left an email address by then.

How long before I can tell whether the flow works? Give it two to four weeks for a baseline before changing anything, then change one variable at a time.

If you haven't built segments and a basic email programme yet, start with AI-assisted email campaigns for small ecommerce stores. Still choosing a platform? See Klaviyo vs Mailchimp for Shopify. Tool page: Klaviyo.

Sources checked 2026-07-12: Klaviyo abandoned cart guide, Shopify abandoned checkout automation. Marketing consent rules differ by country; review against your target market before sending.

Read next

Hear when new playbooks and tools go live

Follow the RSS feed and new posts arrive automatically. No email address needed.