The most frustrating thing about business SMS isn't that it's hard to set up. It's that messages can fail silently — your dashboard says "delivered," your customer says "I never got that," and there's no error code that tells you why. We're going to walk through the common reasons messages fail to actually reach a recipient, in roughly the order to check them.
This is a companion to our pillar guide on business SMS in 2026. Read that first if you're new to 10DLC; this post assumes you have the basics down and your messages have been sending — they're just not landing reliably.
"Delivered" doesn't mean "seen"
The first thing to internalize: most messaging platforms report delivery to the carrier, not delivery to the recipient. When your dashboard shows a green checkmark, the message was accepted by the recipient's mobile carrier — that's it. Several things can still happen between that point and the recipient seeing it:
- The carrier's spam filter intercepts the message and silently drops it.
- The carrier delivers it to the device, but the device's own filter (iOS Filter Unknown Senders, Android spam folder) routes it away from the main inbox.
- The recipient has previously blocked your number, and the device suppresses it.
- The carrier accepts the message but throttles it because you exceeded your campaign's messages-per-second cap.
Of those, carrier filtering is the most common and least visible. Carriers don't typically tell you why they filtered something. You see "delivered," they see nothing.
The diagnostic mindset: don't trust dashboard delivery numbers as the ground truth. Track engagement — replies, opt-outs, link clicks — as the real signal. If engagement collapses while delivery numbers stay high, you have a filter problem.
The most common causes, ranked
In rough order of how often they're the actual culprit:
1. Your campaign isn't approved yet (or got revoked)
Pre-flight check: go look at your campaign status in your messaging platform. Is it actually Approved? Or is it Pending, Failed, or Revoked?
Campaigns can be pending for 24–72 hours after first submission. They can also be silently downgraded or revoked later if your sending pattern starts to look like something other than what you registered. A campaign registered for "Customer Care" that suddenly starts blasting promotional content can get flagged and have throughput cut.
If status is anything other than Approved, no other troubleshooting matters. Fix the registration first.
2. Content patterns that trigger filters
Carrier filters don't publish their rules, but the patterns are well-known to anyone who's gotten messages filtered:
- Public URL shorteners. bit.ly, tinyurl, t.co, anything that obscures the destination. Heavily penalized across all carriers. Use a branded short-domain you own (the kind that looks like
txt.yourbrand.com), or just write the full URL. - All caps, multiple exclamation marks, urgency language. "ACT NOW!!" is a filter magnet.
- Money symbols + numbers. "$$$ off!" and "Win $500" both get flagged. Even legitimate promotional messages should avoid the spam-pattern phrasing.
- Generic "this is a test" content. Filters down-rank messages that look like they're from someone testing the system. Don't send "test" as your first three messages — start with real content.
- Mismatched content. If your campaign is registered for appointment reminders, sending coupons from the same number gets flagged.
3. Number reputation (especially for new numbers)
Every long code carries a carrier-side reputation score. New numbers start at zero and have to build up. The first 2–4 weeks on a new number, expect a higher filter rate even if everything else is correct.
What helps reputation build:
- Steady, predictable volume (50–500 messages/day every day beats 10,000 once a week).
- High engagement from recipients (replies, link clicks, low complaint rate).
- Inbound replies — even just opt-out requests count, because they prove the number is being used for two-way communication.
- Avoiding any of the content patterns above.
What hurts:
- Blasting your full list on day one.
- High opt-out rate in the first week.
- Bouncing a lot of numbers (sending to disconnected or invalid numbers signals list quality issues).
- Cycling to a new number every time you have a problem — the reputation damage attaches to your brand, not just the number.
4. Throughput limits
Each campaign has a max messages-per-second your number is allowed to send. The number depends on your brand vetting score and use case. Send too fast and the carrier throttles — messages queue up server-side and either send late or drop.
If you're trying to hit 10,000 customers in two minutes, you're hitting throughput limits. Either spread the send out, register for a higher use-case tier, or get your brand vetted for higher throughput.
5. Recipient device-level filters
iOS has Filter Unknown Senders enabled by default. Android distributions vary. These filters look at sender reputation and content patterns to route unfamiliar senders away from the main inbox.
The fix isn't on your side — once a recipient saves your number to their contacts, device-level filtering goes away for that recipient. So a soft prompt early in your messaging flow ("Save this number so you don't miss future updates from us") meaningfully improves long-term delivery.
6. Recipient-side blocks
If a recipient has blocked your number specifically, you'll see "delivered" but they'll see nothing. There's no way for you to know — carriers don't surface block status. If you're suddenly getting silence from a customer who used to engage, this is one explanation.
7. Campaign-to-content mismatch
Already touched on, but worth pulling out. The carriers will accept a message even if it's off-topic for your registered campaign — but over time, the spam scoring tightens, the throughput drops, and eventually the campaign can be revoked.
If you legitimately need to send multiple types of content (transactional reminders + occasional marketing), register multiple campaigns rather than running everything through one. The infrastructure side of business SMS rewards specialization.
How to actually debug
When delivery starts looking off, the order I'd check things in:
- Campaign status. Is it Approved? Has it been recently changed?
- Per-carrier delivery rates. Most platforms expose delivery rates broken down by carrier. If T-Mobile is at 97% and AT&T is at 30%, the issue is carrier-specific filtering, not anything global.
- Engagement, not delivery. Compare reply rate, click rate, opt-out rate this week vs. four weeks ago. A drop in engagement with stable delivery means messages are being filtered post-acceptance.
- Test from a clean recipient. Send to a personal phone you control, on each major carrier (T-Mobile, AT&T, Verizon). Verify with your own eyes that the message arrives in the main inbox, not in spam.
- Compare content. Did anything change in your message templates over the last two weeks? Added a link? Different phrasing? A carrier filter change can be triggered by surprisingly small content shifts.
- Look at list health. What percent of recent sends went to numbers that bounced as invalid? If it's more than a few percent, your list quality is signaling junk to carriers.
- Then look at number reputation. This is last because it's the slowest to fix and shouldn't be the first explanation reached for.
The mistake we see most often is jumping straight to "let's get a new number." Switching numbers usually doesn't fix anything because the underlying cause — content patterns, list quality, campaign mismatch — follows you. Fix the cause, then the number recovers.
What to never do
A few things small operators try when delivery gets bad that consistently make it worse:
- Sharing numbers across brands or campaigns. "Number pooling" is a fraud signal. One brand, one number per campaign.
- Using a residential SIP gateway or unlicensed sender as a workaround. This bypasses 10DLC entirely and gets you blocked at the trunk level once carriers notice.
- Adding more bit.ly links thinking volume "looks normal." It doesn't. Carriers track shortener domain frequency over time.
- Bouncing between providers every time a campaign fails. Each new provider has to re-register from scratch and your brand is now on multiple platforms, which complicates re-registration if you ever consolidate.
What to actually do
The boring stuff:
- Register cleanly. Use real opt-in flows. Match content to your campaign.
- Send consistent volume to engaged recipients.
- Avoid the content patterns that get filtered.
- Encourage recipients to save your number.
- Monitor engagement, not just delivery.
- Fix the underlying cause when delivery slips, not the symptom.
Business SMS works extremely reliably when it's set up right. The 95% open rate that makes it valuable is real — but it requires the carriers trust you, and that trust is earned through pattern, not configuration. Get the configuration right and then send the way you said you would.