Most ecommerce brands track SMS revenue in a single column: total dollars attributed to text. That number almost always goes up when you send more. Send four blasts instead of three, revenue rises. Send five, it rises again. So the logic writes itself — send more.
The problem is that column ignores the cost side, and not the obvious cost. The per-segment fee is trivial. The expensive part is the subscribers you burn off the list every time you push send, because a churned subscriber takes their entire future lifetime value with them. Once you price that in, the revenue curve stops being a straight line up. It peaks, then falls. Your job is to find the peak.
Full disclosure: I work for Ready, an SMS platform. I'm going to use our per-segment pricing in the math because it's transparent and I know the exact numbers — but the framework works no matter who sends your texts.
The number nobody puts in the same spreadsheet
Here's the mental error. You look at send #5 and see it generated, say, $3,100 in attributed revenue against maybe $50 in send cost. Obvious win. Ship it.
But send #5 also unsubscribed 0.9% of your list instead of the 0.4% send #2 did. Fatigue is nonlinear — the 4th text in 7 days is roughly where unsub rates double. Those churned subscribers aren't a rounding error. Each one was going to buy from you again, over and over, for months. When they opt out, you don't just lose this month's revenue from them — you lose all of it, forever, and you can't legally re-message them.
So the honest equation for any incremental send is:
Net value of send = (revenue this send drives) − (send cost) − (subscribers churned × their lifetime value)
The first term is what your platform shows you. The third term is invisible unless you build it yourself. It's also the term that grows fastest as frequency climbs.
What an SMS subscriber is actually worth
You can't price churn without a subscriber lifetime value. Keep it simple:
Subscriber LTV = (avg revenue per subscriber per month) × (expected months on list)
Say your 20,000-person list drives $40,000/month across all sends. That's $2/subscriber/month. If a healthy SMS subscriber stays opted in for ~18 months before naturally going quiet or churning, their LTV is roughly $36.
That's the number you're spending every time someone hits STOP. Not $2. Thirty-six dollars. SMS subscribers are worth 3–5x an email subscriber precisely because they convert and stay — which is exactly why burning them is so expensive.
Round however you like. The point is you now have a per-churn price tag, and it's an order of magnitude bigger than the per-segment fee everyone obsesses over.
Worked example: five sends to a 20,000-person list
Let's run a full month. List of 20,000. Each message is a 155-character promo with an emoji — that emoji drops you to unicode, so a message over 70 characters splits into three segments (67 chars each for multipart unicode). On Ready Standard that's 3 × ($0.02 + $0.0045) = $0.0735 per recipient per send.
Send cost per blast: 20,000 × $0.0735 = $1,470. (Drop the emoji and you're at one GSM-7 segment, ~$0.0245 each, $490 a blast — but that's a different post on segment math. We'll keep the emoji here to be conservative.)
Subscriber LTV: $36. Here's each send, with revenue tapering and unsub rates climbing the way fatigue actually behaves:
| Send # | Attributed revenue | Unsub rate | Subs lost | Churn cost ($36 ea) | Send cost | Net |
|---|---|---|---|---|---|---|
| 1 | $12,000 | 0.30% | 60 | $2,160 | $1,470 | +$8,370 |
| 2 | $8,500 | 0.35% | 70 | $2,520 | $1,470 | +$4,510 |
| 3 | $5,400 | 0.50% | 100 | $3,600 | $1,470 | +$330 |
| 4 | $3,600 | 0.90% | 180 | $6,480 | $1,470 | −$4,350 |
| 5 | $2,900 | 1.30% | 260 | $9,360 | $1,470 | −$7,930 |
Read that column on the right. Send #1 nets you $8,370. By send #3 you're barely above break-even. Send #4 is a $4,350 loss. Send #5 loses nearly eight grand — despite showing $2,900 in "revenue" your platform will happily report as a win.
The revenue column never went negative. The net column went negative two sends earlier than anyone watching revenue would notice.
The curve, in one sentence
Revenue per send declines because the eager buyers already bought. Churn cost per send increases because fatigue compounds. Those two lines cross somewhere in the middle of your month. Every send past the crossing point is you paying to shrink your own list.
For this list, the peak cumulative net lands right around send #3. That's your frequency cap — not because someone on a blog said "3–4 texts a month is best practice," but because your own math says the 4th one costs more than it makes.
Your numbers will differ. A brand with $60 LTV subscribers hits the cliff sooner (churn is more expensive). A brand with genuinely urgent, differentiated offers each send keeps revenue from tapering as fast and can push further. Run your inputs.
The two inputs that move your cap most
If you only measure two things, measure these:
- Unsub rate per send, tracked by position in the month. Not your average unsub rate — the rate on send #1 vs #4 vs #5. The jump between them is the whole story. Most platforms let you pull this; Ready's automatic STOP handling logs every opt-out and propagates it so a churned contact can't be re-messaged across campaigns, which also means your unsub data is clean.
- Attributed revenue that's actually incremental. Careful here. A 24-hour attribution window will credit SMS for sales the customer was going to make anyway. If send #4 "drove" $3,600 but half those people were coming back regardless, its true incremental revenue is $1,800 — and it flips net-negative even faster. Inflated attribution hides the cliff.
Get honest on both and the cap almost sets itself.
Where the extra send does pay off
The cap isn't the same for every subscriber, and this is where blanket frequency rules leave money on the table. Your top 5% of subscribers — the ones who buy repeatedly and rarely unsub — have a much higher tolerance and a much higher LTV. For them, send #5 might still be net-positive because their churn rate barely moves. Those subscribers can absorb more sends profitably, and segmenting them out is how you extend frequency without paying the churn tax.
So the real move isn't "cap everyone at 3." It's:
- Cap the broad list at whatever send number your net column peaks (often 3–4).
- Send more to the VIP segment, where the math stays positive further out.
- Send less — or not at all — to fatigued or lapsed contacts, where even the win-back math has a hard cost ceiling.
That's three different caps for three groups, each set by its own revenue-per-send curve. Transparent per-segment pricing makes this legible — when you can see exactly what a 4,000-person VIP blast costs (4,000 × $0.0735 = $294) against its net, the decision stops being a guess.
Build your own version in ten minutes
You don't need a data team. In a spreadsheet:
- Pull the last month's sends. For each, record attributed revenue and unsub count.
- Compute subscriber LTV once: (monthly SMS revenue ÷ list size) × expected months on list.
- For each send, subtract send cost and (unsubs × LTV) from revenue.
- Find the send number where cumulative net stops rising. That's your cap.
- Repeat for your VIP segment separately. Its cap will be higher.
If you want the send-cost side pre-filled, our ROI calculator post walks the segment math, and the pricing that feeds it lives on the Ready product page — Standard is $0.02/segment plus the $0.0045 carrier pass-through, billed separately so the math stays clean.
The takeaway is small and unglamorous: the send that looks free-and-profitable in your revenue dashboard is often the one quietly costing you the most, because it's spending subscriber LTV your dashboard never priced. Put churn cost in the same spreadsheet as revenue, find where the net column peaks, and stop one send earlier than feels natural. Your list — and next quarter's revenue from it — will thank you.
If you want to run these numbers on your own list without wrestling a spreadsheet, you can start with 2,500 free credits, no card required, and watch the unsub-vs-revenue curve on real sends.