Cart-recovery texts work so well that most ecommerce teams eventually ask the obvious next question: "If we can text people who added to cart, why not text people who just looked at the product?" More intent to catch, more revenue to recover, same playbook.
Except it isn't the same playbook. A cart abandoner and a browse abandoner look similar in your analytics dashboard, but they are legally different people. One of them almost always has a consent record you can lean on. The other one frequently doesn't — and the trigger that fires a text to them anyway is the kind of thing that gets a 10DLC campaign flagged, gets numbers filtered, and, worst case, puts you on the wrong side of a TCPA complaint.
Full disclosure: I work for ReadySMS, so I have a stake in you sending more SMS. That's exactly why I'd rather you send it in a way that survives an audit than blast a list you don't have consent for and torch your sender reputation in the process.
Why the cart abandoner already gave you consent (usually)
Walk the timeline of a real cart abandonment. Someone lands on your store, adds an item, and starts checkout. On most Shopify and ecommerce checkout flows, that's the exact moment they either enter a phone number or hit an SMS opt-in checkbox — "Text me order updates" or "Get exclusive offers by text."
That checkout interaction gives you two things:
- An identified contact. You have a phone number tied to a specific person who typed it in.
- A consent event. If your checkbox and disclosure are set up right, you have a timestamped opt-in tied to that number, ideally with the language they agreed to.
So when your workflow fires a cart-recovery text 30 minutes later, you're messaging a known contact who affirmatively said "text me." That's the foundation of a defensible send. (Whether your checkbox itself is compliant is a separate question — a pre-checked box or a buried disclosure won't hold up. We cover the mechanics in Crafting the Perfect SMS Consent Strategy in E-commerce.)
Why the browser gave you nothing
Now the browse abandoner. Someone lands on a product page, scrolls, maybe reads reviews, and leaves. They never reached checkout. They never typed a phone number. They never saw a consent checkbox because the checkbox lives at checkout.
What you actually have is a cookie or device identifier — an anonymous browsing session. To text this person, you have to first turn that anonymous session into a phone number, and there are only a few ways that happens:
- They previously bought and are logged in, so your platform recognizes the session and links it to a stored number.
- They previously subscribed to SMS through a separate opt-in.
- You've stitched their identity from an email click or an on-site popup.
Notice that in every legitimate case, the consent came from a prior event — not from the browsing itself. Browsing a product is not consent to be texted. It never was. If your "browse abandonment" trigger is really just matching a device ID to a phone number you scraped from an identity-resolution vendor, you're sending unsolicited marketing texts, and no amount of "they were clearly interested" fixes that.
This is the same trap operators fall into with trigger links in GoHighLevel — mistaking an engagement signal for a consent signal. Trigger Links Aren't Consent walks through why that distinction voids your 10DLC registration if you get it wrong.
The two-population split, side by side
| Cart abandoner | Browse abandoner | |
|---|---|---|
| Identified? | Usually — entered phone at checkout | Only if logged in or previously opted in |
| Consent source | Checkout opt-in event | Must come from a prior separate opt-in |
| Safe to text on the trigger alone? | Yes, if opt-in was valid | No — trigger is not the consent |
| What the trigger actually measures | Purchase intent + existing consent | Purchase intent only |
The single most useful thing you can do is stop treating "abandonment" as one audience. It's two. One is send-ready. The other needs a consent path built before a single text goes out.
How to build a compliant browse-to-SMS flow
You don't have to abandon the browse-abandonment idea. You have to gate it. Here's the flow that works.
1. Split your browse abandoners by consent status before anything fires. Segment into "has valid SMS opt-in" and "no SMS opt-in." Only the first group is eligible for a browse-triggered text. This should be a hard filter in your workflow, not a hopeful assumption.
2. For the consented group, send the browse text — but keep it as a marketing message. A browse-abandonment nudge is promotional by nature ("Still thinking about the Trailhead jacket? Here's 10% off"). That means it belongs in a marketing 10DLC campaign use case, not a transactional one. Registering it under the wrong use case is a quiet delivery-killer — carriers filter it and you never see a bounce. Registering a 'Marketing' Campaign for Transactional Texts Is Why Your Delivery Silently Drops covers exactly this mismatch in both directions.
3. For the non-consented group, run an opt-in capture instead of a text. This is the part most teams skip. You can't text them, but you can surface an on-site SMS popup, an email with an SMS opt-in link, or an exit-intent offer that collects the number and the consent together. Once they opt in, they graduate into the consented group and become eligible for the browse flow. You're building the audience you wish you'd had, legally.
4. Register the campaign and let STOP handling run automatically. In ReadySMS, A2P 10DLC brand and campaign registration happens in-app — roughly ~$10/mo per brand and ~$20/mo per campaign in carrier fees, with approval usually landing in 1–3 days. Once you're live, inbound STOP/UNSUBSCRIBE is honored automatically and the opt-out propagates across campaigns, so a browser who opts out of your promo flow won't get pulled back in by a different workflow. That cross-campaign propagation matters more with browse abandonment specifically, because these contacts tend to sit in multiple overlapping segments.
If you're doing 10DLC for the first time, Understanding 10DLC Compliance for E-Commerce Businesses is the ground-floor version of all this.
What the browse text should — and shouldn't — say
Because a browse text is unambiguously marketing, it needs the marketing hygiene: brand name, a clear offer, and an obvious way out (Reply STOP). Keep it tight. A browse nudge that runs long turns into multiple segments and eats margin fast.
Quick worked example. Say your browse text is:
"Hey — still eyeing the Trailhead jacket? Take 10% off today: shop.example.com/j Reply STOP to opt out"
That's about 90 GSM-7 characters — one segment. Send it to 4,000 consented browse abandoners on the Starter tier and you're at 4,000 × ($0.0155 + $0.0045) = $80. Add an emoji and you've dropped the per-segment limit to 70 characters; a 90-character message now splits into two unicode segments, and that same send is $160. Emojis aren't free — I'd skip them here. (The exact tipping point where MMS becomes cheaper than stacking segments is broken down in The Exact Message Length Where MMS Gets Cheaper.)
One more thing to avoid: bare link shorteners. Browse texts lean heavily on a product link, and a bit.ly in a marketing message is one of the fastest ways to get carrier-filtered. Use a branded domain instead — here's why.
Where cart-recovery templates carry over — and where they don't
The good news: the writing of a browse text borrows heavily from cart recovery. The intent framing, the urgency, the discount mechanics all transfer. If you've built a solid cart-recovery library, you're most of the way there on copy. The Abandoned Cart SMS Templates breakdown is a fine starting point for tone.
What doesn't transfer is the consent assumption baked into cart recovery. Cart templates assume an identified, opted-in contact because that's who cart abandoners are. Lift those templates onto a browse audience without re-checking consent status, and you've quietly changed who you're texting while keeping copy that assumes permission you may not have.
The practical takeaway
Browse abandonment is a real revenue opportunity — I'm not talking you out of it. But "add to cart" and "looked at a product" are different consent states, and the trigger firing the text can't manufacture consent that wasn't collected earlier.
So before you build the browse flow:
- Split the audience by consent, not by behavior. Only text the browsers who already opted in.
- Give the non-consented browsers an opt-in path instead of a text — a popup, an email link, an exit offer.
- Register it as a marketing campaign, not transactional, so it actually delivers.
- Let automatic STOP handling do the cross-campaign bookkeeping so opt-outs stick everywhere.
If you want to see what a browse campaign actually costs at your volume before you commit, the cost calculator will run the segment math for you, and the 10DLC compliance guide for ecommerce covers the registration side. Build the consent path first. The revenue is more durable when it's defensible.