A shopper abandons a cart at 2:14 PM. Your Klaviyo abandoned-cart email fires at 2:24. Your SMS flow — set up separately, by a different person, six months later — fires at 2:34. The shopper clicks the email, buys, and both platforms report a recovered sale. Email attribution counts it. SMS attribution counts it. You paid to send both, and you have no idea which one actually did the work.
Full disclosure: I work for Ready, an SMS platform. So I have a bias toward SMS getting credit. But the honest version of this story is that when your two channels aren't sequenced, neither deserves full credit, and you're double-counting revenue you'd have earned with one message. That inflated number then justifies more spend on both — which is how a lot of ecommerce brands end up over-messaging their best customers while congratulating themselves.
The double-touch problem, concretely
Most abandoned-cart setups look like this: an email flow built when the store launched, and an SMS flow bolted on later once SMS became the obvious next channel. Nobody sat down and decided which channel owns which moment. They each just fire on the checkout started trigger.
So a shopper who left both an email and a phone number gets:
- 2:24 PM — Email #1: "You left something behind"
- 2:34 PM — SMS #1: "Still thinking it over? Here's 10% off"
- T+1 hour — Email #2
- T+4 hours — SMS #2
That's four touches in an afternoon for one abandoned cart. The shopper experiences it as spam. And when they convert, whichever platform they clicked last (or within its attribution window) claims the whole sale.
I've written before about how SMS attribution windows quietly inflate ROI — a 24-hour window claims sales the shopper would've made anyway. Channel overlap is that same problem doubled: now two windows are both claiming it.
The math on cannibalized attribution
Say your cart flow recovers 400 sales a month at a $60 AOV — $24,000 in "recovered" revenue. Of those, roughly 30% of shoppers were reachable on both channels. So ~120 sales got double-touched.
If both platforms claim those 120 sales in full, your combined dashboards report:
| Sales claimed | Revenue claimed | |
|---|---|---|
| Email dashboard | 400 | $24,000 |
| SMS dashboard | 400 | $24,000 |
| Reported total | 800 | $48,000 |
| Actual sales | 400 | $24,000 |
You didn't make $48,000. You made $24,000, and you're staring at a number that's 2x reality on the overlapping segment. Every budget decision downstream — "SMS is crushing it, let's send more" — is built on that phantom.
The fix isn't better attribution modeling. It's making sure both channels never fire at the same shopper for the same moment.
Give each channel a distinct job
The channels aren't interchangeable, and treating them as two ways to say the same thing is the root mistake. SMS is immediate, short, and read within minutes. Email is roomy, visual, and tolerated at higher frequency. An SMS subscriber is worth 3–5x an email subscriber — but only if you stop sending them the same content on both.
Here's a job assignment that stops the overlap:
- SMS owns the urgent, time-boxed nudge. One text, early, when the cart is still warm. Short. No discount on the first touch.
- Email owns the detailed, persuasive follow-up. Product images, reviews, the "why," and — if you're going to discount — the offer lives here where it has room to breathe.
- Only one channel discounts. If both offer 10% off, you've trained shoppers to abandon carts on purpose.
Assign the moment, not the message.
A sequencing model that doesn't double-fire
The cleanest structure staggers channels by hours, not minutes, and gates the second channel on whether the first already worked.
- T+20 min — SMS #1 (short nudge, no offer). Only fires if the contact has valid SMS consent.
- T+1 hr — Email #1 (the detailed pitch). Suppress if the shopper already converted from the SMS.
- T+6 hr — Email #2 with the offer. Suppress if converted.
- T+24 hr — SMS #2 (last call, offer expiring), only to shoppers who never opened the emails.
The critical word is suppress. Every step after the first checks: did they already buy, and did the other channel already reach them? In practice that means your two flows have to share conversion state — which is where most setups fall apart, because the email tool and the SMS tool don't talk to each other.
Why shared data is the whole ballgame
If your SMS platform lives in one silo and email in another, "suppress if converted from the other channel" is a manual reconciliation you'll never actually run. This is the argument for keeping SMS inside the same system that holds your customer and order data.
For GoHighLevel users, Ready's native two-way GHL integration syncs inbound and outbound messages into the same contact record your workflows read from. So a GHL workflow can check "has this contact converted in the last hour?" before firing the next SMS — because the purchase event, the email opens, and the text history all live on one timeline. That's what makes conditional suppression a checkbox instead of a spreadsheet.
If a workflow isn't watching that state, you get worse problems than overlap — I've seen a misfired GHL workflow text one contact 40 times before anyone noticed. Guardrails and suppression logic are the same discipline.
What the sequenced version costs
Let's cost the SMS side of that flow. Two texts per abandoned cart, ~40 characters each, so one segment apiece — well under the 160-character GSM-7 limit.
On Ready's Standard tier that's $0.02/segment plus the $0.0045 carrier pass-through = $0.0245 all-in per segment.
- 400 abandoned carts/month
- 2 SMS segments each (but SMS #2 only fires to ~50% who didn't convert or open email) = ~600 segments
- 600 × $0.0245 = $14.70/month
Fifteen dollars to run the SMS half of a properly sequenced flow. Compare that to the uncoordinated version where SMS #2 fires to everyone regardless of state — 800 segments, and you're paying to annoy people who already bought. The suppression logic doesn't just clean your attribution; it trims your send bill.
If you cross 50,000 segments in a month across all your flows and campaigns, the rate automatically drops to $0.016/segment ($0.0205 all-in) — no plan to pick, it just applies. Full pricing is on the Ready SMS page.
Watch for over-messaging your best customers
The shoppers most likely to be reachable on both channels are your engaged, repeat buyers — exactly the people you least want to fatigue. And the 4th text in 7 days is where unsub rates roughly double for most ecommerce lists (that's a rough industry pattern, not a hard law).
Double-firing cart flows burns through that frequency budget fast. A shopper who abandons twice in a week under an uncoordinated setup could get eight touches — half of them redundant. A global frequency cap that both channels respect is the backstop, but sequencing is the real fix: you shouldn't be near the cap on a single cart.
Also know when SMS just shouldn't fire
Distinct jobs sometimes means "no job." There are ecommerce moments where SMS loses to email outright — long-form storytelling, image-heavy lookbooks, low-urgency browse nudges. Forcing SMS into those moments doesn't recover more revenue; it burns opt-ins you spent real money acquiring. Assigning SMS the urgent, short, time-boxed slice and letting email have the rest is a feature, not a limitation.
The practical takeaway
Uncoordinated email and SMS flows don't add up — they overlap. Two channels firing at the same shopper for the same moment split one sale, double-count the revenue, and inflate every budget decision that follows.
The fix is three moves:
- Assign each channel a distinct job — SMS owns the urgent nudge, email owns the detailed pitch, and only one of them discounts.
- Sequence by hours with suppression gates so the second channel checks whether the first already worked.
- Put both channels on shared data so "suppress if converted" is automatic, not a manual reconciliation you'll skip.
If your SMS lives outside the system that holds your order and conversion data, start there — that's the constraint everything else depends on. If you're on GHL, you can wire the two-way sync and start building conditional flows on a Ready account with 2,500 free credits, no card required. Sequence one flow, watch your attribution numbers drop toward reality, and trust the smaller number more than the old inflated one.