Phone Number Validator & Formatter: Bulk, E.164, Mobile Check avatar

Phone Number Validator & Formatter: Bulk, E.164, Mobile Check

Pricing

from $0.55 / 1,000 checked phone numbers

Go to Apify Store
Phone Number Validator & Formatter: Bulk, E.164, Mobile Check

Phone Number Validator & Formatter: Bulk, E.164, Mobile Check

Validate and format phone numbers in bulk or enrich any dataset: valid/invalid, E.164, international and national format, mobile/landline/VoIP type, country, location, carrier and time zones. Finds numbers in text, removes duplicates. Offline, no API key.

Pricing

from $0.55 / 1,000 checked phone numbers

Rating

0.0

(0)

Developer

Charles Markette

Charles Markette

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Phone Number Validator & Formatter checks phone numbers in bulk and tells you which are valid, then formats each one in E.164, international and national style. It also reports the number type (mobile, landline, VoIP, toll-free…), country, location, original carrier and time zones. Paste a list, or point it at any Apify dataset (for example leads or contact details from a scraper): the phone columns are added next to each item's original fields. It runs fully offline on Google's open-source libphonenumber metadata, so you need no API key and no third-party lookup service, and the numbers you check never leave the run.

What it does

  • Validates numbers for 240+ countries and regions: right length, real number range, possible vs valid.
  • Formats them as E.164 (+14155552671), international (+1 415-555-2671), national ((415) 555-2671) and an RFC 3966 tel: link.
  • Classifies each one: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, VOIP, SHARED_COST and more.
  • Adds context: country code, location (city or region where the data has it), the carrier the number range was assigned to, and time zones. These are handy for routing calls and SMS at a sensible local hour.
  • Keeps extensions ("ext. 12", "x12") in their own column.
  • Enriches datasets: reads phone fields from any dataset, including lists and comma-separated strings, nested fields (contact.phone) and a per-item country field.
  • Finds numbers inside text: turn on Find phone numbers inside text to pull every valid number out of page text, descriptions or email signatures.
  • Cleans lists: remove duplicates (compared in E.164 plus extension, so (415) 555-2671 and +1 415 555 2671 count as one), or keep only valid numbers. Removed rows are free.

Use cases

  • Clean lead lists before a CRM import or an SMS/calling campaign: drop invalid numbers, get E.164 for Twilio and other dialers, and tell mobile from landline numbers.
  • Enrich scraper output: run it after a contact-details, Google Maps or directory scraper with {{resource.defaultDatasetId}} in an integration.
  • Standardise mixed formats from forms and spreadsheets into one format.
  • Route by time zone or country with the time-zone and region columns.

How to use it

  1. Paste numbers into Phone numbers, and/or pick a Dataset to enrich.
  2. Set Default country (2-letter code, such as US, GB, DE or IN) for numbers written without a + country code. If your items carry their own country, set Country field.
  3. Optional: change Phone fields (default: phone, phones, phoneNumber, phone_number, telephone, mobile), and turn on Remove duplicate numbers, Output only valid numbers or Find phone numbers inside text.
  4. Run it. Each checked number becomes one output row. Export as CSV, Excel or JSON, or send it on with an integration.

Input example

{
"phoneNumbers": ["+1 650-253-0000", "(415) 555-2671", "+44 20 7946 0018 ext 5"],
"defaultCountry": "US",
"dedupe": true
}

Output example

{
"phoneInput": "(415) 555-2671",
"phoneValid": true,
"phonePossible": true,
"phoneE164": "+14155552671",
"phoneInternational": "+1 415-555-2671",
"phoneNational": "(415) 555-2671",
"phoneRfc3966": "tel:+1-415-555-2671",
"phoneCountryCode": 1,
"phoneRegion": "US",
"phoneType": "FIXED_LINE_OR_MOBILE",
"phoneCarrier": null,
"phoneLocation": "San Francisco, CA",
"phoneTimeZones": ["America/Los_Angeles"],
"phoneExtension": null,
"phoneError": null
}

For a number that is not valid, the formatted columns are empty and phoneError says why, so a bad number can't slip into your dialer as if it were real. When you enrich a dataset, each row also keeps the item's own fields and adds phoneSourceField, the field the number came from. The Overview table shows the phone columns; CSV, Excel and JSON exports include every field. A run summary (counts of valid, invalid and duplicate numbers) is saved as OUTPUT in the run's key-value store.

How much does it cost to validate phone numbers?

Pay per event: $0.001 per checked phone number (one output row), plus a $0.005 run start fee (one start event per GB of run memory; the default 256 MB run is charged one). Platform usage is included. Numbers you leave out with Output only valid numbers or Remove duplicate numbers are free.

Apify Store discounts: the price above is for Apify's Free plan. Paid plans pay less per 1,000 validated numbers: $0.87 on Starter, $0.70 on Scale, $0.55 on Business. The "from" price at the top of the Store page is the Business price.

Worked examples:

Examples use the Free-plan rate. Where an example doesn't add it, each run also has its run-start charge, counted per GB of Actor memory (minimum one; one at the default memory); Apify Proxy (where used) is billed separately.

  • 1,000 scraped leads with one phone each: 1,000 × $0.001 + $0.005 = $1.005.
  • A daily check of 50 new sign-ups: $0.055 per run, about $1.65 per month.

If you set a maximum cost per run, the Actor stops cleanly at that limit.

FAQ

Does it call the number or send an SMS?

No. It checks the number against the official numbering plans (Google's libphonenumber metadata). It can't tell whether a valid number is switched on or who owns it, and it never contacts the number.

Why is the carrier empty for US numbers?

The carrier column comes from the original range allocation. Many countries (including the US and Canada) don't publish it in this data, and numbers can be ported to another carrier later. Treat it as a hint.

My numbers have no country code.

Set Default country, or a Country field if each item has its own country. Without either, numbers without a + are reported as "No country" (and in Find phone numbers inside text mode they can't be recognised, so they are skipped).

"FIXED_LINE_OR_MOBILE"?

In some countries (the US, for example) landline and mobile numbers share the same ranges, so they can't be told apart from the number alone.

Is my data private?

Everything runs inside your Actor run. The numbers are not sent to any outside service.

Other tools by the same author

Phone number metadata: libphonenumber (Apache License 2.0), via the phonenumbers Python package.