Abandoned cart SMS works when the shopper gave written consent to marketing texts before they left, and you send one to three short, branded texts (about 1 hour, about 24 hours, and optionally about 48 to 72 hours after abandonment) with a link on a domain you own. Skip any of those three parts, and you either lose the sale or take on TCPA exposure that costs far more than the cart was worth.
This guide covers the full setup. It explains the consent you need before the first abandoned cart text message goes out, a timing plan you can copy, templates with and without discounts, how to handle links so carriers don't filter you, and a worked build using Ready's API, webhooks and drip campaigns. We make Ready, so the code examples use our API. The consent and timing advice applies to any sender.
Consent comes before the cart
Cart abandonment SMS counts as marketing. You are trying to get someone to buy, so it is not a transactional text like a shipping notice. Under the TCPA, automated marketing texts need prior express written consent. A phone number typed into a checkout field is not consent on its own.
What a compliant capture looks like at checkout:
- A separate, unchecked checkbox. Never pre-check it, and never bundle it with "I agree to the terms."
- Clear disclosure next to it. Include the brand name, that the shopper will get recurring automated marketing texts, that consent is not a condition of purchase, that message and data rates may apply, the expected frequency, and how to reply STOP to opt out and HELP for help. Link your terms and privacy policy.
- Capture before the abandonment point. If the checkbox only appears on the payment step, the shoppers who leave at shipping never consented. Put it where the phone number is first collected.
- Keep the record yourself. Your store keeps the per-contact proof: timestamp, the exact checkbox wording, the page URL and IP. On Ready, an API send that sets the
consent_attestedflag records your attestation for that send (who sent, to how many, when). That gives you an audit trail of your sends. It is not a per-contact consent record, so your store's record is the one that matters if a consent dispute comes up.
TCPA exposure runs about $500 to $1,500 per text. Several states also have their own texting rules on top of the federal law. Compliance is the sender's responsibility, so have counsel look at your checkout wording once. That review is cheap insurance. Nothing here makes you lawsuit-proof. It lowers the risk.
If you also want known TCPA litigators and DNC complainers screened out before you text, Ready's standalone TCPA & DNC Litigator Scrub costs $0.005 per contact. You pay only for the numbers you scrub.
Abandoned cart SMS timing: a three-text plan
Most of the value is in the first text. Each later text recovers less and adds opt-outs, so keep the drip campaign short.
| Step | When | Goal | Discount? |
|---|---|---|---|
| 1 | ~1 hour after abandonment | Reminder plus link back to the saved cart | No |
| 2 | ~24 hours | Answer objections, invite a reply | No |
| 3 (optional) | ~48 to 72 hours | Final nudge | Optional, capped |
A few rules that matter more than the exact minutes:
- Check order status before every step. Someone who bought on their phone 10 minutes ago should never get "you left something behind." This is the most common abandoned-cart mistake, and it creates complaints.
- Respect quiet hours. A cart abandoned at 10:40 PM should not trigger a text at 11:40 PM. On Ready, a send that falls in the recipient's quiet hours is held and goes out later, based on their area, and you are charged only when it sends. Your timer should still account for this. The held text may land the next morning, so check order status again at that point. Our best time to send SMS marketing post covers send windows in more detail. Campaigns, drip campaigns and automations wait up to 24 hours for the window; a one-to-one or API text is held only if the window opens within 6 hours, otherwise it is refused and must be resent; a one-to-one reply to someone who texted you in the last 24 hours goes out at any hour.
- One drip campaign per cart, not per visit. If the shopper comes back and abandons again, restart the clock rather than stacking a second drip campaign on top of the first.
- Stop at three. A fourth text mostly produces STOP replies.
Templates with and without discounts
The examples below use a made-up store, "Northwind Supply." Each one is plain GSM-7 text with no emoji, so each fits in a single 160-character segment.
Text 1: reminder, no discount (~1 hour)
Northwind Supply: you left the Trail Pack 30L in your cart. It's saved here: nwsupply.co/c/8KQ2 Reply STOP to opt out.
The text names the brand first, names the product, gives one link and includes opt-out language. The first message in a drip campaign should always say how to stop.
Text 2: objection handling, no discount (~24 hours)
Northwind Supply: still deciding on the Trail Pack? Reply with a sizing or shipping question and our team will answer. Your cart: nwsupply.co/c/8KQ2
Inviting a reply often works better than a coupon, because the shopper's real blocker is usually a question. On Ready, replies land in the Inbox and are answered by a person. Ready's AI writer never sends a reply on its own. Each reply is billed like a sent text: the per-segment rate plus the carrier fee.
Text 3: with a discount (~48 to 72 hours)
Northwind Supply: here's 10% off to finish your order. Code TRAIL10, good for 48 hours: nwsupply.co/c/8KQ2 Reply STOP to opt out.
Text 3 alternative: no discount, low-stock or last call
Northwind Supply: last reminder, your cart expires soon. Pick up where you left off: nwsupply.co/c/8KQ2 Reply STOP to opt out.
Should you discount at all?
Discounting has a real tradeoff. If every abandoned cart gets 10% off, regular shoppers learn to abandon on purpose. Practical limits:
- Offer the discount only on step 3, never step 1.
- Give one discount per customer per 90 days or so.
- Skip the discount on high-margin or low-stock items, and use the plain last-call version instead.
- Use a unique single-use code per cart if your store supports it, so codes don't get shared.
Link handling that avoids carrier filters
Getting your registration approved doesn't guarantee delivery. Carriers also filter by content, and links are the main thing they check. Our post on content-level blocking after approval covers this in depth. For cart texts, these are the rules that matter:
- No public link shorteners. Generic shared shortener domains are heavily abused by spammers and get filtered often. Use a short domain or subdomain you own (like
nwsupply.co/c/...). - Match your registered website. The link domain should clearly belong to the brand on your 10DLC registration.
- One link per text. Two links in a 140-character message looks like phishing.
- Keep redirect chains short. Shortlink to cart page is fine. Several hops through tracking domains is not.
- Put the same link format in your registration samples. If your sample messages show
nwsupply.co/c/..., your live traffic should look the same.
Registration: pick the right campaign use case
Cart recovery is marketing, so register it that way. If you also send order confirmations and shipping updates from the same numbers, choose a use case that covers both. Our use-case picking guide walks through the options. Your sample messages should include a real cart template, the opt-out language and your link format.
On Ready, registration is handled in the app. There is no setup fee. The charge when you submit is the first month, $25. After that the monthly cost is $25 for registration + $2 per number. Most approvals take 2 to 7 days. A fresh standard campaign typically gets roughly 1 to 4 segments per second. That is plenty for cart texts, which trickle out one at a time rather than going out as a big campaign.
Worked example: the build on Ready
The trigger comes from your store, not from us. Your ecommerce platform (or your own checkout code) emits an abandoned-checkout event. Your job then waits about an hour, confirms there is no order, checks consent, and calls Ready.
Step 1: send the first text
POST https://api.tryready.com/v1/messages
X-API-Key: <your key>
Idempotency-Key: 3f6c1a2e-8b4d-4e7a-9c1f-2d5e7b8a9c10
{
"to": "+12125550199",
"body": "Northwind Supply: you left the Trail Pack 30L in your cart. It's saved here: nwsupply.co/c/8KQ2 Reply STOP to opt out.",
"consent_attested": true
} Generate the Idempotency-Key deterministically from the cart ID and step number. That way a retried job, or a webhook your store delivered twice, never texts the shopper twice. Full request options are in the messages API docs.
Steps 2 and 3: your timer or a drip campaign
You have two options for the follow-ups:
- Run the timer yourself. Schedule steps 2 and 3 in your own job queue. Before each one, check order status and call
GET /v1/opt-outs/:phone, then send withPOST /v1/messagesagain. You get the most control, and the purchase check happens right before each send. - Use a Ready drip campaign. Hold steps 2 and 3 in a drip campaign and enroll the contact after step 1. This means less code. Check the quickstart and the docs for how enrollment and removal work, so a shopper who completes checkout drops out before the next step.
Listen for replies and opt-outs
Subscribe to Ready's webhooks so inbound replies and opt-outs reach your system. Event names and payloads are in the docs. When someone texts STOP, Ready honors it and the opt-out applies across every campaign. A later send to that number is refused up front and not charged. Known landlines and numbers on your Ban list are refused the same way.
What it costs
This example assumes 1,000 abandoned carts a month from consented shoppers. It also assumes 800 haven't bought by step 2 and 700 by step 3. Every template is one segment.
- Texts sent: 1,000 + 800 + 700 = 2,500 segments
- Ready Standard rate: 2,500 × $0.0075 = $19
- Carrier fees: 2,500 × $0.0045, itemized separately
- Replies: billed the same way per segment
That all-in figure excludes the compliance surcharge. Scrubbing and landline validation are each $0.003 extra per segment when switched on for an account, and both are off by default.
Now add a single emoji to a 130-character template. The segment limit drops to 70 characters, so the text becomes 2 segments, and the same month costs 5,000 × $0.0075 = $38 plus 5,000 × $0.0045. That emoji doubles your bill. Ready swaps curly quotes and long dashes for plain ones before sending, so copy pasted from a doc won't silently change the segment count. Emoji will.
Is this the right tool for you?
If you run a single store, the cart-recovery feature built into your ecommerce or email platform may be all you need, and that's fine. Ready fits best when you're a platform texting on behalf of many merchants. Each merchant gets a sub-account with its own numbers and its own 10DLC registration. It also fits when you want the API, the compliance stack and a two-way inbox in one place. Our Attentive alternative post compares the options.
The practical takeaway
Get written consent at the step where the phone number is collected, and keep that record on your side. Send at most three texts, and check for a purchase before each one. Keep each template to one segment, link from a domain you own, and save the discount for the last text. If you want to try the API, the first 20 one-to-one texts are free with a card on file. Use them to test your templates before you register, because they end once registration is paid. You can sign up here.
FAQ
What is an abandoned cart text message? It's a text sent to a shopper who started checkout and didn't finish. It reminds them of the item and links back to the saved cart. Because it encourages a purchase, it is treated as marketing, not a transactional message.
Do I need consent to send cart abandonment SMS? Yes. Automated marketing texts need prior express written consent under the TCPA, typically through a separate, unchecked checkbox with clear disclosure. Your store keeps the per-contact consent record. Ready records your per-send attestation.
How many abandoned cart texts should I send? One to three. Send about 1 hour, about 24 hours and optionally about 48 to 72 hours after abandonment. Each additional text recovers less and adds opt-outs.
Can I use a link shortener in cart texts? Avoid public shared shorteners, which carriers filter often. Use a short domain or subdomain you own that matches the website on your registration, and send one link per text.
What does a three-text cart drip campaign cost on Ready? At one segment per text, each text is $0.0075 plus a $0.0045 carrier fee, before any compliance surcharge you switch on. With 1,000 carts and the drop-off assumed above, that's 2,500 segments, or $19 plus carrier fees. Replies are billed the same way.