Phone Number Validator API - Valid, Type, Country, E.164 avatar

Phone Number Validator API - Valid, Type, Country, E.164

Pricing

from $1.00 / 1,000 email verified (with mailbox check)s

Go to Apify Store
Phone Number Validator API - Valid, Type, Country, E.164

Phone Number Validator API - Valid, Type, Country, E.164

Validate phone numbers from any country: valid or not, E.164 and national formats, country, calling code and line type (mobile, fixed, toll-free, VoIP, premium). No carrier lookup fees — pure numbering-plan validation.

Pricing

from $1.00 / 1,000 email verified (with mailbox check)s

Rating

0.0

(0)

Developer

Blackcube

Blackcube

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

The contact validation suite

Paste phone numbers in any format and get back whether each can exist, its E.164 and national forms, country, calling code and line type. Pure computation — nothing is scraped, nothing is sent, no proxy, no API key. Invalid input is free, and you pay less when less could be checked.

Quick start

  1. Press Start — the defaults are a working run that shows every verdict.
  2. Replace them with your own numbers, one per line, and set the default country for numbers without a + prefix.
  3. Take the dataset as JSON, CSV or Excel, or via the API. Every row has a type; the free coverage row says what was asked for, what arrived, and whether mailbox checks were possible from this network.

What people use it for

  • CRM hygiene. Normalise every number to E.164 once, and know which ones can receive SMS.
  • Form validation in a workflow. Reject a number that cannot exist in its country before it reaches sales.
  • Feeding an AI agent or workflow. Send objects from n8n, Make or a sheet as records; the email or phone field is found by name and every other field comes back on the row as passthrough.

What the rows look like

A phone row

{
"type": "phone",
"input": "07911 123456",
"valid": true,
"possible": true,
"e164": "+447911123456",
"national": "07911 123456",
"international": "+44 7911 123456",
"country": "GB",
"countryCallingCode": "44",
"lineType": "MOBILE",
"isMobile": true
}

valid is the numbering-plan answer; possible is the looser length check. lineType is MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, VOIP, PAGER, UAN, PERSONAL_NUMBER, SHARED_COST or VOICEMAIL. Carrier names are not included — that is a paid lookup this Actor does not sell.

What it costs

You pay forPrice
Each phone number validated$2.00 per 1,000 numbers

Free, always: an input that is not an email, a phone number or a domain at all, a duplicate of something already in the run (one inbox spelled three ways is one charge), every input the run did not reach, every error row, the coverage row and the run summary. A run that checks nothing costs nothing.

Set Cost ceiling (USD) to stop any run before it passes a number you choose; the free summary row reports what the run actually spent.

FAQ

Do I need an API key for anything?

No. Everything is handled for you and there is nothing to buy on top. Pure computation — no website is scraped, no proxy is used.

Does it tell me the carrier?

No. Carrier and porting data are paid telecom lookups; this Actor validates against the international numbering plans, which is what most pipelines actually need, at a fraction of the price.

Can I send my CRM rows instead of a plain list?

Yes. Put objects in Records. The email, phone or domain field is found by name (email, e-mail, phone, mobile, tel, domain, website…) and every other field is returned on the row as passthrough, so your ids come back attached.

Will I be charged twice for the same address?

No. Addresses are collapsed on their normalised form — Gmail dots and +tags, upper and lower case — so one inbox is one row and one charge.

Limits, stated plainly

Phone validation is against the numbering plans (Google's libphonenumber metadata): it says whether a number can exist and what type it is, not whether it is currently assigned or who the carrier is.

Nothing here contacts WhatsApp, Telegram or any messaging service — those checks need an unofficial client and are not sold.

Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is vonsensey/phone-number-validator-api; every snippet below sends {}, which runs the defaults shown on the form — replace it with your own input.

n8n

Install the Apify community node (@apify/n8n-nodes-apify under Settings → Community Nodes, or search "Apify" on n8n Cloud). Add Apify → Run Actor with Actor vonsensey/phone-number-validator-api and your input JSON, then Apify → Get Dataset Items on the run's defaultDatasetId and pipe the rows anywhere. For scheduled runs, the On new Apify Event trigger fires when a run of this Actor finishes.

MCP (Claude, Cursor, VS Code, any MCP client)

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vonsensey/phone-number-validator-api",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Your agent then calls vonsensey/phone-number-validator-api as a tool with the same input the form takes and reads the dataset back.

REST API (one call, rows in the response)

curl -X POST "https://api.apify.com/v2/acts/vonsensey~phone-number-validator-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" -d '{}'

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/phone-number-validator-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/phone-number-validator-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Make, Zapier, LangChain, CrewAI

The Apify app in Make and Zapier has a Run an Actor module: pick vonsensey/phone-number-validator-api. In LangChain and CrewAI the Apify tool wrappers take the same Actor id. A daily schedule needs nothing but the Console: Schedules → Create → this Actor → cron, and the dataset fills on its own.