You send a 5,000-contact blast. The dashboard lights up green: 98% delivered. You close the tab and move on. Two weeks later, revenue from that campaign is a third of what the last one pulled, and nobody can explain why.

The delivery receipt didn't lie to you exactly. It just answered a narrower question than you thought you asked. "Delivered" in SMS reporting rarely means "landed on the handset and the human saw it." It usually means "the carrier accepted the message and didn't hand back an error." Those are very different things, and the space between them is where campaigns quietly die.

Full disclosure: I work for ReadySMS, so I spend a lot of time staring at delivery reports and explaining to customers why green doesn't mean what they think it means. This post is the explanation I give most often.

Three things "delivered" can actually mean

There are at least three distinct states a message can be in when your dashboard says "delivered," and they carry wildly different real-world outcomes.

  • Carrier accepted. The message left the platform, hit the carrier's gateway, and the gateway returned a positive acknowledgment. This is the weakest form of "delivered." It confirms the carrier took custody. It says nothing about whether the message reached the phone.
  • Handset delivered (DLR-confirmed). The carrier passed the message to the recipient's device and returned a delivery receipt (DLR) confirming it. This is the real thing — as close to "it reached the phone" as SMS gets.
  • Silently filtered. The carrier accepted the message, returned no error, and then spam-filtered it into the void. No bounce, no failure code, sometimes even a positive DLR. The recipient never sees it. Your report shows green.

That third state is the killer. Silent filtering doesn't announce itself. A message flagged for spammy content, a bad sending reputation, or a shortened link the carrier distrusts can be swallowed with a receipt that looks identical to a genuine handset delivery.

Why the carrier doesn't tell you it filtered you

You'd think a filtered message would come back with a clear "blocked" status. It usually doesn't, for two reasons.

First, DLR fidelity varies by carrier and route. Some carriers return granular receipts. Others return a generic acknowledgment that means little more than "we received your request." When your platform reports "delivered," it's often reporting the acceptance status, not a true handset DLR, because that's the only signal it got back.

Second, carriers deliberately don't broadcast their filtering logic. If they told spammers exactly which messages got blocked and why, spammers would tune around it. So the filtering is opaque by design. Legitimate senders get caught in the same silence.

The practical result: your reporting is only as honest as the DLR the carrier bothered to send, and "delivered" is frequently the most optimistic reading of an ambiguous signal.

The diagnostic signals that expose the gap

You can't see filtering directly, but you can triangulate it from the metrics around delivery. Here's the pattern I look for.

SignalHealthyFiltering suspected
Delivered rate95–99%95–99% (unchanged — that's the trap)
Reply rate (opted-in list)~20–40% (rough)drops toward single digits
Link click ratesteady vs. baselinecollapses, especially on one link domain
Opt-out (STOP) ratesteadycan drop — nobody's receiving it to reply
Conversion / revenue per sendsteadyfalls off a cliff with no other cause

The tell is that delivered rate stays high while everything downstream falls apart. If people were genuinely receiving your texts, some percentage would click, reply, or opt out. When delivery says 98% but clicks and replies drop 70% week over week, the messages aren't reaching phones. They're being accepted and discarded.

A more precise version: split-test a message across two links — one a public shortener like bit.ly, one your own branded domain — to the same segment. If the branded-domain version gets clicks and the shortener version goes dark despite identical "delivered" numbers, you've isolated content filtering. Public shorteners are one of the most common filtering triggers, and we've written about the mechanism in why shared bit.ly links get silently filtered.

The usual suspects behind silent filtering

When the gap opens up, it's almost always one of these:

  1. Shared or shortened link domains. A bit.ly link shared across thousands of unrelated senders inherits everyone's reputation, including the spammers. Carriers filter on the domain. The carrier reputation mechanism behind link filtering is worth understanding if links are in your messages.
  2. Campaign use-case mismatch. If you registered a "marketing" 10DLC campaign but you're sending transactional appointment reminders — or vice versa — carriers can throttle or filter on the mismatch. This one is sneaky because registration succeeded; the fit is wrong. Details in 10DLC campaign use-case mismatch.
  3. Unregistered or under-registered traffic. Sending on a route without proper A2P 10DLC registration gets you filtered aggressively. Registered brand + campaign is table stakes now, not optional.
  4. SHAFT and content flags. Sex, Hate, Alcohol, Firearms, Tobacco content — plus certain financial and CBD language — gets pattern-matched and dropped. Sometimes it's a single word you didn't think twice about.
  5. Sending reputation. High opt-out rates, spam complaints, and blasting a cold list all degrade the reputation attached to your number, and reputation drives filtering.

What ReadySMS surfaces — and what it can't

Let me be honest about the limits first: no platform can promise a true handset DLR when the carrier only returns an acceptance ack. Nobody can. Anyone claiming 100% delivery visibility is selling you the carrier's optimism repackaged.

What we can do is reduce the filtering that opens the gap in the first place, and give you the surrounding signals to catch it when it happens:

  • Full A2P 10DLC handled in-app — brand and campaign registration (roughly ~$10/mo brand, ~$20/mo campaign, 1–3 day approval). Registered traffic on 10DLC routes is filtered far less than unregistered traffic, so this closes the most common cause of the delivered-but-invisible gap. See the 10DLC explainer.
  • Two-way messaging with an inbound inbox. Replies are your ground truth. If delivery says 98% and your inbox is dead silent on a list that normally replies, that discrepancy is the alarm. Reply data is the cheapest filtering detector you have.
  • Automatic STOP handling and consent capture — keeping opt-out rates and complaint signals clean protects the sending reputation that drives filtering decisions.
  • Litigator/DNC scrubbing and quiet-hours enforcement — fewer bad sends means less reputation damage over time.

The point isn't that ReadySMS makes filtering impossible. It's that most silent filtering traces back to registration, reputation, and content — and those are the exact things the platform is built to keep clean.

A reaction playbook when the gap opens

Delivered rate looks fine but the numbers below it collapsed. Here's the order I work through:

  1. Check the reply and click delta first. Compare this send to your last three healthy ones. If downstream metrics dropped and delivery didn't, assume filtering, not audience fatigue.
  2. Isolate the variable. Did you change the link domain? Add a new phrase? Switch the sending number? Swap emoji in (which also blows up your segment count and cost)? Roll the suspect change back and re-test on a small segment.
  3. Verify campaign use case matches content. A transactional message on a marketing campaign — or the reverse — is a common silent throttle.
  4. Kill public shorteners. Move to a branded/dedicated link domain. This alone recovers a surprising amount of filtered traffic.
  5. Send a small canary batch to your own numbers across different carriers. If your own phone doesn't get it, no report matters.

For a fuller framework on which numbers to trust and which mislead, the SMS metrics that actually matter goes deeper than I can here.

The takeaway

A 98% delivered rate is a starting point, not a verdict. It confirms the carrier accepted your messages — nothing more. Real delivery lives in the downstream signals: replies, clicks, conversions, and opt-outs moving the way they always have. When delivery stays green and everything else drops, believe the everything-else.

Build your reporting around that gap. Watch reply rate against delivery rate, keep your 10DLC registration matched to your actual use case, ditch shared shorteners for a domain you control, and treat your inbound inbox as the honest scoreboard it is.

If you want to see how registered routing and clean reply data change the picture, the 2,500 free credits are enough to run a real canary test on your own list — no card required. Send a batch, watch the replies come back, and see whether your "delivered" number was telling you the truth.