How to check if a phone number is VoIP
A VoIP number runs over the internet instead of a mobile network or a copper line. Some are perfectly ordinary, like a business phone system or a cable company's home phone. Others are free app numbers that anyone can create in a minute, with no ID and no contract. If you rely on a phone number to prove someone is a real, unique person, you need to know which kind you have.
Why it matters
- SMS verification and 2FA. Free app numbers let one person pass "verify your phone" many times over. Many sites only accept mobile numbers for this.
- Fraud and promo abuse. Throwaway numbers show up disproportionately in fake accounts, chargebacks and bonus abuse.
- Deliverability. Some VoIP numbers can't receive SMS from short codes, so your messages silently fail.
- Calling rules. In the US, consent and calling-time rules differ for mobile numbers, so line type matters for outbound calling too.
Line types, briefly
| Type | What it is | Typical handling |
|---|---|---|
| mobile | Issued by a wireless carrier | Accept |
| landline | A fixed line from a phone company | Accept; can't receive SMS |
| voip | Internet-based: business systems, cable phone service, and free app numbers | Review; see below |
| toll_free, premium | 800-style numbers, paid-rate lines | Usually not a person's own number |
Method 1: numbering-plan data (cheap, original type)
Phone numbers are handed out in blocks. In the US and Canada, the North American Numbering Plan records which company each block of 1,000 or 10,000 numbers was assigned to, and those companies can be classified as wireless, landline or VoIP providers. Google's libphonenumber library can't tell mobile from landline for US numbers at all (it returns FIXED_LINE_OR_MOBILE), so block data is what fills that gap.
The catch: block data shows the original carrier. A number assigned to Verizon Wireless in 2009 and later moved to a VoIP app still looks like Verizon Wireless mobile.
Method 2: a live carrier lookup (current type)
When a number is ported, the change is recorded in the number portability database, which routes calls to the current carrier. A live carrier lookup asks that database who serves the number today, and therefore what kind of line it is now. It costs more per check and is available for US and Canadian numbers.
A sensible approach is to use the cheap check for everything and the live check where the answer actually changes a decision, such as SMS verification, high-value signups or before an outbound calling campaign.
Checking with the API
The Verified.net phone check (1 credit) uses numbering-plan data for US numbers and returns line_type, voip and the original assignment:
curl https://api.verified.net/v1/phone \
-H "Authorization: Bearer $VERIFIED_KEY" \
-H "Content-Type: application/json" \
-d '{"number": "+12024561111"}'{
"e164": "+12024561111",
"valid": true,
"line_type": "landline",
"voip": false,
"assignment": { "carrier": "VERIZON WASHINGTON DC, INC.", "carrier_type": "landline", "state": "DC" },
"recommendation": { "action": "accept", "reasons": [] }
}The carrier lookup (3 credits, US and Canada) asks the portability database and returns the current carrier, whether the number was ported, and the current line type:
import os
import requests
def current_line(number: str) -> dict | None:
r = requests.post(
"https://api.verified.net/v1/carrier",
headers={"Authorization": f"Bearer {os.environ['VERIFIED_KEY']}"},
json={"number": number},
timeout=10,
)
return r.json() if r.status_code == 200 else None
info = current_line("+12024561111")
if info:
print(info["line_type"], info["voip"], info["ported"]) # landline False False
print(info["current_carrier"]["name"], "/", info["original_carrier"]["name"])What to do with a VoIP result
- Don't reject all VoIP. Millions of real households have cable-company phone service, and most businesses use VoIP systems. Rejecting them turns away real customers.
- Use VoIP as one signal. VoIP plus a disposable email plus a datacenter IP is a very different signup from VoIP alone.
- For SMS verification, accepting only mobile numbers is common and defensible; say so clearly on the form.
- Check reports too. For US numbers the phone check also counts consumer complaints to the FTC about unwanted calls (
spam_reports), useful when vetting numbers you're about to call or trust.
Try a number with the free phone validator, or see all fields in the API docs.
Try it on your own data
Check an address or number now with the free checker, no signup needed, or start a 7-day trial and call the API from your code.
Start free trial API docs