There's a moment in every scaling ecommerce SMS program where the numbers stop making sense. Revenue per send is trending down, unsubscribes are creeping up, and someone in the Slack channel says the quiet part: "Are we texting people too much?"

The answer is almost always yes — and the specific place it breaks is more predictable than you'd think.

Full disclosure: I work for ReadySMS, so I have a horse in the "please keep sending SMS" race. But that's exactly why I care about this. A burned-out list stops sending revenue, and then it stops sending anything, because everyone's opted out. Frequency discipline is how you keep an SMS program alive long enough to be worth having.

The fatigue curve nobody plots until it's too late

Most brands track cumulative unsubscribe rate — a single number that trends up slowly and never sets off alarms. That's the wrong lens. The number that matters is unsubscribe rate per send, conditioned on how many texts that person already got this week.

When you plot it that way, a pattern shows up across a lot of DTC lists. Rough approximations, not gospel — but they hold up:

  • Text 1–2 in a rolling 7 days: unsub rate sits in a comfortable band (call it well under 1% per send).
  • Text 3: it starts drifting up.
  • Text 4 in the same 7 days: unsub rate roughly doubles off that baseline.

The fourth text isn't magic. It's the point where a normal buyer's tolerance runs out. They opted in for deals and order updates, not a daily relationship. Cross that line and the marginal text doesn't just underperform — it actively costs you the subscriber, which kills every future text you'd have sent them.

Revenue per message decays before unsubs spike

Here's the part that stings. Unsubscribes are a lagging indicator. Revenue per send falls first.

Say your first promo of the week pulls $0.18 in attributed revenue per message. By the third send that same week, you might be looking at $0.09 — same list, same offer quality, half the return. People aren't unsubscribing yet; they're just tuning you out. The fourth send is where the tune-out converts into an opt-out.

So you're paying to send messages that (a) earn less and (b) shrink the audience you can monetize next week. That's the compounding cost of over-sending, and it doesn't show up on a single-campaign report. You have to look across the week.

If you're not yet measuring revenue per send by position-in-week, our breakdown of ecommerce SMS conversion metrics is a reasonable place to build the dashboard from.

What over-sending actually costs — the math

Let's put money on it. Assume a 40,000-contact list, and a typical 175-character promo with one emoji. That emoji drops you to unicode encoding — 70 characters per segment, 67 for multipart — so 175 characters is 3 segments.

On ReadySMS Standard pricing, each segment is $0.02 + $0.0045 carrier pass-through = $0.0245 all-in.

One blast:

`` 40,000 contacts × 3 segments × $0.0245 = $2,940 ``

Now suppose that fourth weekly send costs you an extra 0.6% in unsubscribes versus stopping at three — that's 240 people gone, permanently, for a send that already earns half what your first one did. If each SMS subscriber is worth, conservatively, $3–5 over their remaining lifetime on the list, you just spent $2,940 to send a low-return message and torched roughly $720–$1,200 of future subscriber value on top of it.

That's the real price of the fourth text. Not the send cost — the destruction of the asset that makes sending worth anything.

(If you want to run your own list through this, the SMS cost calculator handles the segment math, and the ecommerce ROI calculator covers the revenue side.)

Set the frequency cap at 3, and make it a rolling window

The fix is boring and effective: cap promotional sends at 3 per rolling 7 days per contact, and enforce it at the platform level so nobody can override it with a "just this once" holiday blast.

Two details that matter:

Rolling, not calendar. A Monday–Sunday cap lets you legally send Thursday, Friday, Saturday, Sunday, then the next Monday — five texts in five days across a week boundary. A rolling 7-day window closes that loophole.

Transactional traffic is exempt. Order confirmations, shipping updates, and delivery notifications don't count toward the promo cap — they're expected and welcome, and they're a different 10DLC campaign type anyway. (If your order texts and promos are registered under the same campaign, that's a separate problem; see why campaign use-case mismatch silently drops delivery.)

Here's a workable weekly structure inside the cap:

SlotSendCounts toward cap?
MonWeekly promo / new dropYes
WedSegment-only offer (VIPs, browsers)Yes
FriRestock / abandoned-cart nudgeYes
AnyOrder + shipping updatesNo

Three promotional touches, targeted, plus unlimited transactional. Most lists can absorb that indefinitely.

Build a suppression window with automations

A cap is a rule; a suppression window is how you enforce it without manual list-scrubbing before every send.

Inside ReadySMS automations, the pattern is:

  1. Tag on send. Every promo send stamps the contact with a timestamped tag.
  2. Suppress on next build. When you build the next campaign, exclude anyone tagged within the last 7 days who's already hit 3 sends.
  3. Auto-expire. Tags roll off the window so contacts re-enter the eligible pool naturally.

For GHL users, this rides on the native two-way sync — the send events and tags live in the same location as the rest of the contact record, so your suppression logic and your CRM segments agree on reality. If you haven't wired that up, the GHL SMS integration walkthrough covers the setup.

The other half is honoring the exits you do get. ReadySMS does automatic STOP/opt-out handling — an inbound STOP suppresses the contact across every campaign, not just the one they replied to. That matters here because an over-sent list generates more STOPs, and the last thing you want is to re-text someone who already told you to stop. That's not just annoying; it's TCPA exposure at $500–$1,500 per message.

Segment your way out of the cap

The frequency cap feels restrictive until you realize it's per-contact, not per-campaign. You can send every day — you just can't send the same person every day.

Your top 5% of subscribers can genuinely absorb more, and they should get more, because that top 5% often drives ~40% of SMS revenue. The general list gets 3 touches a week; VIPs might tolerate 4–5. The trick is treating those as separate audiences with separate caps, not one blast that pretends everyone has the same appetite.

The mirror image: some ecommerce moments where SMS just loses to email. Long-form storytelling, catalog browsing, non-urgent education — send those over email and save the SMS slots for things that actually need to be read in the next 20 minutes. Every promo you don't send by text is a slot you bank against the cap.

The practical takeaway

The fourth text in seven days is where a healthy list starts eating itself. You won't see it in a single campaign report — you'll see it in a slow revenue-per-send decline and an unsub rate that ticks up until someone finally asks the obvious question.

So:

  • Cap promos at 3 per rolling 7 days. Exempt transactional.
  • Enforce it with tag-based suppression windows, not manual list edits.
  • Let STOP handling do its job so over-send never turns into re-texting an opt-out.
  • Segment the cap — VIPs get more, everyone else gets discipline.

None of this requires new tooling if you're already sending SMS; it's a matter of wiring the automations and holding the line when a big sale tempts you to break it. If you want to see how the suppression logic and automatic opt-out handling fit together, the pricing and platform overview lays out what's included — and the first 2,500 credits are free, no card, if you'd rather just test the setup on a slice of your list first.