SMS delivery is not a binary event. A message sent doesn't mean a message received. Between your SMS platform and your subscriber's phone is a chain of infrastructure — aggregators, carriers, and device-level filtering — each capable of stopping your message silently.
Understanding this chain is the first step to diagnosing and improving delivery rates.
1. Your SMS platform composes the message and passes it to an aggregator
2. The aggregator (Twilio, Bandwidth, Sinch, etc.) routes the message toward the destination carrier
3. The destination carrier (AT&T, Verizon, T-Mobile, etc.) applies filtering rules and delivers to the device
4. The device receives the message and (depending on settings) notifies the user
Failure can happen at any step. Here's what causes failures at each stage:
Platform to aggregator: API errors, malformed requests, invalid phone number format, account suspension.
Aggregator level: Number not registered for A2P, rate limits exceeded, content policy violations.
Carrier level: Spam filtering triggered by content, sending pattern anomalies, unregistered sender ID, number reputation issues.
Device level: Phone is off or out of service (the carrier will retry for up to 24 hours), phone has reached storage limit, device-level spam filtering.
Every SMS delivery attempt generates a status code. Your platform should expose these:
Key undelivered codes:
| Delivery Rate | Assessment |
|---|---|
| 98%+ | Excellent — clean list, good sender reputation |
| 95–97% | Good — normal range for a healthy program |
| 90–94% | Fair — list cleaning needed, possible carrier issues |
| Below 90% | Poor — sender reputation or content issue requiring investigation |
Clean your list regularly. Remove disconnected numbers (30003 failures), unsubscribed contacts (30004), and non-SMS-capable numbers (30006). Run your list through a phone number validation service every 90 days.
Register your numbers. All US long code senders must register via 10DLC. Toll-free numbers require separate verification. Unregistered senders are filtered aggressively.
Warm up new numbers. Start sending volume low on new numbers and scale up over 2–3 weeks. Sudden volume spikes on new numbers trigger carrier spam detection.
Watch your content flags. If you see a spike in 30007 codes, your message content triggered carrier filtering. Review the campaign copy for spam trigger words or suspicious URL patterns.
Monitor delivery receipts. Don't just look at overall delivery rate. Look at which numbers are failing and why. Patterns in failure codes reveal specific issues.
Respect opt-outs immediately. Sending to numbers that have replied STOP generates 30004 codes and damages your number's reputation with carriers.
Many SMS platforms show "messages sent" in their dashboard by default. This is the number of messages that left your platform — not the number that reached a device. Always look at delivery rate, not send volume, as your baseline performance metric. The gap between the two is where the money goes.
Sarah Okafor
Compliance & Legal Strategy Lead at Textcanon
Helping businesses reach their audience through effective, compliant SMS marketing. Writing about strategy, deliverability, and growth.