Free tool — no signup
Free phone number validator
Paste a number with its country code. You get what libphonenumber-grade metadata can prove — whether it's a valid number, its country, and canonical E.164 — plus an honest note on the carrier and live-reachability checks that metadata alone can't answer.
Include the country code — try or .
SampleA real response for this input — press Verify to run it live.
Checked
Not claimed — we won't fake it
What the free check covers
Everything it checks — and everything it won't fake.
Checked
Runs on every result above.
Whether the digits form a possible and valid number for their country, using Google's libphonenumber ruleset — the same engine that ships in Android.
The country the number belongs to, derived from its country code and prefix.
Mobile, fixed line, toll-free and so on — where the national numbering plan makes it derivable. Some ranges are genuinely ambiguous (fixed-or-mobile), and the result says so instead of picking one.
Not claimed
Marked not-run in the result, never guessed.
Which network currently serves the number. That needs a live carrier lookup, which this metadata tool doesn't run.
Whether the number has been moved between carriers — the reason a prefix no longer tells you the network. Same live lookup, marked not-run.
Whether the handset is switched on and reachable right now. That's a paid live query priced to its wholesale cost; it's marked not-run until it runs, never assumed.
What E.164 is, and why you want to store it
The international standard format. Store numbers this way and they dedupe cleanly and drop straight into any dialer, SMS API or CRM.
+16504472983
pluscountry codenational number
Up to fifteen digits, no spaces or punctuation. This validator returns the E.164 form for any valid number, so you normalize on the way in.
Possible, valid, reachable — three different questions
Metadata answers the first two with confidence, and cannot answer the third.
- PossibleDoes it have a plausible length for its country? runs here
- ValidDoes it fit an allocated range in the numbering plan? runs here
- ReachableWould a live handset answer right now? not run
A number can be perfectly valid and long disconnected. Anyone selling "valid" as "reachable" is charging you for a hope.
Why not just use a regex
International numbering is too varied for a pattern — lengths, prefixes and mobile/fixed rules differ by country and change over time.
One regex
Accepts impossible numbers
A pattern loose enough for every real number is loose enough for a pile of junk.
libphonenumber
Actual per-country rules
The allocated ranges themselves, updated as they change.
Which is why it's the baseline this tool builds on, rather than a hand-rolled expression.
Questions
Is the phone number validator free?
Yes — no signup, no card. It runs the same zero-cost metadata checks the free API tier runs, with an hourly per-visitor limit. The free tier gives you 250 checks a month if you want to call it from code, and credits never expire.
Does it tell me the carrier or whether the number is active?
No — and it marks both as not-run rather than guessing. Carrier, ported status and live reachability (HLR) all need a paid live lookup. This tool answers what the numbering plan can prove: is it a valid number, for which country, in what format.
What is E.164 format?
The international standard format: a plus sign, the country code, and the national number with no spaces or dashes, e.g. +16504472983. It's the safest way to store phone numbers because it's unambiguous worldwide. The validator returns it for any valid number.
Can it validate numbers from any country?
Yes. Include the country code (the leading +) and it validates against that country's rules. Without a country code you can pass a default country and it'll interpret the national number accordingly.
How do I validate phone numbers in my code?
One POST to /v1/verify/phone with a bearer key. You get valid, country, line_type, the E.164 and national formats, and the checks.performed / not_performed lists so your code knows exactly what was checked. Reference at boundstone.io/docs.
Need to validate numbers in your app, or clean a whole call list?
The same checks, one HTTP call — with checks.performed / not_performed on every response, so your code knows what a verdict was based on.
curl -X POST https://api.boundstone.io/v1/verify/phone \
-H "authorization: Bearer bs_live_YOUR_KEY" \
-H "content-type: application/json" \
-d '{"phone":"+16504472983"}'
# → { valid, country, line_type, e164, national_format,
# checks: { performed, not_performed } }
Early access — free tier is 250 credits/month, forever
The API is live — start free without waiting. This list gets benchmark № 001 the day it publishes. One email. We validate emails for a living — we're not going to spam yours.