sfoln/phone-validator · Lead generation, Developer tools, Automation On request
Validate and format phone numbers in bulk with Google's libphonenumber: valid or possible, E.164, international and national formats, country, calling code and number type (mobile, landline, VoIP). $0.80 per 1,000 numbers; non-numbers are free. Optional live carrier lookup.
Phone Number Validator validates, normalizes and classifies phone numbers in bulk. For each number you get valid / possible, the E.164, international and national formats, the country, the calling code and the number type (mobile, fixed line, toll-free, VoIP…). Validation runs offline on Google's libphonenumber metadata, so it is fast and cheap: ideal for cleaning CRM exports, sign-up forms and lead lists, and for AI agents that need a normalized number before calling or texting. An optional carrier lookup adds the carrier name and line type from a live carrier database.
Price
Price per delivered record
Event
Price
Per 1,000
Charged for
Validated phone number phone-validated
$0.0008
$0.80 / 1,000
Charged once per phone number that could be parsed and validated (valid or invalid verdict, formats, country, type).
Carrier lookup phone-carrier-lookup
$0.005
$5 / 1,000
Charged once per valid number for which the optional live carrier lookup succeeded (carrier name, line type, region).
Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
Run
Call it from code, an agent or the Console
This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com
POST https://api.apify.com/v2/actors/sfoln~phone-validator/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Validate these phone numbers and give me each one in E.164 format with its country and number type: +1 650-253-0000, +44 20 7946 0958 and the German number 030 901820.
Input
Input fields
Paste phone numbers (one per line) in any common format. Each number produces one dataset record with validity, formats, country and number type.
Field
Type
Default
Meaning
phones *
array
required
Phone numbers Phone numbers in international (+44 20 7946 0958) or national format (national numbers need a default country), one per line; commas and semicolons stay part of the number (e.g. ;ext=123). The same number written in different formats is processed once. Objects with a `phone` field are accepted too. Accounts on the Apify free plan can process up to 10 phone numbers per run.
defaultCountry
string
—
Default country ISO 3166-1 alpha-2 code (e.g. US, GB, DE) used for numbers written without a +country prefix.
carrierLookup
boolean
false
Carrier lookup (extra charge) Also look up the carrier name, line type and region for each valid number via a live carrier database. Charged as a separate event per successful lookup. Paid add-on: turned off on the Apify free plan (records carry a warning).
maxNumbers
integer
10000
Max numbers Safety cap on the number of phone numbers processed in this run. Range 1–100000.
concurrency
integer
10
Concurrency Parallel workers (matters only with carrier lookup). Range 1–10.
includeRaw
boolean
false
Include raw upstream response Attach the raw carrier-lookup payload (only with carrier lookup).
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
input
string
Input The phone number as submitted.
isValid
boolean
Valid Number matches an assigned numbering range for its country.
isPossible
boolean
Possible Length is plausible for the country (weaker than valid).
e164
string
E.164e.g. "+442079460958"
international
string
International formate.g. "+44 20 7946 0958"
national
string
National formate.g. "020 7946 0958"
rfc3966
string
tel: URI
countryCode
string
Calling codee.g. "44"
country
string | null
Country (ISO2)e.g. "GB"
nationalNumber
string
National number
extension
string | null
Extension
numberType
string | null
Number type MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, SHARED_COST, VOIP, PERSONAL_NUMBER, PAGER, UAN, VOICEMAIL or null.
carrierHint
null
Carrier hint Always null: offline validation does not include the carrier. Use carrierLookup.
carrier
string | null
Carrier Only with carrierLookup (paid plans); null when the lookup was skipped, failed or could not be charged.
carrierLineType
string | null
Carrier line type Only with carrierLookup (paid plans); null when the lookup was skipped, failed or could not be charged.
carrierRegion
string | null
Carrier region Only with carrierLookup (paid plans); null when the lookup was skipped, failed or could not be charged.
carrierLookupCharged
boolean
Carrier lookup charged True when the phone-carrier-lookup event was charged for this number.
status
string
Status ok | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"