WhatsApp Number Validator | Bulk Phone Cleanup avatar

WhatsApp Number Validator | Bulk Phone Cleanup

Pricing

from $0.80 / 1,000 number validateds

Go to Apify Store
WhatsApp Number Validator | Bulk Phone Cleanup

WhatsApp Number Validator | Bulk Phone Cleanup

Validate and clean phone lists in bulk. Get E.164 format, country, carrier, line type, WhatsApp capability and best-effort live registration status with explicit checked, unavailable or pending states. $0.80 per 1,000 on paid plans.

Pricing

from $0.80 / 1,000 number validateds

Rating

4.8

(7)

Developer

Apivault Labs

Apivault Labs

Maintained by Community

Actor stats

4

Bookmarked

377

Total users

60

Monthly active users

10 hours

Issues response

8 days ago

Last modified

Share

✅ WhatsApp Number Validator — Bulk Phone Cleanup | $0.80/1K Paid Plans

Watch the 20-second Fast WhatsApp Number Validator walkthrough

▶️ Watch the fast 20-second walkthrough — paste a bulk phone list, start the Actor, review live WhatsApp status and phone intelligence, then export clean CSV or JSON.

Validate phone numbers and request a best-effort live WhatsApp registration check in bulk. Paste numbers and get back an explicit status for each one, plus full phone metadata — E.164 format, country, region, carrier, line type (mobile / landline / VoIP), time zones, and a WhatsApp-ready flag — so you stop wasting sends on landlines, typos and dead numbers.

✅ No customer WhatsApp login or QR scan required. A confirmed live response returns true or false. Live requests automatically use rotating Apify Residential Proxy sessions when they are available on the caller's account. Numbers that cannot be completed before the run limit are saved in RETRY_INPUT for another run instead of being charged as completed results.

📣 Update — from 31 July 2026: big reliability upgrade to the live WhatsApp check — a much higher match rate and far fewer missed numbers, so valid WhatsApp users are no longer marked as "not registered". Faster at scale, and now at a lower price (see below). Same simple input, better output.


🤖 For AI agents — MCP & Standby (validate on demand)

Run this Actor in Standby mode for a warm HTTP + MCP endpoint that validates a single number per call — the perfect step inside an agent or automation flow (clean a lead before you message it). Fully offline, so it answers instantly.

  • MCP tool: validate_number → validity, E.164/international/national formats, country, region, carrier, line type and a whatsappCapability grade (yes/maybe/no).
  • REST (same endpoint): GET /?number=+14155552671 (optional &defaultCountry=US)

Turn on Standby in the Actor's settings to get your endpoint URL.


🔗 Use it in n8n

There's a dedicated n8n community node — n8n-nodes-apivault-whatsapp-validator. Perfect for a "new lead → validate → only message real WhatsApp users" automation.

  1. In n8n: Settings → Community Nodes → Install → n8n-nodes-apivault-whatsapp-validator.
  2. Add an Apify API credential (your token from Apify Console → Settings → Integrations).
  3. Drop the WhatsApp Number Validator node in, pass phoneNumbers (or numbersText), and pipe the clean records (whatsappStatus, whatsapp, e164, carrier, country …) into your CRM, Google Sheets, or a WhatsApp / SMS sender node.

Prefer no install? The generic Apify node can run this Actor too. And in Standby / MCP mode you can validate a single number per call for real-time, per-lead checks inside a live workflow.


⚡ Quick start

{
"phoneNumbers": ["+14155552671", "+442071838750", "+5511991234567"],
"defaultCountry": "US"
}

Each number comes back as one clean record.


Ready-to-run Tasks

Ten public Tasks cover campaign cleanup, CRM normalization, carrier lookup and country-specific examples. Start small, verify the statuses, then scale the batch.


🎯 Why this matters

WhatsApp and SMS only work on valid mobile numbers. A raw list is full of landlines, mistypes, wrong country codes and dead entries. Sending to those:

  • wastes your WhatsApp Business message allowance and sender reputation,
  • inflates costs on per-message platforms,
  • and can get your number flagged for high failure rates.

Run your list through this first, drop everything that isn't a valid mobile, and only then spend on outreach.


📦 What you get per number

FieldDescription
validIs it a real, dialable number
e164Normalised +<country><number> (the format every API wants)
international / nationalHuman-readable formats
country / regionCodee.g. United States / US
locationCity / area description when available
carrierMobile carrier name when known (Claro, Airtel, JT …)
lineTypemobile, landline, fixed-or-mobile, voip, toll-free …
timezonesTime zones for the number (great for send-time targeting)
whatsappCapabletrue when the line can hold a WhatsApp account (mobile / mobile-capable plan)
whatsappStatusregistered, not_registered, or invalid in completed Dataset results
whatsappConfirmed WhatsApp boolean; invalid phone numbers return false
whatsappProfilePicOptional public profile picture URL when supported and available; otherwise null
leadScore / leadQuality0–100 outreach score + hot / warm / cold / dead label
bestTimeToMessage / localTimezone / localTimeNowSend-time helpers based on the number's time zone

⚙️ Input parameters

FieldTypeDefaultDescription
workflowenumautoMerge both inputs, or explicitly use only the structured list or pasted text
phoneNumbersarray—Numbers to validate (one per line)
numbersTextstring—Optional: paste a whole list / spreadsheet column at once (merged & de-duplicated)
defaultCountrystringUSISO region for numbers without a leading +
whatsappConcurrencyint50Parallel live checks (1–50)
whatsappTimeoutint15Per-number timeout for live check (5–60s)
outputPresetenumfullAI-friendly full, flat csv, or both
exportFormatenumdefaultLegacy API override: default / csv / both

📤 Output example

{
"input": "+5511991234567",
"valid": true,
"e164": "+5511991234567",
"international": "+55 11 99123-4567",
"national": "(11) 99123-4567",
"countryCode": 55,
"regionCode": "BR",
"country": "Brazil",
"location": "São Paulo",
"carrier": "Claro",
"lineType": "mobile",
"timezones": ["America/Sao_Paulo"],
"whatsappCapable": true,
"whatsapp": true,
"whatsappProfilePic": null,
"leadScore": 95,
"leadQuality": "hot",
"bestTimeToMessage": "now",
"localTimezone": "America/Sao_Paulo",
"localTimeNow": "14:32"
}

whatsapp is populated only when a live check is confirmed. Inspect whatsappStatus before treating false as a negative result. whatsappProfilePic is the account's public photo when available. Set "exportFormat": "csv" for HubSpot / Excel-friendly columns.


⚡ Performance

  • Efficient live checks — tuned for reliable bulk processing.
  • ~100 numbers in under 30 seconds with default concurrency.
  • Standby metadata validation (without a live registration check) responds quickly for one-number automation calls.
  • De-duplication built in — duplicate inputs are merged automatically, you never pay twice for the same number.

💡 Use cases

  • Pre-campaign list cleaning — drop landlines, typos and invalid numbers before a WhatsApp/SMS blast.
  • Cut messaging costs — only keep numbers that can actually receive messages.
  • CRM hygiene — normalise every number to E.164 and tag carrier / country.
  • Lead enrichment — append country, region, carrier and line type to a contact list.
  • Send-time targeting — use the time zone to message at the right local hour.

💰 Pricing

  • Paid Apify plans: $0.80 per 1,000 results ($0.0008 per number).
  • Apify Free plan: $8.00 per 1,000 results ($0.008 per number).

You pay per returned number. Every row always contains formatting and validity metadata. Valid numbers are added to the paid Dataset only after a definitive live response. If the run approaches its timeout or a source is temporarily unavailable, unfinished numbers are saved to the default Key-Value Store as RETRY_INPUT — a ready-to-run JSON input you can use for the next run. The ERRORS record is empty after a complete run and otherwise contains machine-readable retry or input guidance for MCP clients and automations.


❓ FAQ

Does whatsapp: true mean it's really on WhatsApp? Yes — it means the live check confirmed registration. A confirmed whatsapp: false means the live check returned a negative response. When a check cannot be completed within the run budget, whatsapp remains null and the number is excluded from the paid Dataset and placed in RETRY_INPUT.

Does the Actor use Apify Proxy? Yes. When Apify supplies APIFY_PROXY_PASSWORD for the caller, every live attempt uses a fresh US Residential Proxy session. Proxy traffic is platform usage paid by the account that starts the run. If proxy access is unavailable, the Actor uses direct/cache fallbacks and places inconclusive numbers in the retry file.

What happens when a large run reaches its timeout? The Actor reads the platform's exact ACTOR_TIMEOUT_AT value and stops live work about 90 seconds early. Completed results are flushed to the Dataset, and all remaining numbers are saved in RETRY_INPUT. Download that record and use it directly as the input of a new run.

Why do some numbers show whatsappCapable: true but whatsapp: false? whatsappCapable means the line can hold a WhatsApp account (it's a mobile / mobile-capable number). whatsapp is the live result — whether an account is actually registered on that number. A capable number with no WhatsApp account returns whatsappCapable: true, whatsapp: false.

Which countries are supported? Global — every country's numbering rules are covered.


⚖️ Use responsibly

This tool validates and formats phone numbers. You are responsible for having a lawful basis and any required consent before contacting people, and for complying with WhatsApp's terms, the TCPA, GDPR and other applicable laws.


Continue the workflow

If the Actor cleaned your list successfully, please leave an honest review.