A customer gets your Tuesday promo, gets annoyed, and thumbs back a reply. But instead of typing "STOP" — the word your footer told them to use — they type what a human actually types when they're irritated: "cancel", "remove me", "stop texting me please", or my personal favorite, "leave me alone."
Your STOP automation sees none of that. The keyword filter is looking for an exact match against a short list of carrier-recognized words, and "leave me alone" isn't on it. So the contact stays active. Your next blast goes out. And now you've texted someone who told you — in plain English — to stop, which is exactly the fact pattern a TCPA plaintiff's attorney wants to see.
Full disclosure: I work for Ready, an SMS platform. STOP handling is something we automate, and I'll get into how the automated part works and where it stops being enough. But this problem isn't Ready-specific. Every sender on 10DLC has it.
What the carrier STOP list actually covers
The carriers auto-recognize a fixed set of opt-out keywords. On most 10DLC routes that's:
- STOP
- STOPALL
- UNSUBSCRIBE
- CANCEL
- END
- QUIT
When an inbound message is exactly one of these words (case-insensitive, usually tolerant of surrounding whitespace), the carrier itself suppresses further traffic and sends the standard opt-out confirmation. This happens at the network level, below your platform. It's reliable and it's the baseline every compliant sender inherits.
In Ready, that baseline is wired in: inbound STOP/UNSUBSCRIBE is honored automatically, and the opt-out propagates across campaigns — so the contact can't be re-added and messaged from a different workflow or blast. That cross-campaign propagation is the part people forget to build themselves and then get burned by.
But notice the shape of the list. It's exact-match keywords. It is not intent detection.
Where the exact-match model breaks
Real humans don't reply in keywords. Here's a sample of what actually lands in an inbox that a strict STOP filter lets sail right through:
| What they type | Clear opt-out intent? | Triggers carrier STOP? |
|---|---|---|
STOP | Yes | Yes |
CANCEL | Yes | Yes |
stop texting me | Yes | No (extra words) |
please remove me | Yes | No |
take me off this list | Yes | No |
quit sending these | Yes | No |
leave me alone | Yes | No |
no thanks, done | Yes | No |
unsubscribe pls | Yes | No |
who is this | Ambiguous | No |
new phone, who dis | No | No |
The middle chunk of that table is the danger zone. Every row from stop texting me down to unsubscribe pls is an unambiguous opt-out that a jury would read as an opt-out — and none of them fire the carrier keyword. Because there's an extra word attached, the exact-match filter treats the whole string as ordinary two-way conversation.
Some carriers do fuzzy-match a few of these. Don't rely on it. The matching behavior varies by route and provider, and "sometimes the carrier caught it" is not a defense you want to bring to a TCPA claim where exposure runs $500 to $1,500 per text.
Why this is a real TCPA problem, not a nitpick
The legal standard for revoking consent under the TCPA is not "used the magic word." Courts have repeatedly held that a consumer can revoke consent by any reasonable means — any expression that clearly communicates they no longer want messages. "Stop texting me" revokes consent just as fully as "STOP" does, and the FCC has affirmed that senders can't force a single rigid opt-out method.
So the compliance gap is this: the carrier's automation only catches the narrow keyword case, but your legal obligation covers the whole natural-language spectrum. Every message you send to someone who typed "leave me alone" three days ago is a separate violation. Blast that person twice a week for a month and you've stacked eight violations — call it $4,000 to $12,000 of exposure from one contact you should have suppressed on day one.
This is the same category of problem as an AI reply agent chatting someone past their opt-out intent — worth reading the guardrail piece on keeping automated replies compliant if you're running any kind of auto-responder.
Building intent-based opt-out detection
You need a second layer above the carrier keyword filter that reads for intent, not exact strings. Three ways to do it, in increasing order of robustness.
1. Expand your keyword/phrase list
The cheapest fix. Add a suppression rule that fires on any inbound message containing opt-out phrases, not just equaling them:
stop,unsubscribe,remove,cancel,quit,opt out,optout,endtake me off,leave me alone,don't text,dont text,no more,not interested,lose my number
Match on substring, case-insensitive. So please remove me from this list fires on remove. This catches maybe 80% of real-world variants for near-zero effort.
The tradeoff: substring matching over-fires. "I don't want to cancel my appointment, keep the texts coming" would get suppressed. And it under-fires on typos and creative phrasings. It's a floor, not a ceiling.
2. Route ambiguous replies to a human
Anything that isn't a clean keyword and isn't a clean opt-out phrase should surface in your inbox as needs review rather than being silently ignored. Ready's two-way conversations inbox lands every inbound reply in-app (and inside GoHighLevel for connected accounts), so a real person can read "who keeps texting me??" and make the call to suppress. The failure mode you're avoiding is the reply that nobody ever reads because it didn't match anything.
3. Use intent classification on inbound
This is where an AI layer earns its keep. Ready's optional AI-assisted replies can run in suggest or auto mode on inbound conversations — and the more valuable job for it here isn't drafting witty replies, it's classifying intent. "Does this message express a desire to stop receiving texts?" is exactly the kind of fuzzy natural-language judgment a model is good at and a substring match is bad at. It'll catch enough already, pls no more of these, and k unsubscribe thx that a keyword list misses.
The guardrail — and I mean this seriously — is that an intent classifier should only ever be trusted to add suppressions, never to override or "talk someone out of" one. If the model is uncertain, it escalates to a human. It should never decide someone didn't mean to opt out and keep them on the list. Err toward suppression every single time. A false opt-out costs you one lost contact. A missed opt-out costs you $500 to $1,500 a text.
A layered opt-out workflow that actually holds up
Stack the defenses. Any one layer alone has holes:
- Carrier keyword filter (automatic) — catches exact STOP/CANCEL/QUIT/etc.
- Expanded phrase suppression (substring match on ~15 phrases) — catches "stop texting me", "remove me", "leave me alone".
- Intent classifier or human review on everything that isn't obviously conversational — catches the creative and typo'd cases.
- Cross-campaign propagation — once suppressed, the contact is dead across every workflow, blast, and sub-account, not just the one they replied to.
- Audit trail — log when and how each opt-out was captured. If a claim ever surfaces, "here's the inbound message and the timestamp we suppressed on" is the record that ends the conversation.
Ready handles layers 1, 4, and 5 as part of the compliance stack, gives you the inbox for layer 2 and 3, and offers the AI agent for the classification piece. But you own the phrase list and you own the escalation policy. Compliance is ultimately the sender's responsibility — no platform makes you lawsuit-proof, and anyone who tells you otherwise is selling something.
The 20-minute audit worth running today
Pull your last 90 days of inbound messages. Search — by hand or with a quick filter — for the phrases in the list above among contacts who are still marked active. Every hit is someone who told you to stop and is still on your list. That's your live exposure, quantified.
Then fix the suppression rules so the next one gets caught. If you're on GoHighLevel and want to also check you're not double-texting people through overlapping workflows, the workflow-audit walkthrough pairs well with this, and the broader consent-securing guide covers the front end of the same problem.
The takeaway is simple: the carrier STOP filter is a floor, not a fence. It catches the word "STOP" and not much else. Real people opt out in sentences, and every sentence you ignore is a countable violation. Build the second layer.
If you want the automated STOP handling, cross-campaign propagation, and the inbox to catch the rest already wired together, you can start on Ready with 2,500 free credits, no card required, and see how the whole compliance stack fits — the full product and pricing details are here.