๐Ÿ“ž Phone Number Validator - Line Type, Country, Bulk avatar

๐Ÿ“ž Phone Number Validator - Line Type, Country, Bulk

Pricing

$5.00 / 1,000 phone validateds

Go to Apify Store
๐Ÿ“ž Phone Number Validator - Line Type, Country, Bulk

๐Ÿ“ž Phone Number Validator - Line Type, Country, Bulk

Validate and enrich phone numbers in bulk: valid/possible, line type (mobile/landline/VoIP), country, E.164 format, and outreach risk flags. Offline libphonenumber engine, no API key. A NumVerify/Twilio Lookup alternative for cleaning lead lists.

Pricing

$5.00 / 1,000 phone validateds

Rating

0.0

(0)

Developer

Renzo Madueno

Renzo Madueno

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

๐Ÿ“ž Bulk Phone Number Validator & Type Checker

๐ŸŽฅ Video walkthrough

Paste a list of phone numbers, get back a clean, normalized one. This Actor takes any list of phone numbers โ€” messy, mixed-country, half in local format โ€” and returns, for each one, whether it's a valid number, its E.164 form (+14155552671), its national and international formatting, the country and calling code, and the line type: mobile, landline, VoIP, toll-free, premium rate, and more. It also flags the numbers that are risky to include in an outreach list so you can drop them before they cost you.

No API key. No per-lookup metering from a third-party service. It runs on Google's libphonenumber metadata entirely offline โ€” no network call per number โ€” so it's fast and cheap on lists of any size.


Why validate a phone list before you dial or text

A raw phone list โ€” scraped, purchased, or typed by humans into a form โ€” is full of numbers that will burn money and hurt your campaign:

  • Invalid numbers that were never real (typos, wrong length, wrong country). Your SMS platform still charges you to attempt them, and your dialer wastes time.
  • Landlines mixed into an SMS list. A fixed line can't receive a text โ€” send anyway and you pay for a message that goes nowhere.
  • Premium-rate and toll-free numbers. Dialing or texting a premium-rate line can rack up charges; a toll-free number is an IVR/switchboard, not a person.
  • Wrong or missing country codes, so half your list won't route.

Cleaning first means: fewer wasted SMS/call credits, higher connect rates, consistent E.164 formatting your CRM and SMS API actually accept, and mobile numbers correctly separated from landlines for SMS.


The lead-verification suite: find โ†’ verify โ†’ clean

This Actor is the phone half of a lead-hygiene pipeline. Pair it with its siblings:

  1. Find the contacts.
    • Website Contact Finder โ€” crawl any domain and pull out emails, phones and social links.
    • Company Enrichment โ€” turn a domain into tech stack, contacts and mail provider.
  2. Verify each channel before you use it:
    • Bulk Email Verifier โ€” syntax + live MX + disposable/role/free checks and a 0โ€“100 deliverability score, for the email column.
    • Bulk Phone Number Validator โ€” this Actor โ€” for the phone column.
  3. Then reach out on a clean, correctly-formatted, correctly-typed list.

The result: you stop paying your SMS and dialer tools to attempt numbers that were never going to connect, and every number that survives is stored in one canonical format.


What each field means

FieldWhat it tells you
inputThe original string you supplied, unchanged (so you can join back to your source rows).
isValidThe number is a valid number under its country's numbering plan โ€” right length and an allocated prefix. This is the field to filter on.
isPossibleWeaker check: the number is a plausible length for the country, even if the specific prefix isn't a real allocation. Useful to tell "typo" (isPossible:false) from "looks real but isn't allocated".
e164The number in canonical E.164 format (+14155552671) โ€” the one format SMS APIs, CRMs and dialers universally accept. Store this.
nationalHuman-readable national format, e.g. (415) 555-2671.
internationalHuman-readable international format, e.g. +1 415 555 2671.
countryDetected ISO country code (US, GB, DEโ€ฆ), inferred from the +country code, or from your defaultCountry for local-format numbers.
countryCallingCodeThe dialing prefix (1, 44, 49โ€ฆ).
typeThe raw line type from libphonenumber: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE, SHARED_COST, UAN, PAGER, etc. null when the country's plan doesn't distinguish.
lineTypePlain-English label for type (e.g. Mobile, Landline (fixed line), Toll-free, VoIP).
isMobiletrue when the number is mobile (or the ambiguous fixed-line-or-mobile) โ€” i.e. a candidate for SMS.
riskFlagsArray of outreach warnings: invalid, premium_rate, toll_free, shared_cost, uan, pager, not_sms_reachable (landline). Empty for a clean, textable mobile.
reasonShort machine-readable status: ok, possible-but-invalid, invalid-number, unparseable, empty-input.
validatedAtISO timestamp of the check.

Honest note: this is offline metadata, not a live carrier/HLR lookup

libphonenumber validates a number against national numbering plans and derives its type from metadata. It is accurate, instant and free โ€” but it is offline. That means:

  • It tells you a number is valid and, say, a mobile line โ€” it does not perform a live carrier (HLR) lookup, does not know the current carrier, and can't tell you whether the number was ported or is currently active/switched-on. Those need a paid, per-number network query.
  • So we do not invent carrier data. Where a live tool would guess a carrier name, we give you the honest offline signals instead: type, lineType, country, and countryCallingCode. That's enough to normalize a list, split mobile from landline, and drop the invalid and premium/toll-free numbers โ€” which is 90% of why you clean a list in the first place.

If you later need live carrier/active-line status on the survivors, run those few numbers through a paid lookup โ€” but only after this Actor has stripped out the invalid ones for free.


NumVerify / Twilio Lookup alternative

Services like NumVerify and Twilio Lookup charge per request and gate the basic checks behind an API key and a metered account. For format, validity, country and line-type โ€” the checks most people actually run in bulk โ€” you don't need any of that. This Actor does the same offline validation libphonenumber powers under the hood, on your whole list, with:

  • No API key and no third-party signup.
  • Pay-per-result pricing โ€” you pay per number validated, nothing for idle time.
  • Bulk-first: paste thousands of numbers, get one clean dataset (CSV / JSON / Excel / API).

Use it as your default bulk validator; reserve paid live-carrier lookups for the handful of numbers where you genuinely need real-time active-line status.


Input

{
"phoneNumbers": ["+14155552671", "+442071838750", "2025551234"],
"defaultCountry": "US"
}
FieldTypeDefaultDescription
phoneNumbersarray of stringsโ€” (required)Numbers to validate, one per line. E.164 numbers (with + and country code) parse as-is; national-format numbers use defaultCountry.
defaultCountrystring (ISO code)"US"Country used to interpret numbers written without a leading +country code.

Output

One record per number:

{
"input": "+14155552671",
"isValid": true,
"isPossible": true,
"e164": "+14155552671",
"national": "(415) 555-2671",
"international": "+1 415 555 2671",
"country": "US",
"countryCallingCode": "1",
"type": "FIXED_LINE_OR_MOBILE",
"lineType": "Fixed line or mobile",
"isMobile": true,
"riskFlags": [],
"reason": "ok",
"validatedAt": "2026-07-04T00:00:00.000Z"
}
{
"input": "+442071838750",
"isValid": true,
"isPossible": true,
"e164": "+442071838750",
"national": "020 7183 8750",
"international": "+44 20 7183 8750",
"country": "GB",
"countryCallingCode": "44",
"type": "FIXED_LINE",
"lineType": "Landline (fixed line)",
"isMobile": false,
"riskFlags": ["not_sms_reachable"],
"reason": "ok",
"validatedAt": "2026-07-04T00:00:00.000Z"
}

The dataset ships with a table view (input, valid, E.164, country, type, mobile, risk flags) and exports to CSV, JSON, Excel, and via API.


Use cases

  • Clean a lead list before importing it into your CRM or dialer โ€” one canonical E.164 column, invalids dropped.
  • Prep an SMS campaign โ€” keep isMobile:true, drop landlines (not_sms_reachable) so you don't pay to text a line that can't receive texts.
  • Verify signups โ€” validate the phone a user typed into your form, in the right country, before you store or SMS-verify it.
  • De-risk a purchased or scraped list โ€” strip invalid, premium_rate and toll_free numbers before they cost you.
  • Normalize mixed-country data โ€” turn a jumble of local formats into consistent E.164 your systems accept.
  • Segment by line type โ€” route mobiles to SMS, landlines to voice.

FAQ

Does it do a live carrier / HLR lookup or tell me the carrier name? No โ€” see the honest note above. It's offline libphonenumber validation: validity, E.164, country, and line type. It does not invent carrier data or check whether a line is currently active/ported.

What's the difference between isValid and isPossible? isPossible only checks the length is plausible for the country. isValid also checks the prefix is a real allocation. Filter on isValid; use isPossible to distinguish "typo" from "plausible but not a real number".

What if a number has no + and no country code? It's interpreted using defaultCountry (default US). Set it to your list's main country (e.g. GB, DE, PE) for accurate parsing of local-format numbers.

Can it receive SMS if it's a landline? No โ€” a FIXED_LINE can't receive SMS. Those get the not_sms_reachable flag so you can exclude them from SMS sends.

Do I need an API key or account anywhere? No. All numbering-plan metadata is bundled โ€” nothing is queried over the network.

How fast is it? Very โ€” validation is pure and offline, so thousands of numbers run in seconds.

Are results deduplicated? Yes, the input list is de-duplicated (whitespace-insensitive) before validation.


Automate it

Run this Actor on a schedule or from your own code:

  • Schedule it in the Apify Console to re-validate a list periodically.
  • API / SDK: call it from Node or Python and read the dataset back.
  • Integrations: pipe results to Google Sheets, Slack, Zapier, Make, or a webhook.
  • Chain it: run Website Contact Finder โ†’ send the emails to Bulk Email Verifier and the phones to this validator โ†’ export the clean rows to your outreach tool.

Pricing is pay-per-result: you're charged per number validated, so a run costs exactly what you use.


Part of a lead-verification & enrichment suite: Website Contact Finder and Company Enrichment to find and enrich; Bulk Email Verifier and Bulk Phone Number Validator to clean each channel before you reach out.