Skip to content

Phone Number Validator

Try for free

Validate and format phone numbers in bulk: valid or not, E.164 and national format, country, line type (mobile, landline, toll-free, VoIP), original carrier, place and time zone. Paste numbers or check a lead list from another run.

📞 Phone Number Validator

Paste phone numbers in any format and find out which ones are real. Each number becomes one row: valid or not, the clean E.164, international and national formats, the country, the line type (mobile, landline, toll-free, VoIP and more), the carrier it was issued to, the city or region and the time zone. You can also point it at the results of another run, such as a lead list, and it checks the phone field of every row. No login, no API key, $0.85 per 1,000 numbers on every plan, platform usage included.

✨ Why use Phone Number Validator?

  • 🌍 Every country: numbers from 245 countries and territories, checked against Google's libphonenumber data (the library Android and Google use).
  • 🧹 Any format in, clean formats out: (415) 555-0123, 0049 30 901820, +44 20 7946 0958 ext. 12 and tel: links all work. You get E.164 (+14155550123) for CRMs and dialers, plus international and national formats for people.
  • 📱 Mobile or landline: line type for each number, so you know which ones can get an SMS or a WhatsApp message.
  • 📡 Carrier, place and time zone: the carrier the number was issued to, the city or region for landlines, and the time zone so you call at the right hour.
  • 🔗 Works on other runs' results: paste a dataset ID from the Contact Details Scraper, Google Maps Scraper or any lead list and every phone field is checked. Lists of numbers in one field are split up.
  • 🧾 Clear answers for bad numbers: invalid numbers say why (too short, wrong length for the country, missing area code, unknown country code, not a number).
  • ⚡ Fast: everything is checked offline, without calling the numbers or any outside service, so 100,000 numbers take about a minute.

🎯 Use cases

  • 🧲 Clean lead lists before importing them into a CRM or a dialer: drop invalid numbers and store every number in one format.
  • 💬 SMS and WhatsApp campaigns: keep only mobile numbers.
  • ☎️ Sales calls across time zones: sort by time zone and call during office hours.
  • 🔁 Remove duplicates written in different formats (+1 415 555 0123 and (415) 555-0123 are the same number).
  • 📝 Check sign-up and form data for fake or mistyped numbers.

🚀 How to use

  1. Paste numbers into Phone numbers, one per line, or set Dataset ID to the results of another run (and Phone field to the field name, or leave it empty to check every field with "phone" in its name).
  2. Pick the Default country for numbers written without a country prefix (like 020 7946 0958). Numbers starting with + or 00 always use their own country.
  3. Click Start and download the results as JSON, CSV, Excel or HTML, or send them on with an integration.

📥 Input example

{
    "phoneNumbers": ["+1 650-253-0000", "+44 20 7946 0958", "07700 900123", "+33 6 12 34 56 78"],
    "defaultCountry": "GB",
    "removeDuplicates": true
}

To check the phones of another run:

{
    "datasetId": "YOUR_DATASET_ID",
    "phoneField": "phone",
    "defaultCountry": "US"
}

📤 Output example

{
    "input": "+33 6 12 34 56 78",
    "valid": true,
    "possible": true,
    "e164": "+33612345678",
    "international": "+33 6 12 34 56 78",
    "national": "06 12 34 56 78",
    "telLink": "tel:+33-6-12-34-56-78",
    "countryCode": "FR",
    "country": "France",
    "callingCode": "+33",
    "nationalNumber": "612345678",
    "extension": null,
    "lineType": "mobile",
    "carrier": "SFR",
    "location": null,
    "timeZones": ["Europe/Paris"],
    "error": null
}

Rows from a dataset also get sourceRow, the position of the row the number came from, so you can join the results back.

FieldWhat it is
validThe number is in a range that is assigned in its country
possibleThe length fits the country, even if the range is not assigned
e164+ country code and number, no spaces: the format CRMs, Twilio and dialers expect
lineTypemobile, landline, landline_or_mobile, toll_free, premium_rate, shared_cost, voip, personal_number, pager, uan, voicemail or unknown
carrierCarrier the number range was issued to (mobile numbers only, where known)
locationCity or region for landlines, when it is more precise than the country
errorWhy a number is not valid, otherwise empty

⚠️ Good to know

  • Carrier is the original carrier. It is the carrier the number range was issued to. A number moved to another carrier still shows the first one.
  • US and Canada numbers use the same ranges for mobiles and landlines, so they come back as landline_or_mobile. Most other countries are split exactly.
  • Valid is not the same as in service. A valid number is in an assigned range with the right length; this actor does not call or ping numbers, so it cannot tell whether a phone is switched on or still belongs to the same person.

💰 Pricing

Pay per number checked: $0.85 per 1,000 numbers on every plan, with platform usage included, so that is the whole price. Duplicates that are skipped are not charged, and with Only keep valid numbers on, numbers left out are not charged either.

❓ FAQ

Which countries are supported? All 245 countries and territories in Google's libphonenumber data, including non-geographic numbers like international toll-free.

Can I check a lead list automatically when its run finishes? Yes. Add an integration or webhook to the lead-list run that starts this one with datasetId set to the first run's defaultDatasetId.

Why is my number "Local number: the area code is missing"? It is too short to be dialed from elsewhere in the country. Add the area code, or the number cannot be used outside its local area.

//From the blog\\

Latest articles

All articles

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.