Your SMS dashboard says the channel drove $47,000 last month on $900 of send spend. A 52x return. You paste it into the deck, the founder nods, budget approved. Then the CFO asks the one question that unravels it: "How much of that would we have made anyway?"
That's the question default attribution windows are designed not to answer. Most SMS platforms count any purchase within some window after a send — often 24 hours, sometimes longer — as revenue the text "drove." A customer who was already going to buy that afternoon gets stamped as an SMS conversion because a promo happened to land in their inbox that morning. The channel takes credit for demand it didn't create.
Full disclosure: I work for Ready, an SMS platform. You'd think I'd want the biggest number possible on your dashboard. But inflated ROI gets a channel killed the moment a skeptical finance person pokes it, and I'd rather you defend a real 8x than get caught overstating a fake 52x. Let's separate the two.
What your platform's default window actually counts
There are two attribution models sitting under most SMS revenue reports, and they measure very different things:
- Click attribution — a customer taps the link in your text and buys within the window. Tighter, more defensible, but undercounts people who see the message and buy later on their own.
- Post-send (view-through) attribution — any purchase by a recipient within X hours of the send gets credited to SMS, whether or not they clicked. This is where the inflation lives.
Post-send windows are the culprit. If you blast 20,000 people and 400 of them buy in the next 24 hours, post-send attribution hands SMS all 400 sales. But some slice of those 400 were coming back regardless — they had an item in cart, they get paid on the 15th, they buy from you every three weeks like clockwork. The text was in the room when the sale happened. It didn't cause it.
The number you actually care about: incremental lift
Incremental lift is the revenue that exists because you sent the text — not the revenue that merely happened after you sent it. It's the only figure that survives a CFO conversation, because it answers "what did we get for the spend?" instead of "what happened to correlate?"
The clean way to measure it is a holdout group. Randomly carve out, say, 10% of your send list and don't text them. Measure the purchase rate in the holdout versus the treated group over the same window. The difference is your lift.
Rough, honest example — treat these as illustrative, not benchmarks:
- Treated group: 18,000 contacts, 3.1% buy in 24 hours → 558 orders
- Holdout group: 2,000 contacts, 1.9% buy in 24 hours → 38 orders → scaled to 18,000 that's a 1.9% baseline = 342 orders
- Incremental orders: 558 − 342 = 216
Your platform's post-send report claimed 558 orders. The real number the send created is 216. That's a 61% haircut — and it's the difference between a defensible metric and a fired channel.
Worked ROI at Ready's actual send cost
Let's cost the send honestly and run both numbers so you can see the gap.
Say the promo is 175 characters with one emoji. Any unicode character drops the segment limit to 70 characters (67 for multipart), so 175 chars splits into three segments. On Ready's Standard tier that's $0.02/segment plus the $0.0045 carrier pass-through, billed separately so the bill stays legible — $0.0245 all-in per segment.
`` Send cost = 20,000 contacts × 3 segments × $0.0245 = 20,000 × $0.0735 = $1,470 ``
Now both ROI numbers, assuming $65 average order value:
| Metric | Orders | Revenue | ROI on $1,470 |
|---|---|---|---|
| Post-send (platform default) | 558 | $36,270 | 24.7x |
| Incremental (holdout-measured) | 216 | $14,040 | 9.6x |
A 9.6x return is a great channel. It's just not a 24.7x one. When you walk into the review with the 9.6x and explain how you measured it, you get trust and budget. When you walk in with 24.7x and someone runs a holdout later, you lose both.
Two notes on the math worth keeping straight:
- If a plain-text version of that promo fit in 160 GSM-7 characters, it's one segment, not three — dropping send cost to $490 and pushing incremental ROI to about 28.6x. The emoji tripled your per-recipient cost. Sometimes the honest ROI improvement is just writing a shorter message.
- Past 50,000 segments in a calendar month, Ready's per-segment rate drops to $0.016 automatically. If you're a high-volume sender, your blended rate isn't a clean $0.016 either — the Growth-tier blended-rate breakdown has that math.
How to set an honest window
You don't need a data science team. You need three defensible choices:
- Prefer click attribution as your headline number. It's tighter and it's causal by definition — the person acted on the message. Report post-send separately, labeled as such, so nobody confuses the two.
- Shorten the window. A 7-day post-send window is almost pure inflation for a promo — a week is enough time for people to buy for a hundred reasons unrelated to your text. A 24-hour click window, or even a 1-hour one for a flash sale, ties the credit much closer to the send.
- Run a holdout at least quarterly. You don't have to hold out every send. Run it on a representative campaign, calculate your lift ratio (in the example above, 216/558 ≈ 0.39), and apply that discount factor to your reported numbers between tests. Now your dashboard's big number has a known haircut baked in.
The holdout is the one that shuts down the "would've happened anyway" objection completely, because you've measured the "anyway" directly.
The costs that never show up in attribution — but hit the same P&L
Attribution debates focus on the revenue side. The other side of honest ROI is the cost side, and some real costs never appear on the send-cost line:
- Unsubscribes are a depreciating asset. Every STOP is a contact you paid to acquire and will never text again. Ready honors STOP automatically and propagates the opt-out across campaigns, which is correct behavior — but it means an over-sending strategy that juices this month's post-send number is quietly burning next quarter's list. If you're sending SMS and email from the same GHL workflow step, you may be doubling that unsub rate without knowing it; the branch-logic post covers why.
- List value is real and measurable. An SMS list is worth several times an email list per contact — until deliverability and churn erode it. The 6x math is here, and it's the counterweight to "just send more."
- Compliance exposure is a tail risk that dwarfs send cost. A single text to a number that never consented carries $500–$1,500 in TCPA statutory exposure. That doesn't show up in any ROI report until it shows up as a demand letter.
The conversation with your CFO, scripted
Here's how the honest version goes. You show up with two numbers and the method:
"Post-send attribution credits SMS with $36K last month, but that counts anyone who bought after a send. We ran a 10% holdout and the real incremental lift is about 39% of that — roughly $14K in revenue we wouldn't have had otherwise, on $1,470 of send spend. That's a 9.6x return. I'll re-run the holdout each quarter to keep the discount factor current."
Nobody argues with that. There's no room to. You've already conceded the point they were going to make and shown you accounted for it. The 9.6x is bulletproof precisely because you didn't try to defend the 24.7x.
The practical takeaway
Your SMS platform's default revenue number is a ceiling, not a measurement. The channel is almost always genuinely profitable — SMS on an opted-in list earns its keep — but the gap between reported and incremental ROI is where credibility gets lost. Prefer click attribution, shorten your windows, and run a holdout a few times a year to learn your real discount factor. Then report the smaller, truer number with confidence.
If you want to run the send-cost side of that math on your own volume, Ready starts with 2,500 free credits, no card required — enough to run a real holdout test on a small campaign and see your actual lift. You can see how the platform is priced and set up here or sign up and pull your first numbers. Measure the increment. Report the increment. Keep the budget.