Normalize user-supplied phone strings to E.164 with offline libphonenumber

Validate and normalize phone strings you already hold with Google’s libphonenumber engine. This Actor returns E.164, international, and national formatting plus country and number-type signals. It runs offline — no API key, no per-record enrichment network call, and no people discovery. It does not crawl contact pages; that inventory belongs on Contact Page Audit & Business Channel Extractor.

$2.00 per 1,000 phone format validation results

Open Bulk Phone Format Validator on Apify

Offline format validation of strings you supply, not page crawling

Use this page when the job is CRM hygiene or SMS/voice formatting: you already have phone strings from a consented export and need E.164 plus line-type classification. Use Contact Page Audit & Business Channel Extractor when the job is a reviewable inventory of public business channels (support paths, phones, social profiles) from contact, about, or support pages.

This Actor Contact Page Audit & Business Channel Extractor
Intent Normalize user-supplied phone strings to E.164 with type detection Inventory public business contact channels for site QA and account hygiene
Input Phone strings in numbers (max 1000) Contact, about, support, or company URLs in urls (max 100)
What it reads The strings you pass; google-libphonenumber runs locally, no network Public contact / about / support / policy / company pages
Primary output Format-validation row: original input, validity, E.164 / international / national, country, line type public_contact_channel rows: support path, phone, social URLs, source context
People discovery None. Does not acquire numbers or crawl profiles None. Person-level email candidates are suppressed
In-service / HLR check No. Format validation only; a valid number may still be unassigned Not a phone-format validator

The Store description states the Actor returns E.164 formatting, country, and number type without discovering people or numbers. The README states it does not acquire numbers or call a per-record enrichment API. Pass an authorized CRM or customer-supplied list — not a harvest from public pages.

Use cases

Published Key Features: 250+ countries’ numbering plans; type detection (mobile, landline, VoIP, toll-free, premium); E.164, international, and national outputs; country detection from number format; offline google-libphonenumber with no API key.

How is Bulk Phone Format Validator different from Contact Page Audit & Business Channel Extractor?

This Actor is offline format validation of phone strings you already have. Required input is numbers (maximum 1000). It runs Google libphonenumber locally, with no network lookup, and returns E.164 / international / national formatting, country, and number-type signals. It does not fetch pages, inventory public business channels, or discover people or numbers. Contact Page Audit & Business Channel Extractor inventories public business contact channels from contact, about, support, policy, and company pages you supply (urls, maximum 100) and emits public_contact_channel rows (support path, phone, social URLs). Use this Actor to normalize an authorized phone-string list. Use Contact Page Audit when the job is a reviewable inventory of public business channels on pages.

What input is required?

numbers is required. The live schema description is “Phone numbers to validate (max 1000).” Other live schema fields:

Field Type Default Notes
numbers string[] required Phone numbers to validate (max 1000). Schema prefill is +14155552671.
defaultCountry string US ISO country code for numbers without a country prefix. Set this to your primary market for local formats.
delivery string dataset dataset or webhook
webhookUrl string POST target when delivery is webhook
dryRun boolean false Run without saving results (for testing)

Live schema names are numbers, defaultCountry, delivery, webhookUrl, and dryRun. README examples that send phones, includeCarrier, or normalizeOnly are not live schema fields.

Published Store example run input:

{
  "numbers": [
    "+14155552671",
    "+442071234567",
    "+81312345678"
  ],
  "defaultCountry": "US",
  "delivery": "dataset",
  "dryRun": false
}

Published README input example (schema-valid):

{
  "numbers": ["+1-555-1234567", "03-1234-5678", "020 7946 0958"],
  "defaultCountry": "JP"
}

Start with Quickstart (10 Sample Numbers) to confirm E.164 output and type detection. Set defaultCountry to your primary market for numbers without a country-code prefix. Use dryRun: true before larger batches or webhook delivery.

Run Bulk Phone Format Validator on Apify

What does a result row contain?

The published README field table lists input, valid, e164, country, countryName, carrier, lineType, and error. The published README sample uses input, isValid, type (for example FIXED_LINE), formatted.e164, formatted.international, formatted.national, country (full name), and countryCode (ISO). There is no published output JSON schema on the Store page.

Published README sample:

{
  "input": "03-1234-5678",
  "isValid": true,
  "type": "FIXED_LINE",
  "formatted": {
    "e164": "+81312345678",
    "international": "+81 3-1234-5678",
    "national": "03-1234-5678"
  },
  "country": "Japan",
  "countryCode": "JP"
}

That sample is the published README illustration, not a live coverage guarantee. README Tips say to use formatted.e164 as the canonical CRM / SMS / voice value, and to filter by type: "mobile" when the next step is SMS. Type detection is described as stronger for countries with strict mobile/landline separation (US, JP, DE) and weaker for some Asia/Africa numbering plans.

Does it discover people or verify that a number is in service?

No. The Store description states it returns E.164 formatting, country, and number type without discovering people or numbers. The README states format validation only: it does not verify the number is in service, does not call the number, and does not perform HLR lookups. A valid number has a correct country code, valid length, and matching numbering plan, and may still be unassigned. All validation runs locally with google-libphonenumber; phone strings are not sent to an external lookup API.

Use an authorized export. This Actor is not a people-finder, not a contact-page crawler, and not a reachability ping.

How is Bulk Phone Format Validator priced?

Billing is pay-per-event. The live Store card is $2.00 / 1,000 phone format validation results. The billed event is Phone format validation result at $0.002, charged only for one delivered offline format-validation row. You are not charged for Apify platform usage, only the fixed event price.

The README Cost section still quotes actor-start $0.01 plus dataset-item $0.002 ($2.01 for 1,000 items); live Store billing currently lists only the $0.002 Phone format validation result event. Check the Store pricing card for the current per-event rates.

$2.00 per 1,000 phone format validation results ($0.002 per delivered offline format-validation row)

See Bulk Phone Format Validator pricing on Apify

How do dataset, webhook, and dry-run delivery work?

delivery defaults to dataset. Set delivery to webhook and provide webhookUrl to POST results. dryRun true runs without saving results (for testing). The Store Quickstart starts with Quickstart (10 Sample Numbers) to verify E.164 output and type detection, then Lead Validation Before Dialing, Bulk CRM Cleanup (set defaultCountry to your primary market), or International Normalize (defaultCountry: US fallback).

Open Bulk Phone Format Validator on Apify

Limits to keep in mind

Open Bulk Phone Format Validator on Apify

Related pages