# VoIP Numbers and SMS Verification: Why Codes Never Arrive
A developer sets up an account verification flow using Twilio or Firebase. The code works perfectly in testing with a personal phone number. Production launch day arrives, and 30% of users report never receiving their verification code. Support tickets pile up. The verification funnel bleeds conversions.
The problem is not the verification API. The problem is the phone numbers.
What Happens Before the Code Sends
Most developers assume SMS verification is a simple pipeline: user enters number, API sends code, user enters code. In practice, a classification step runs between "user enters number" and "API sends code" that determines whether the message ever leaves the platform's servers.
Verification services query carrier lookup APIs that return metadata about every phone number. The most important field in that response is line_type. It returns one of five values: MOBILE, VOIP, LANDLINE, PREPAID, or UNKNOWN. Platforms use this classification to make a binary decision about whether to proceed with the verification.
A number classified as MOBILE on AT&T or Verizon passes through immediately. A number classified as VOIP on Bandwidth.com or a generic VoIP aggregator gets blocked, deprioritized, or silently dropped. The user sees nothing. No error message, no rejection notice. The code simply never arrives.
// Carrier lookup response - VoIP number
{
"line_type": "VOIP",
"carrier": "Bandwidth.com",
"risk_score": "elevated"
}
// Carrier lookup response - Mobile number
{
"line_type": "MOBILE",
"carrier": "T-Mobile USA",
"risk_score": "normal"
}
This lookup adds roughly 100-200ms to the verification flow and costs fractions of a cent per query. For the platform, that cost is negligible compared to the fraud prevention value. For users with VoIP numbers, it is an invisible wall.
Why VoIP Numbers Carry Higher Risk Scores
The classification itself is not the only factor. Risk engines layer additional signals on top of the line type check.
VoIP number ranges get recycled across thousands of users on the same provider. When even a small percentage of those users engage in spam or abuse, the entire number block accumulates negative reputation. A fresh VoIP number inherits that block-level reputation on day one.
Routing patterns differ as well. SMS messages to real mobile numbers traverse carrier SS7 or IMS infrastructure with predictable latency (typically 400-600ms end to end). Messages to VoIP numbers route through SIP relays and soft-switch infrastructure that introduces variable latency, sometimes 2-4 seconds, with occasional delivery failures. Platforms that track delivery timing can distinguish between these routing profiles.
Number tenure is the third factor. A mobile number that has existed on a carrier network for 6 months with regular voice and SMS activity has a fundamentally different risk profile than a VoIP number provisioned 10 minutes ago with zero history. Fraud detection systems weight number age and activity texture when scoring verification requests.
The combination of these signals means VoIP numbers face compounding disadvantages. Even on platforms that do not outright block VoIP, the elevated risk score can trigger additional friction: CAPTCHA challenges, email verification fallbacks, or manual review queues.
The Pass Rate Gap in Practice
The performance difference between number types is not marginal. VoIP numbers classified as VOIP in carrier lookups typically achieve 20-40% pass rates on platforms with standard verification screening. On platforms with aggressive fraud detection like Instagram, WhatsApp, and financial services, VoIP pass rates drop below 15%.
Numbers classified as UNKNOWN (which includes some VoIP providers that mask their routing) perform slightly better at 30-50% but still face elevated friction.
Real SIM-based mobile numbers classified as MOBILE consistently deliver 95-98% pass rates across all platform categories. The carrier metadata returns a named carrier, the routing follows standard paths, delivery timing is consistent, and the number carries legitimate network tenure.
For development teams building verification flows, these numbers translate directly to conversion rates. A 40% pass rate on VoIP means 60% of users hitting a dead end in the signup funnel. Switching to SIM-based numbers recovers most of that lost conversion.
Common Failure Patterns and Root Causes
Several specific failure modes account for the majority of VoIP verification problems.
Silent delivery failure is the most common. The platform's carrier lookup returns VOIP, the system decides not to send the code, but no error propagates back to the user interface. The user stares at a "code sent" message that is technically false. Developers can catch this by checking the delivery status callback from their SMS API rather than assuming success on send.
Delayed delivery affects VoIP numbers that make it past the initial classification check. The message routes through cheaper aggregator paths that queue messages during peak traffic. The code arrives 45-90 seconds after the user expected it, by which point they have already retried (triggering rate limits) or abandoned the flow.
Sender ID mismatch occurs when VoIP routing changes the originating number or shortcode that appears on the received message. Some platforms verify that the sender ID matches their expected format. If the VoIP route substitutes a different sender, the platform may discard the code even though it technically delivered.
Post-verification flagging is subtler. The code delivers and the user enters it successfully, but the platform flags the account for additional review because the phone number carries VoIP classification. This manifests as delayed account activation, restricted features, or forced re-verification days later.
Provider Comparison for SIM-Based Verification
Three services handle SMS verification with real SIM-based numbers, each targeting different use cases.
TextVerified specializes in US non-VoIP numbers at $0.25 per verification with automatic refunds on failed deliveries. The service offers both one-time codes and number rentals starting at $1.50 for longer-term use. A Chrome extension streamlines the verification process for manual workflows. Coverage is US-only, and stock availability fluctuates on high-demand services.
SMSPool operates a marketplace model covering 100+ countries with pricing starting around $0.10-0.50 depending on the target service and region. The platform supports dedicated SIM rentals for 30-day periods alongside single-use verifications. The broad geographic coverage makes it suitable for international operations, though shared pool numbers carry higher failure rates than dedicated allocations.
VoidMob runs dedicated SIM devices rather than shared number pools. Each number maintains exclusive assignment to a single user, which eliminates inherited abuse history from other customers on the same number block. The service also provides mobile proxies on matching carrier networks, allowing the verification number's geographic and ASN context to align with the user's browsing session. That coherence between number and network identity reduces the behavioral mismatches that trigger fraud detection on platforms with advanced screening.
Building Verification Flows That Account for Number Type
Developers implementing SMS verification should build line type awareness into their flows rather than treating all phone numbers identically.
Before sending a verification code, run a carrier lookup on the submitted number. If the line type returns VOIP or UNKNOWN, present the user with an alternative verification method (email, authenticator app) rather than sending a code that will likely never arrive. This costs pennies per lookup and saves significant support overhead from users reporting missing codes.
For applications where SMS verification is mandatory, document the number type requirement clearly in the UI. A simple note stating that virtual phone numbers are not supported prevents users from wasting time with numbers that cannot pass verification.
Monitor delivery rates by carrier and number type in production. Aggregate delivery success data over time to identify which carrier blocks show degrading performance. Some number ranges that pass today may get flagged tomorrow as platforms update their risk databases.
FAQ
Why does the same number work on one platform but fail on another?
Platforms use different verification providers with different carrier lookup databases and risk thresholds. One platform might only check line type while another checks line type, carrier name, number tenure, and porting history. A number that squeaks past a basic check will fail a comprehensive one.
Can porting a VoIP number to a mobile carrier fix the classification?
Sometimes, but not reliably. Carrier databases may retain the number's VoIP history even after porting. The line type might update to MOBILE eventually, but the porting history itself can be a negative signal on platforms that track port events.
Is there a free way to check if a number is VoIP?
Several services offer limited free lookups. Twilio Lookup provides carrier data on a pay-per-query basis at fractions of a cent. Free alternatives like NumVerify exist but may have less accurate or outdated carrier databases.
What about eSIMs? Do they classify as MOBILE?
Yes. eSIMs provisioned through legitimate carriers (AT&T, Verizon, T-Mobile) carry the same MOBILE classification as physical SIMs. The carrier infrastructure is identical. The form factor is different but the metadata is the same.
Top comments (0)