Blog

Error 30007: why your store's texts get filtered — and how we fixed ours

Error 30007 means a carrier silently filtered your SMS. Why AT&T and others filter retail campaigns — burst sending, link shorteners, weak A2P registration, missing STOP language — and the fixes that got our supplement store's delivery rate back.

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:

  1. 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.)
  2. 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.
  3. 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.
  4. 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.

Next step

See it running before you buy it.

Book a 20-minute demo — the portal, the kiosk, a real campaign send, and exactly what migrating your store would look like.

$200/mo platform · 5,000 texts included · no contracts