Verification Code Never Arrived? Nine Reasons Why, and What to Do
8 min read
You entered a number, pressed send, and nothing came. Before you try again a fourth time — which will often make things worse — it helps to know which of these is actually happening. They are ordered by how often each one turns out to be the cause on a service like ours.
1. The service blocks virtual numbers
This is the answer most of the time, and no amount of retrying will change it. Larger platforms buy access to databases that classify every number range by type: mobile, landline, VoIP, or non-fixed VoIP. Numbers from services like this one sit in the last category, and plenty of platforms refuse it outright.
The tell is the timing. If the site accepted your number and claims a code was sent, but nothing ever arrives, the message was very likely never handed to a carrier at all. If the site rejects the number immediately with “please enter a valid mobile number”, the block happened at the form.
What to do: try a number from a different country. Classification databases are uneven, and a range that is flagged in one country is often clean in another. Beyond that, a service that has decided to refuse virtual numbers will keep refusing them.
2. Someone already used that number on that service
Public numbers are shared. If three people before you registered with the same platform using the same number, that platform now considers the number taken — or flags it as suspicious and drops the send silently.
What to do: pick a different number from the list. This one is quick to test and quick to rule out.
3. You hit a rate limit
Nearly every platform caps how many codes it will send to one number in a window — often three per hour, sometimes three per day. Pressing “resend” five times in a minute is the fastest way to trigger it, and the interface rarely tells you. It keeps saying “code sent” while sending nothing.
What to do: stop pressing resend and wait an hour. Genuinely. Each extra attempt can extend the cooldown.
4. Country mismatch
Some services only send codes to numbers in countries where they operate. A UK bank will not text a Canadian number. Delivery-service and food-delivery apps are especially strict, since the number is tied to a physical address.
What to do: match the number’s country to the service’s market if we have one available.
5. Carrier filtering
Carriers run their own spam filtering on inbound application-to-person traffic, and it is aggressive. Messages containing URLs, certain keywords, or coming from a sender ID with a poor reputation get dropped in transit. Nobody is notified — not you, not the sender.
In North America this is formalised as 10DLC: senders must register their campaigns, and unregistered traffic is throttled or blocked. In practice, messages from large registered senders arrive reliably and messages from small unregistered ones are a lottery.
What to do: nothing on your end. Try a different country, or a different number.
6. The code arrived, just not where you looked
On a shared public number, a busy inbox can push your code down the page within seconds of it arriving. If several people are using the same number, messages interleave.
What to do: our number pages stream messages live over a websocket, so keep the tab open and watch rather than refreshing. Check the sender and timestamp, not just the top of the list.
7. The number was wrong
Country code included or not, leading zero kept or dropped — the two most common formatting mistakes. A UK mobile written as +44 07451... has one digit too many; the leading zero is a domestic-dialling convention and is dropped when you use +44.
What to do: copy the number from our page rather than retyping it.
8. Genuine carrier delay
Most codes land in under ten seconds. Occasionally a message sits in a queue for several minutes, usually during regional congestion. By then the code has often expired.
What to do: wait two minutes before requesting a new one, so you do not trip the rate limit in point 3.
9. The sender has a delivery problem
Sometimes it is simply broken on their side — an expired SMS provider account, an exhausted quota, a misconfigured sender ID for your region. Small services are more prone to this than large ones.
What to do: if a service works for other people but never for you, and you have ruled out the above, it is worth writing to them.
The uncomfortable summary
Related
If you want to understand what the code itself is doing, see what is an OTP code. Developers testing their own send flows should read testing SMS verification flows.