An abandoned cart text is a marketing SMS sent to a shopper who added a product to a Shopify cart, started checkout, and left without completing the order — the same trigger event a recovery email already uses, routed to a second channel. The setup question that actually matters isn’t whether to add SMS; it’s how to add it without duplicating the email that’s already covering the same abandonment.
How do you set up an abandoned cart text, step by step?
Every step below hangs off one decision: the text is a branch inside the abandoned-checkout flow the email already runs on, never a second flow with its own trigger. Skip that decision and every step past it inherits the same-moment double-send risk regardless of how carefully the individual settings are configured.
Step 1: Confirm SMS Consent Exists as Its Own Field
The prerequisite is SMS consent captured as its own field, separate from email marketing consent, before any branch logic or copy decision matters. Email marketing consent in Klaviyo and SMS marketing consent are stored as distinct properties on a profile, and a shopper who checked the email opt-in box at checkout has not, by that action, opted into marketing text. This distinction sits ahead of timing and copy, because a text sent to a profile without SMS consent is not a sequencing mistake — it’s a compliance one, governed by a legal framework distinct from the one covering email, and worth confirming with your SMS provider’s current documentation and with counsel before any branch goes live.
In practice, that consent field gets populated one of two ways on Shopify: a checkout-page SMS opt-in checkbox, separate from the email one, or a keyword join flow where a shopper texts a word to a short code after seeing an on-site or post-purchase prompt. Either source writes to the same consent property the abandoned-checkout branch will check before it sends. A shopper who abandoned checkout without ever seeing either prompt has no SMS consent recorded, and the correct behaviour for that shopper is silence on the text channel — not a fallback text, not an assumed opt-in from their email subscription.
Step 2: Branch the Text off the Abandoned-Checkout Trigger
The abandoned cart text branches off the same abandoned-checkout event the email sequence already listens for, rather than entering off a second, parallel trigger. Klaviyo’s flow builder supports this directly: instead of creating a second flow object with its own Started Checkout trigger, add a conditional split or branch inside the existing abandoned-checkout flow, and route the SMS steps down that branch. The reason this matters is not tidiness — it’s that two independent flows triggered on the same event have no visibility into each other’s state by default. Each one only knows what it has sent and what the shopper has done inside its own object, so without deliberate cross-flow logic, both flows fire on schedule regardless of what the other one just did.
Texting and emailing the same shopper at the same moment is the step most teams get wrong — two flows that were each built correctly in isolation and never checked against each other. A shopper who abandons checkout enters the email flow and, seconds later, the SMS flow, because both objects triggered off the identical event with no shared suppression logic between them. The fix isn’t slowing either flow down — it’s not building two flows in the first place. One flow, one trigger, a branch for the channel decision.
Step 3: Gate Every Entrant on SMS Consent Before the First Send
Even inside a single combined flow, the SMS branch needs its own consent filter placed before the first text action, not inherited from having reached the branch at all. A profile can enter the abandoned-checkout flow and be routed toward the SMS branch by a channel-preference split that was built loosely — checking, say, whether a phone number exists on the profile rather than whether SMS marketing consent equals subscribed. A phone number captured for order-shipping updates is not the same thing as SMS marketing consent, and building the branch’s filter on the wrong field is how a text gets sent to someone who never opted into marketing text at all. The filter belongs on the consent property specifically, checked immediately before the branch’s first send action, not earlier in the flow where it can be bypassed by a later edit to the branch logic.
Step 4: Stagger the Text After the Email With a Time Delay
The text follows the first email, not the reverse, and not in parallel. A time-delay action placed on the SMS branch, set to a longer interval than the email step immediately before it, gives that first email a realistic window to be opened before the text arrives. The exact number of hours is a judgement call specific to your audience and category — this piece does not publish one, because no single interval is correct for every store, and a fixed number stated as a rule would be exactly the kind of invented figure this site avoids. What holds regardless of the interval you land on is the ordering itself: email establishes the first touch, and the text is a follow-up on a channel the shopper opted into separately, not a simultaneous second attempt at the identical message.
Step 5: Add a Suppression Check on the Email Step’s Engagement
A conditional split, placed immediately before the SMS send action, checks the outcome of the email step directly ahead of it in the flow — not just whether the email flow “ran,” but whether that specific profile opened or clicked it. Klaviyo’s flow filters and Skip If conditions can check an event like “has clicked Email: [flow email name]” and exclude a profile from the next branch step if that condition is already true. Built this way, a shopper who already opened and clicked the recovery email before the text’s delay window elapses is pulled out of the SMS branch entirely, rather than receiving a second nudge for something they’ve already acted on.
This cross-flow filter is the setting most builds skip, because it requires touching the email step’s own event name inside the SMS branch’s filter — a cross-reference between two parts of the same flow that isn’t the default behaviour of dragging a new branch onto the canvas. The default, unfiltered branch sends the text purely on the delay timer, with no check on what happened in the email step at all, which is exactly how the same-moment double-send happens even inside a single combined flow if this one condition is left out.
Step 6: Write the Message Inside the Character Budget
Illustrative example, not a template to copy verbatim: “Still thinking about [item]? Your cart’s waiting: [shortened link].” A second-touch variant, sent only if the first text’s link wasn’t clicked: “Still there — here’s your cart: [shortened link].” Both are deliberately short of a full sentence’s worth of persuasion, because the text’s job is a nudge back to a channel — the cart or checkout page — that’s already been abandoned once, not a rewritten version of the email’s argument compressed into a shorter format.
Two things belong in every send: the item or a plain reference to “your cart,” and a link. The link should use the SMS platform’s own shortened-link output rather than a full product or checkout URL, both because a shortened link is standard SMS practice for character-budget reasons and because it’s typically the form that supports Klaviyo’s or your platform’s own click tracking on that channel. A message written past a single SMS segment either gets split across multiple billed segments or truncated, depending on the platform and carrier, so the copy should be drafted to the character budget from the first draft, not trimmed afterward once it’s already over. Anything beyond item plus link — a discount code, a second sentence of copy — is a choice to make deliberately, not a default to add because the email had it.
Step 7: Test the Branch With a Real Profile Before Going Live
Before the branch goes live, run it against two test profiles: one with SMS consent recorded, one without. On the consented profile, confirm the text actually arrives after the email step’s delay has elapsed and not alongside it, and confirm it’s suppressed if the test profile clicks the email link before the delay finishes. On the unconsented profile, confirm no text sends at all — no fallback, no default. A branch that passes the consented path but was never tested against an unconsented profile is the more common gap, because the consent filter is easy to build and easy to forget to actually verify against a profile that should fail it.
How do you check the branch is still working once it’s live?
The pre-launch test in Step 7 confirms the logic works once; it doesn’t confirm the logic keeps working after the flow has been edited a few times, which is when the same-moment double-send tends to reappear. A later change — someone adding a fourth email step, someone rebuilding the SMS branch’s entry point during an unrelated cleanup — can silently detach the suppression filter from the email step it was checking, since Klaviyo’s filter references a specific email by name rather than “whatever the previous step is.” If the referenced email step is renamed or replaced, the filter can stop matching without throwing an error, and the branch quietly reverts to sending on the delay timer alone.
The canary metric worth watching is the SMS opt-out rate on this specific branch against your account’s baseline opt-out rate on other SMS sends. A sustained jump right after an edit to the abandoned-checkout flow is a signal to check the suppression filter’s target event first, before assuming the copy or the offer caused it — a shopper who gets texted right after already converting from the email is a far more likely source of a sudden opt-out spike than the message itself being wrong. Checking this after any edit to either the email or the SMS side of the flow, not just at initial launch, is what keeps the branch behaving as built.
What discount, if any, goes in the text?
The text should carry the same code the email already offers, where one exists, rather than a second and different one issued on a separate channel for the identical abandoned cart. Two live codes for one abandonment create two problems: a shopper can apply whichever is larger regardless of which message actually drove them back, and attributing the recovered order to a channel becomes unreliable once either code could explain the conversion. If a channel-specific incentive is a deliberate strategy — a slightly different code to test SMS’s own lift, say — the flow needs a way to track which code was redeemed, not just which messages were sent, or the test can’t actually answer the question it was built to answer.
How many texts belong in the sequence, and does it need to match the email?
There’s no single count that fits every store, and matching the email sequence’s length message-for-message is not a requirement — an email sequence built around three or four touches over several days doesn’t need a text at every one of those steps. A shorter SMS sequence, staggered against a subset of the email steps rather than parallel to all of them, is the more defensible starting point, and the right number for your list is something to establish by testing opt-out rate and click-through against your own send volume, not by copying a published SMS best-practice count.
What happens when a shopper opts out mid-sequence?
An opt-out keyword — typically STOP, sent by the shopper to your SMS number — needs to halt every remaining SMS step in that branch, and usually every future SMS send to that profile, immediately. Most SMS sending platforms enforce this automatically at the carrier or platform level, independent of your own flow logic, which is a safeguard worth relying on rather than rebuilding. What’s worth verifying specifically is that a custom branch built inside an existing abandoned-checkout flow — rather than a flow generated from the platform’s own SMS template — still respects that global suppression correctly, since a hand-built branch is exactly the kind of structure that can sit outside a platform’s expected pattern for automatic opt-out handling. Test it with a real opt-out on a test profile before trusting it in production.
Does the link go to checkout or to the product page?
Checkout, with the cart contents restored, is the better default when your SMS platform supports a checkout-restore link — it removes a step the shopper would otherwise have to redo by hand. Not every platform’s shortened link reliably rebuilds the cart for every store configuration, particularly with subscription products or a custom cart drawer, so this is worth testing directly: send a test text, click the link, and confirm the cart that loads actually matches what was abandoned. If it doesn’t, a product-page link is a working fallback, not a downgrade — it costs the shopper an extra click but at least sends them somewhere accurate.
Compliance, in general terms
SMS marketing in the US sits under its own legal framework, separate from the rules governing email, and it covers consent, identification, and time-of-day restrictions among other requirements. This article does not state specific hours, penalty figures, or consent-wording requirements, because those specifics change and are not something to get from a blog post — confirm the current requirement with your SMS provider’s own compliance documentation and with counsel before you set send windows, sequence length, or opt-in wording for an abandoned cart text programme.
A brand selling into more than one country carries an additional layer worth flagging rather than detailing here: consent and marketing-communication rules for SMS differ by jurisdiction, so a flow built to satisfy US requirements is not automatically compliant for a UK, EU or Canadian contact on the same list. If your SMS branch reaches contacts outside the US, that’s a second compliance question to route through counsel alongside the US-specific one, not an assumption to carry over from a single market’s rules.
Getting the branch logic, the suppression check and the consent gating built correctly — so SMS adds recovered revenue instead of duplicating the email’s own trigger and driving both channels’ unsubscribe rates up — is a lifecycle flows build, not a setting you toggle once and leave.
Sources
No external figures are quoted in this article beyond the cleared Klaviyo benchmark cited above (183,000+ brands, 41% of email revenue from automated flows, vendor-reported); the setup steps are written from how Shopify, Klaviyo and SMS branches are configured and operated, not from a fetched or measured source.