Pre-launch — you can read everything, but ordering isn't open yet. Where we are

Why SMS codes don't arrive: the chain, and where it breaks

7 min readby the readynum team

A verification code passes through at least four owners, and only one of them will admit when something goes wrong. Hence a category full of confident percentages and empty inboxes. Here is the chain, the five places it breaks, and how to read a success claim — including ours.

The chain a code travels

You press “send code”. Between that click and your screen the message crosses four hands, each with its own rules and its own reasons to drop it.

  1. The service decides whether to send at all. It looks your number up — country, range, carrier, mobile or virtual — and applies its own policy. Many failures happen here and never become messages.
  2. An aggregator picks a route. Services rarely talk to carriers directly; they buy delivery from the layer Twilio, Sinch and MessageBird occupy, which picks a path into your country from shifting wholesale options.
  3. The destination carrier accepts, filters or drops it. The message reaches the network owning your number's range and meets that network's spam and application-to-person filters.
  4. The number receives it. A SIM in a rack, a virtual range, or a handset — online, in service, still assigned to whoever is watching.

You see hop one, because it tells you when it refuses, and hop four, because that's your inbox. Hops two and three are invisible to you, to the service, and often to each other. That asymmetry is where nearly every complaint in this category starts.

Why “delivered” doesn't mean delivered

SMS has a status mechanism — the delivery receipt — and it is weaker than it sounds. A receipt says the message was accepted by the next hop. It does not say a person saw it, and a carrier can accept a message, report it accepted, then discard it.

So when a service says it sent your code, it usually believes that — it has a receipt, and no view of the last hop.

Where the chain breaks — five failure modes

1. The service refuses to send

A number-type lookup returns “VoIP” or “virtual”, or the range sits on a blocklist built after past abuse, and the service declines before generating anything. You see it at once: “enter a valid mobile number”. The only failure here that tells you the truth on the spot.

2. Sender registration and throttling

Markets increasingly require senders of application-to-person SMS to register the brand and campaign behind their traffic; the US regime is the best known, not the only one. Unregistered or over-limit traffic is throttled or dropped by policy — as is hammering resend.

3. Carrier filtering and silent drops

A verification code looks exactly like the spam carriers filter all day: short, automated, high volume from one sender, carrying a code or a link. Filters are heuristic, unpublished and adjusted without notice, and a filtered message is dropped silently. This is the most common way a code vanishes with no error anywhere.

4. The number has a history

Phone numbers are finite and get recycled. If somebody verified the same service on yours before you, you get “already registered” instead of a code. Shared free public numbers are the extreme case — through every popular platform many times over, which is what makes them fine for a throwaway signup and useless otherwise.

5. The last hop simply doesn't have it

A SIM goes offline, a range moves between providers mid-rental, a gateway backs up. Rare individually, real collectively, and — from where you sit, staring at an inbox — indistinguishable from filtering. You can't diagnose it from outside, and neither can whoever sold you the number.

Why nobody can promise a code will arrive

Line the chain up and the conclusion is arithmetic, not opinion. A provider owns hop four and buys a partial view of hop three. Hops one and two belong to the service you are joining and to an aggregator neither of you chose. Any promise about arrival is a promise about three parties the promiser cannot observe. The shorter list it can stand behind: price, whether a number is buyable now, what happens when no code comes, and what it measured on that route.

How to read a provider's success rate: three questions

You'll see success percentages all over this category. Most aren't fiction; they're unqualified, which has the same effect — a figure that can't be wrong because it never said anything falsifiable. Three questions sort evidence from decoration.

  1. Measured by whom? The provider's own completed orders, an upstream supplier, or nowhere? A supplier's figure describes the supplier's traffic, not your order — so it needs their name and a timestamp, and should never share a scale with the provider's own measurements.
  2. Over what sample? A percentage with no sample size behind it isn't a measurement, it's a mood. And it has to be the sample for that route — one country, one service. A site-wide average can look excellent while the route you need has failed all month.
  3. In what window? Routes decay as pools age and filters tighten. A figure covering “all time”, or an unnamed period, is history dressed as current information. Last week, last month, stated — or it says nothing about today.

Then a free fourth test: come back next month. Real measurements move — samples grow, routes drift, good weeks follow bad. A figure identical months later was never a measurement; it was a constant somebody typed once. Check what a site does when it has no data, too: a confident figure on every one of hundreds of routes claims sample everywhere, and traffic does not distribute like that.

What we do about it

We publish route state in three labelled forms. Measured: counted from our own completed orders on that route, with sample size and window inline. Supplier-reported: a named supplier's figure, marked as theirs. Or the third state, written out rather than shown as a dash or a zero:

We don't have data for this route yet

That's what most of our routes say today, popular ones included — Germany, Poland, Portugal. A new site with a confident percentage everywhere would be a site inventing them; better conspicuously empty than quietly wrong. The labelling rules are on the trust page, and every price and route state is readable without an account on pricing.

What to do when your code hasn't arrived

  1. Give it a moment — the service's resend timer is a fair proxy for its own expectations.
  2. Resend once, not five times: repeated requests trip the rate limits above.
  3. Try a fresh number, then a different route — if Spain is failing you, Estonia or the Netherlands may not be.
  4. Compare before you re-order: every price and route state is public, so switching costs nothing.

Frequently asked

How long should I wait for an SMS code?

There's no universal answer, and we won't publish a figure we haven't measured on your route. Use the service's own resend timer as the benchmark — it encodes what that service expects from its sender. Filtering is not cured by waiting.

Does resending the code help?

Sometimes, once: a resend can take a different path through the aggregator layer and land where the first didn't. Repeated resends work against you — rate limits discard attempts, and some services lock the number temporarily.

Why do codes arrive for one app but not another on the same number?

Because failure is per route, not per number. Different services use different senders, hold different views of which ranges are virtual, and carry different filtering histories with the same carrier. A number invisible to one platform is ordinary to another.

The route-level view of the same problem — what a route is, how supply pools go stale, how to read a route page — is in how SMS verification routes fail. For a country example, the US number guide covers +1 ranges and why the range matters more than the country code.

See what we know about a route before you pay

Every route shows its price and its data state up front — and where we have nothing yet, it says so.

Every route below is one click away. Open a country to see its services, or jump straight to a service hub.