Phone Number Validation API avatar

Phone Number Validation API

Pricing

Pay per event

Go to Apify Store
Phone Number Validation API

Phone Number Validation API

📞 Validate, normalize, format, and deduplicate phone numbers in bulk. Get E.164, country, type, extension, and validation reasons.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Validate, normalize, format, and deduplicate phone numbers in bulk on Apify.

This actor uses maintained libphonenumber metadata locally, so you do not need a paid validation API key, cookies, or a website account.

What does Phone Number Validation API do?

Phone Number Validation API turns messy phone lists into structured validation rows.

It accepts raw phone numbers, optional free-form text, and a default country for national numbers.

For every candidate, it returns validity, possibility, E.164 format, international format, national format, region, calling code, type, extension, duplicate metadata, and a clear validation reason.

Who is it for?

Sales operations teams use it before importing leads into a CRM.

Growth teams use it before calling or SMS campaigns.

Data enrichment teams use it inside Apify workflows.

Developers use it when they need a simple phone validation API without adding another vendor.

QA teams use it to check web-form submissions and CSV uploads.

Why use this actor?

  • ✅ No external API key required
  • ✅ Works with bulk phone lists
  • ✅ Normalizes to E.164
  • ✅ Supports international formats
  • ✅ Detects invalid and possible-only numbers
  • ✅ Extracts phone numbers from text
  • ✅ Flags duplicates
  • ✅ Produces clean dataset rows

What data can you validate?

You can validate phone numbers copied from CRMs, spreadsheets, form submissions, lead databases, support tickets, or free-form notes.

The actor is best for structural validation and normalization.

It does not call carriers and does not verify whether a subscriber currently owns the number.

Output data

FieldDescription
inputOriginal candidate value
sourcenumbers or text
isValidWhether the number is valid
isPossibleWhether the number shape is possible
validationStatusvalid, possible, invalid, parse_error, or duplicate
reasonHuman-readable validation explanation
e164Canonical E.164 number
internationalFormatHuman-readable international format
nationalFormatLocal national format
rfc3966Phone URI format
countryDetected ISO country code
countryCallingCodeCalling code
numberTypeMobile, fixed line, toll free, etc. when known
extensionParsed extension
normalizedDigitsDigits-only value
duplicateOfFirst normalized duplicate value
processedAtProcessing timestamp

How much does it cost to validate phone numbers?

The actor uses pay-per-event pricing.

There is a small run start fee and a per-result fee for each emitted validation row.

Because the actor runs locally against metadata and does not use proxies, large batches are usually inexpensive.

Check the Pricing tab on the Apify Store page for current tiered prices.

How to use it

  1. Open the actor on Apify.
  2. Paste phone numbers into the numbers input.
  3. Set defaultCountry for national numbers without a + prefix.
  4. Optionally paste notes into text to extract phone numbers automatically.
  5. Choose whether to include invalid rows.
  6. Choose whether to remove duplicates.
  7. Run the actor.
  8. Download the dataset as JSON, CSV, Excel, or via API.

Input example

{
"numbers": [
"+1 415 555 2671",
"(020) 7946 0958",
"+420 777 123 456 ext. 9",
"555-0100"
],
"text": "Sales contacts: +1 212 555 0199 and +44 20 7946 0018",
"defaultCountry": "US",
"includeInvalid": true,
"deduplicate": false,
"maxItems": 100
}

Output example

{
"input": "+1 415 555 2671",
"source": "numbers",
"isValid": true,
"isPossible": true,
"validationStatus": "valid",
"reason": "Number is valid according to libphonenumber metadata.",
"e164": "+14155552671",
"internationalFormat": "+1 415 555 2671",
"nationalFormat": "(415) 555-2671",
"country": "US",
"countryCallingCode": "1",
"numberType": "FIXED_LINE_OR_MOBILE"
}

Tips for best results

Use international + prefixes when available.

Set defaultCountry when validating national numbers.

Keep invalid rows on during audits so you can see reasons.

Turn deduplication on for clean CRM imports.

Use maxItems to cap accidental large text extraction runs.

CRM hygiene workflow

Export contacts from your CRM as phone-number strings.

Run them through this actor with your main market as defaultCountry.

Filter rows where isValid is true.

Import the E.164 column back into your CRM.

Review invalid rows separately before deleting them.

Sales operations workflow

Before a calling campaign, validate phone numbers and remove duplicates.

Use numberType and country to route lists by market.

Use reason to explain rejected rows to upstream lead vendors.

Lead enrichment workflow

Add this actor after a scraper or lead finder.

Pass extracted phone numbers to this actor.

Join results back to the source dataset by input value or row order.

Form QA workflow

Paste exported form submissions into the text field.

The actor extracts phone-like candidates and validates them.

This helps detect broken country selectors, missing prefixes, and short test numbers.

Integrations

Use the actor with Apify tasks for recurring CRM checks.

Use webhooks to send finished datasets to Make, Zapier, or your backend.

Use the Apify API to validate phone lists from internal tools.

Use dataset exports for spreadsheet review.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/phone-number-validation-api').call({
numbers: ['+1 415 555 2671'],
defaultCountry: 'US'
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/phone-number-validation-api').call(run_input={
'numbers': ['+1 415 555 2671'],
'defaultCountry': 'US',
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~phone-number-validation-api/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"numbers":["+1 415 555 2671"],"defaultCountry":"US"}'

MCP usage

Use the actor from Claude Desktop or Claude Code through Apify MCP.

MCP URL:

https://mcp.apify.com/?tools=automation-lab/phone-number-validation-api

Claude Code setup:

$claude mcp add apify-phone-validation https://mcp.apify.com/?tools=automation-lab/phone-number-validation-api

Claude Desktop JSON config:

{
"mcpServers": {
"apify-phone-validation": {
"url": "https://mcp.apify.com/?tools=automation-lab/phone-number-validation-api"
}
}
}

Example prompts:

  • Validate these CRM phone numbers and return E.164 values.
  • Extract phone numbers from this sales note and flag invalid ones.
  • Deduplicate this list before I import it into HubSpot.

Limitations

This actor validates number structure using metadata.

It does not perform live carrier lookup.

It does not guarantee the number is currently active.

It does not identify the owner of a number.

It does not bypass consent or compliance requirements.

Legality

Phone-number formatting and structural validation is generally allowed for data you are permitted to process.

You are responsible for complying with privacy, telemarketing, SMS, and consent laws in your jurisdiction.

Do not use validated numbers for unsolicited outreach where prohibited.

Troubleshooting

If a national number parses incorrectly, set defaultCountry to the correct ISO country code.

If you only want clean rows, set includeInvalid to false.

If duplicates appear, enable deduplicate.

If no text numbers are detected, paste clearer separators or use the numbers list directly.

FAQ

Does this verify whether a phone line is active?

No. It validates structure and metadata, not live subscriber status.

Does it need Twilio or another API key?

No. It runs against bundled libphonenumber metadata.

Can it process thousands of numbers?

Yes. Use maxItems to control batch size and cost.

Can it validate international numbers?

Yes. Use + country prefixes or set a default country for local numbers.

Explore other Automation Lab actors at https://apify.com/automation-lab/ for lead enrichment, website contact extraction, and data cleanup workflows.

Changelog

Initial version validates and normalizes phone numbers, extracts text candidates, and detects duplicates.

Support

If a number parses differently than expected, include the raw input, default country, and expected format when reporting the issue.