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

How SMS verification routes fail

6 min readby the readynum team

When a verification code doesn't arrive, it is rarely random. The code failed somewhere along one specific path — the route — between the service that sent it and the temporary number you rented. Routes fail in knowable ways: stale supply, carrier filtering, and recycled numbers. This article walks through each one, and shows how to see what we know about a route before you pay.

What a route actually is

A route is one country paired with one service. A Telegram code to a Polish number is one route; a Telegram code to a Spanish number is a different route entirely. Between the service and your screen sit several hops — the service's SMS gateway, an aggregator or two, the destination carrier, and the pool that owns the number itself.

Any hop can fail, and you only ever see the sum. That is why two routes that look interchangeable behave nothing alike: WhatsApp to a Dutch number and WhatsApp to a German number share the first hop and nothing after it. It is also why a single site-wide success figure would be close to meaningless — one reason you won't find one here.

Failure one: the supply pool goes stale

Providers rent numbers from upstream pools, and pools age. Ranges get flagged by the platforms people verify against. Carriers quietly deprioritise blocks that generate complaints. The freshest numbers get taken first, leaving the worn ones behind. None of this announces itself — there is no error message for a pool in decline.

The result is slow decay. A route that worked well last month can be failing quietly today, and without measurement the provider is usually the last to know. The users find out first, one missing code at a time.

Failure two: carrier filtering

Carriers filter application-to-person SMS — the category every verification code belongs to — because it is also the category most spam belongs to. Filtered messages are typically dropped silently: no bounce, no error, no notice to anyone. The service believes the code was sent. The carrier says nothing. You watch an empty inbox.

A second, earlier form of blocking happens before any SMS exists: some services reject the number at the signup form because they classify its range as virtual. That failure is at least visible — you find out immediately — but it counts against the route all the same.

  • The service says the code was sent, and nothing arrives — the classic filtering signature.
  • The signup form rejects the number outright — a range block, visible up front.
  • Codes from one service arrive while another stays silent on the same number — per-service filtering, not a dead number.

Failure three: recycled numbers

Real mobile numbers are a finite resource, so pools recycle them. A recycled number may already be registered on the service you are joining — you get “this number is already in use” instead of a code, or the code arrives and the account slot turns out to be taken anyway.

Shared free public numbers are the extreme case: they sit on the open web, anyone can read every message, and the popular platforms have usually seen them many times before. That makes them fine for a throwaway signup and exactly wrong for an account you care about.

How to see what we know before you pay

Because failure is route-specific, the honest unit of measurement is the route. And honesty about a route comes in exactly three states on this site — every figure you see is in one of them, labelled.

  • Measured — counted from our own orders on that exact route, always shown with the sample size and the time window it covers. The only state we colour, and the only one we will ever use in marketing.
  • Supplier-reported — an upstream supplier's figure passed through with the supplier's name and a timestamp, visibly labelled as their measurement, not ours.
  • No data — the sentence “We don't have data for this route yet”, written out in full. Never a dash, never a zero, never a quiet default.

In our first weeks most routes read no data. That is what a truthful launch looks like, not a defect — a young site with measurements everywhere would be a site inventing them. Each route's current state sits next to its price on the pricing page, before you commit to anything.

What to do when a code doesn't arrive

  1. Give it a little time. Delivery speed varies by route, and we won't pretend to know a figure we haven't measured.
  2. Try a fresh number on the same route. If the first one was recycled, the second often isn't.
  3. Switch routes. If a Spanish route is failing you, a Portuguese or Estonian one may not be — every price is public, so comparing costs you nothing.
  4. If nothing arrives, the order refunds to your wallet automatically.

The refund comes last on that list on purpose. An automatic refund is hygiene, not a feature — it makes failure cost nothing, but it doesn't make failure useful. The useful work is upstream: measuring routes and labelling what we know, so that next time you can pick one that has actually been delivering.

New to temporary numbers altogether? Start with temporary phone numbers, explained — what they are, the one-time versus rental distinction, and what they honestly can't do.

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.