WhatsApp Number Validator | Bulk Phone Cleanup
Pricing
from $0.80 / 1,000 number validateds
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
Maintained by CommunityActor stats
4
Bookmarked
377
Total users
60
Monthly active users
10 hours
Issues response
8 days ago
Last modified
Categories
Share
✅ WhatsApp Number Validator — Bulk Phone Cleanup | $0.80/1K Paid Plans
▶️ 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
trueorfalse. 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 inRETRY_INPUTfor 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 awhatsappCapabilitygrade (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.
- In n8n: Settings → Community Nodes → Install →
n8n-nodes-apivault-whatsapp-validator. - Add an Apify API credential (your token from Apify Console → Settings → Integrations).
- Drop the WhatsApp Number Validator node in, pass
phoneNumbers(ornumbersText), 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
- Check if a phone number is on WhatsApp
- Clean a list before a WhatsApp campaign
- Normalize phone numbers to E.164
- Validate numbers from a CSV column
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
| Field | Description |
|---|---|
valid | Is it a real, dialable number |
e164 | Normalised +<country><number> (the format every API wants) |
international / national | Human-readable formats |
country / regionCode | e.g. United States / US |
location | City / area description when available |
carrier | Mobile carrier name when known (Claro, Airtel, JT …) |
lineType | mobile, landline, fixed-or-mobile, voip, toll-free … |
timezones | Time zones for the number (great for send-time targeting) |
whatsappCapable | true when the line can hold a WhatsApp account (mobile / mobile-capable plan) |
whatsappStatus | registered, not_registered, or invalid in completed Dataset results |
whatsapp | Confirmed WhatsApp boolean; invalid phone numbers return false |
whatsappProfilePic | Optional public profile picture URL when supported and available; otherwise null |
leadScore / leadQuality | 0–100 outreach score + hot / warm / cold / dead label |
bestTimeToMessage / localTimezone / localTimeNow | Send-time helpers based on the number's time zone |
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
workflow | enum | auto | Merge both inputs, or explicitly use only the structured list or pasted text |
phoneNumbers | array | — | Numbers to validate (one per line) |
numbersText | string | — | Optional: paste a whole list / spreadsheet column at once (merged & de-duplicated) |
defaultCountry | string | US | ISO region for numbers without a leading + |
whatsappConcurrency | int | 50 | Parallel live checks (1–50) |
whatsappTimeout | int | 15 | Per-number timeout for live check (5–60s) |
outputPreset | enum | full | AI-friendly full, flat csv, or both |
exportFormat | enum | default | Legacy 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
- Website Leads Database — build targeted B2B lists
- Google Maps Scraper — collect local business contacts
- Use this Actor through Apify MCP
If the Actor cleaned your list successfully, please leave an honest review.
