๐ Phone Number Validator - Line Type, Country, Bulk
Pricing
$5.00 / 1,000 phone validateds
๐ 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
Maintained by CommunityActor 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:
- 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.
- 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.
- 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
| Field | What it tells you |
|---|---|
input | The original string you supplied, unchanged (so you can join back to your source rows). |
isValid | The number is a valid number under its country's numbering plan โ right length and an allocated prefix. This is the field to filter on. |
isPossible | Weaker 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". |
e164 | The number in canonical E.164 format (+14155552671) โ the one format SMS APIs, CRMs and dialers universally accept. Store this. |
national | Human-readable national format, e.g. (415) 555-2671. |
international | Human-readable international format, e.g. +1 415 555 2671. |
country | Detected ISO country code (US, GB, DEโฆ), inferred from the +country code, or from your defaultCountry for local-format numbers. |
countryCallingCode | The dialing prefix (1, 44, 49โฆ). |
type | The 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. |
lineType | Plain-English label for type (e.g. Mobile, Landline (fixed line), Toll-free, VoIP). |
isMobile | true when the number is mobile (or the ambiguous fixed-line-or-mobile) โ i.e. a candidate for SMS. |
riskFlags | Array of outreach warnings: invalid, premium_rate, toll_free, shared_cost, uan, pager, not_sms_reachable (landline). Empty for a clean, textable mobile. |
reason | Short machine-readable status: ok, possible-but-invalid, invalid-number, unparseable, empty-input. |
validatedAt | ISO 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, andcountryCallingCode. 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"}
| Field | Type | Default | Description |
|---|---|---|---|
phoneNumbers | array of strings | โ (required) | Numbers to validate, one per line. E.164 numbers (with + and country code) parse as-is; national-format numbers use defaultCountry. |
defaultCountry | string (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_rateandtoll_freenumbers 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.