What carrier filtering actually blocks

The content patterns that get a message dropped silently, and how to see it happening.

  • BriefingDeliverability
  • Read7 min

In short

  • A filtered message is often accepted, receipted and never delivered, so the dashboard stays green
  • Link shorteners, unfamiliar domains and money symbols are the three most common triggers
  • Measure arrival against something outside the messaging platform, or you are measuring your own optimism
  • Content-class rejections have to be surfaced as their own event before anyone will look at them

Carrier filtering is the failure mode that does not announce itself. A network accepts the message, returns a receipt that looks like success, and quietly declines to put it on the handset. Nothing errors. The delivery rate on the dashboard stays where it has always been, and the campaign underperforms for reasons everybody blames on the offer.

Why the number lies

Delivery reporting is a chain of receipts, and each link only knows about the one in front of it. A platform that reports 94% is usually reporting the proportion of messages a network accepted from it. Whether the network then delivered them is a different question, answered by a different receipt that not every route returns honestly.

The only reliable check is outside the messaging platform entirely. Compare sends against something you own: session starts, link opens on your own domain, inbound replies. When the two disagree by more than a few points, the gap is filtering until proven otherwise.

What trips a classifier

Networks do not publish their rules, for the obvious reason. What follows is what shows up repeatedly in the rejections we can see, ordered roughly by how often it is the culprit.

  • Public link shorteners.A shared shortener carries everybody else's reputation as well as yours. A branded domain on your own certificate is worth more than any rewrite of the copy.
  • An unfamiliar domain sent at volume. New domains are treated as suspicious for weeks. Warm one up on low volume before a launch depends on it.
  • Currency symbols and amounts. Especially in the first line, and especially combined with an urgency word. This pattern is what most classifiers were trained on.
  • Mixed alphabets. A stray Cyrillic character inside a Latin word reads as evasion, and it usually arrives by copy and paste from a spreadsheet.
  • No opt-out, or an opt-out that costs money. Several markets now treat a premium-rated stop path as grounds for filtering the whole sender.

What does not help

Rotating sender identities to escape a filter works for about a fortnight and costs you every registration you burn. Sending the same content through a second supplier proves nothing, because the filter is at the network, not at the supplier. Increasing volume to compensate is how a sender gets suspended rather than filtered.

Making it visible

The fix is boring and it works: separate content-class rejections from every other kind of failure and alert on them within the hour. A template that has started attracting them is obvious immediately, and can be pulled before it drags the sender identity down with it.

After that, change one thing at a time. Move the link to your own domain. Take the currency symbol out of the first line. Send the two versions on the same route on the same day. The answer usually arrives within a few thousand messages, which is far cheaper than the month most operators spend arguing about whether the offer was any good.

Bring us the market you are stuck on

Most of what is written above started as somebody's blocked launch. Tell us which network is refusing you and we will tell you what it wants.