Here's the send that quietly kills a subscriber: it's not the abandoned-cart text, not the flash sale, not the shipping update. It's whichever one happens to be the fourth text that lands in their thread inside seven days. The individual message is fine. The count is what triggers the STOP.

Full disclosure: I work for Ready, an SMS platform. So I have a stake in you sending more texts, not fewer. Which is exactly why I want you to read this — because the fastest way to send fewer profitable texts over a year is to churn your list by overmailing it this month.

Most ecommerce SMS programs don't have a message problem. They have a coordination problem. Five different flows, each reasonable on its own, all firing at the same 30-day repeat buyer with no shared awareness of what the others sent.

The unsub curve isn't linear — it kinks

If you plot unsubscribe rate against weekly send frequency, you don't get a smooth line. You get a floor that holds, then a cliff.

Rough industry approximations — treat these as directional, not gospel, and measure your own list:

Texts per weekTypical unsub rate per sendWhat's happening
1~0.2–0.5%Baseline. Barely noticed.
2~0.3–0.6%Still fine for most lists.
3~0.5–0.9%Edge of tolerance for loyal buyers.
4~1.0–2.0%The cliff. Doubles for many segments.
5+~2%+ and climbingActive list destruction.

The exact numbers vary by vertical and how well you segment. But the shape is consistent: something breaks around text three-to-four in a rolling seven days. That fourth text isn't earning much — the people who'd buy from it mostly bought from texts one through three — and it's carrying most of the churn.

We dug into where that peak sits and why in Finding your revenue-per-send peak. This post is about the operational half: how you actually enforce the cap once you know where it should be.

Where revenue-per-send goes negative

Run the money, because "unsubs feel bad" doesn't survive a marketing meeting; lost revenue does.

Say you have 20,000 SMS subscribers. A well-targeted send to them produces maybe $0.15–$0.30 in attributed revenue per recipient early in the week. By the fourth send, incremental revenue per recipient has decayed — call it $0.05, because you're re-hitting people who already converted or already tuned out.

Now the cost of that fourth send:

  • Send cost: 20,000 × 1 segment × ($0.02 + $0.0045 carrier) = $490 on Ready Standard.
  • Churn cost: if the fourth text pushes unsub from ~0.6% to ~1.5%, that's an extra ~0.9% of 20,000 = 180 subscribers gone, permanently.

If an SMS subscriber is worth several dollars over their lifetime — and they usually are, more than an email subscriber — those 180 lost people represent hundreds to low-thousands of dollars in future revenue you just traded for maybe $1,000 of incremental sales today. On the next send, they're not there anymore. The math compounds against you.

That's the real cost of overmailing: not the $490 send, but the shrinking denominator on every send after it.

The problem is overlap, not any single flow

Nobody sits down and decides to text someone four times in a week. It happens because your flows don't know about each other:

  • Post-purchase thank-you fires day 0.
  • Shipping update fires day 1–2 (transactional, but it's still a text in the thread).
  • Cross-sell / replenishment flow fires day 5.
  • Weekly promo campaign goes out day 6.
  • A back-in-stock or browse-abandonment trigger sneaks in somewhere.

Each is defensible. Together they're a four-to-five-text week for a fresh buyer who's mid-honeymoon and should be your happiest segment. Instead they hit STOP, and now they're gone from cart recovery, birthday, and every future launch too.

This is why a per-flow frequency setting isn't enough. A cap that lives inside your cart-recovery flow has no idea your promo campaign already went out this morning. You need a cap that sits above every flow and counts total sends per contact.

Enforce one cap across every flow

The rule you actually want is something like: no more than 3 marketing texts to any contact in a rolling 7-day window, and never inside quiet hours. Transactional order/shipping updates can be exempted — they're expected and consent-covered differently — but count them if they're getting chatty.

How to make that real in Ready:

  1. Tag on send. Every marketing automation stamps the contact when it texts them. Because inbound and outbound sync two-way (and into GoHighLevel for connected accounts), you have one thread per contact that reflects everything, not one flow's view.
  2. Gate the trigger. Before any promotional flow sends, check the last-7-days send count and skip the contact if they're at cap. The message doesn't get suppressed inside one flow — it gets held at the account level so overlapping flows respect the same ceiling.
  3. Let STOP do the rest. Ready honors STOP automatically and propagates the opt-out across every campaign, so a contact who bails from one flow can't be re-messaged by another. That's a compliance requirement, not a nicety — but it's also your last-line frequency defense when a cap leaks.
  4. Respect the clock. Quiet-hours enforcement holds sends outside permitted local hours based on the recipient's area, so your cap logic doesn't accidentally fire a "3rd of 3" text at 7am someone's time. If you ship across time zones, the multi-timezone quiet-hours gap will bite you before your frequency cap ever does.

Invert the cap by lifecycle stage

A flat "3 per week for everyone" is a fine starting point, but it's blunt. The counterintuitive finding: fresh subscribers tolerate more texts than loyal buyers do.

New subscribers are in discovery mode — they opted in for a reason, they want to hear from you, and four texts a week doesn't faze them. Your repeat buyers, meanwhile, already know you and unsub faster from the same cadence because the novelty's gone and the noise is obvious.

So the cap should invert over the lifecycle:

  • First 14 days post-opt-in: up to ~4/week is usually fine.
  • Repeat buyers / loyal segment: ~2/week, tightly targeted.

We broke this pattern down in why your frequency cap should invert by lifecycle stage. Set it up as two segments with two ceilings, and let each flow check the ceiling that applies to the contact it's about to text.

What actually earns the extra send

If you're going to spend a text against the cap, spend it on the flows that carry the revenue. Automated triggers — cart recovery, browse, post-purchase, replenishment — tend to punch far above their volume share of the total program. Fewer sends, more revenue per send, better tolerance because they're contextual and timely.

So when the cap forces a choice between a triggered flow and a broadcast blast, the trigger usually wins on incremental value. Post-purchase engagement flows in particular build the relationship instead of taxing it — a well-timed "how'd it go?" or replenishment nudge reads as service, not spam, and rarely eats into your churn budget.

The blast is where you're most tempted to overmail and least rewarded for it.

The practical takeaway

  1. Find your kink. Plot unsub rate against weekly frequency for your own list. Most brands find the cliff at three-to-four texts in seven days.
  2. Set one account-level cap, not a pile of per-flow ones — because per-flow caps can't see each other, and overlap is the whole problem.
  3. Invert it by lifecycle: more for new subscribers, less for loyal ones.
  4. Let automatic STOP handling and quiet-hours enforcement be your backstop when a cap leaks — they're on by default and they don't forget.
  5. Spend the capped send on triggered flows, not another broadcast.

The goal isn't to send less. It's to keep the list alive long enough to send more, profitably, next quarter. A subscriber you didn't burn out this week is still there for the holiday launch.

If you want to see how the send counting and cap gating fit together with two-way sync and STOP propagation, the product and pricing details are here — or you can start with 2,500 free credits and wire up a capped flow yourself before you commit a dollar.