Phone Number Validator & Formatter (offline, E.164) avatar

Phone Number Validator & Formatter (offline, E.164)

Pricing

$0.50 / 1,000 phone number checkeds

Go to Apify Store
Phone Number Validator & Formatter (offline, E.164)

Phone Number Validator & Formatter (offline, E.164)

Check phone numbers in bulk: valid or not, E.164 / international / national format, line type, country, original carrier, location and time zones. Offline on Google libphonenumber data: no API keys, no rate limits. $0.50 per 1,000 numbers.

Pricing

$0.50 / 1,000 phone number checkeds

Rating

0.0

(0)

Developer

ensorcelling _melilot

ensorcelling _melilot

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Phone Number Validator & Formatter

Check phone numbers in bulk: is it valid, what is the clean international format, what kind of line is it, which country, which carrier originally had the number, and which time zone. Paste a list, get a table.

It runs offline on Google's libphonenumber data (the library behind Android's dialer), so there are no API calls, no keys, no rate limits and no random "service unavailable" failures. That also makes it cheap.

What you get for each number

FieldExample
isValidtrue (a real, assigned number pattern for that country)
isPossibletrue (length is right, even if the pattern isn't)
e164+442083661177 (what CRMs, dialers and Twilio want)
international+44 20 8366 1177
national020 8366 1177
rfc3966tel:+442083661177
country, countryCallingCodeGB, 44
numberTypemobile, fixed_line, fixed_line_or_mobile, toll_free, premium_rate, voip, shared_cost...
carrierChina Telecom (see the honest note below)
locationLondon
timezones["Europe/London"]
extension12
errorwhy a number failed, in plain words

Input

  • Phone numbers: one per line, any common way of writing them.
  • Default country: two-letter code (US, GB, DE) for numbers written without a + country code. Numbers that start with + ignore it.
  • Add carrier, location and time zones: on by default.
  • Language: language for place and carrier names (en, de, fr, es, ja, zh...).
  • Remove duplicates: on by default; duplicates are free.
  • Only output valid numbers: drop the invalid ones from the table.

Pricing

$0.0005 per number checked ($0.50 per 1,000). Empty lines and duplicates are free. No start fee. A list of 10,000 numbers costs $5.

What this can and can't tell you (read this)

This checks numbers against numbering plans, not against live phone networks.

  • Valid means the number matches the format of an assigned range in that country. It does not mean someone answers it, or that it is currently connected.
  • Carrier is the carrier the number's prefix was originally assigned to. If the owner ported their number to another carrier (common in the US, UK and EU), this will be out of date. For the US, Canada and several other countries libphonenumber has no carrier data at all, so carrier is empty.
  • Line type comes from the numbering plan. In the US and Canada fixed lines and mobiles share ranges, so you'll see fixed_line_or_mobile.
  • Location is the region of the area code; for mobiles it is usually empty.

If you need live "is this number reachable" or "which network is it on now" (HLR lookups), that takes a paid network service. This Actor is for cleaning, formatting and sorting big lists cheaply before you do that.

Use it from code

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('YOUR_USERNAME/phone-validator').call({
phoneNumbers: ['020 8366 1177', '+1 650 253 0000'],
defaultCountry: 'GB',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Example output

{
"input": "020 8366 1177",
"isValid": true,
"isPossible": true,
"e164": "+442083661177",
"international": "+44 20 8366 1177",
"national": "020 8366 1177",
"rfc3966": "tel:+442083661177",
"countryCallingCode": "44",
"country": "GB",
"numberType": "fixed_line",
"nationalNumber": "2083661177",
"extension": null,
"carrier": null,
"location": "London",
"timezones": ["Europe/London"],
"error": null
}