The worst thing about SMS filtering is that nothing looks broken. The campaign says “sent.” The bill arrives. And a slice of your list simply never got the message. If you've pulled delivery logs and seen Error 30007 — message filtered next to a wall of AT&T numbers, this post is for you. We lived it in our own store, and this is what actually moved the needle.
What 30007 actually means
30007 is the carrier (not your platform, not Twilio itself) deciding your message looks like spam and dropping it after accepting it. You're often still charged for the attempt. Carriers don't tell you why — their filters are deliberately opaque so spammers can't reverse-engineer them — but after enough log-reading, the causes cluster into a handful of patterns.
The five causes we've seen in retail campaigns
1. Burst sending
Blasting 3,000 messages in one minute from a local 10-digit number is the loudest possible spam signal. A2P 10DLC registration assigns your brand a throughput tier, and traffic that spikes past its normal pattern gets clipped. Fix: drip the campaign — spread it over 30–90 minutes in carrier-friendly waves. This alone recovered most of our filtered volume. (It's why drip sending is automatic on our platform, not a setting you can forget.)
2. Link shorteners — and links at all, too early
Shared shorteners (bit.ly and friends) are the most filtered strings in SMS, because every spammer on earth uses them and carriers score the domain, not you. But even a clean link on a brand-new domain gets flagged. Fix: send your first weeks of campaigns with no links at all — “show this text at the counter” converts fine in a store — and introduce links only on your own domain once your traffic history is warm. Never a shared shortener.
3. Weak or mismatched A2P registration
If your 10DLC campaign registration says “customer care” and you're sending promo blasts, or your sample messages look nothing like your real messages, filters treat the mismatch as deception. Fix: register the use case you actually run, with real sample messages including your opt-out line. We file this paperwork for every store during onboarding — the full walkthrough is in our A2P 10DLC guide.
4. Missing STOP language and stale consent
Messages without opt-out language score worse, and lists with old, undocumented consent generate complaint rates that poison your number's reputation. A single digit of percentage in STOP-and-report activity changes how carriers treat everything you send. Fix: “Reply STOP to opt out” on campaign messages, honor STOP instantly, and only text people with explicit, recorded consent. This is also the law (TCPA), not just deliverability hygiene.
5. SHAFT-adjacent content
Carriers hard-filter sex, hate, alcohol, firearms, and tobacco — and their filters are keyword-crude. Supplement stores brush against this more than you'd think: messages about CBD or certain ingredients can trip filters even where the products are legal. Fix: keep regulated-product promos out of SMS; save them for in-store and email.
The checklist that got our delivery rate back
- A2P brand + campaign registered, use case matching reality, sample messages with STOP language
- All campaigns dripped over 30–90 minutes, never blasted
- No links for the first month; then only our own domain, never shorteners
- Quiet hours enforced — nothing before 9 a.m. or after 8 p.m. local
- Opt-outs processed instantly; consent recorded with source and timestamp
- Delivery logs reviewed after every campaign — filtering shows up in logs long before it shows up in revenue
We eventually built all of this into Eco Systems CRM as defaults, because a checklist you have to remember is a checklist that fails on a busy Saturday. But whether or not you use our platform: pull your delivery logs this week. If 30007 is in there, you're paying for texts your customers never see.
A ten-minute diagnostic before you change anything
Don't guess — measure. Pull the delivery log for your last three campaigns and answer four questions:
- What's the delivered rate by carrier? Group failures by carrier. If AT&T numbers fail at 3× the rate of others, you're looking at filtering, not bad numbers. (AT&T's filters are the strictest of the big three in our logs; treat their delivered rate as your canary.)
- What error codes dominate? 30007 is filtering. A pile of 30003/30005 (unreachable/unknown handset) is list decay — different problem, different fix: prune numbers that hard-fail twice.
- Did failures cluster at the start of the send? A blast that dies in the first minute is a throughput breach. If failures are spread evenly, look at content instead — usually a link or a flagged keyword.
- When did it start? A sudden cliff on a specific date usually means a registration change or a content change (someone added a shortened link to the template). A slow slide means reputation decay from complaints.
What good looks like
Healthy retail campaign traffic — registered, dripped, clean consent, no links — should deliver in the high 90s percent, with the remainder mostly dead numbers rather than filtering. In our own stores, moving from blast-with-shortlinks to drip-with-no-links took AT&T delivery from “mysteriously soft” to boringly consistent within two campaigns. Filtering has no appeals process worth the name; the only reliable strategy is to stop looking like spam. Registered identity, human-paced sending, consent with receipts, content a carrier's dumbest filter can't misread — that's the whole game.