WhatsApp Number Validator — Bulk CSV Export API avatar

WhatsApp Number Validator — Bulk CSV Export API

Pricing

from $0.80 / 1,000 number validateds

Go to Apify Store
WhatsApp Number Validator — Bulk CSV Export API

WhatsApp Number Validator — Bulk CSV Export API

Check supplied phone numbers for available WhatsApp registration signals and normalize bulk lists. Bulk export: JSON, CSV, Excel and API. PPE: from $0.8/1K number checks; usage extra.

Pricing

from $0.80 / 1,000 number validateds

Rating

4.8

(7)

Developer

Apivault Labs

Apivault Labs

Maintained by Community

Actor stats

4

Bookmarked

546

Total users

67

Monthly active users

10 hours

Issues response

3 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.

Cache snapshots are historical hints, never a current registration verdict. whatsappCached preserves such a hint separately. Completed checks include whatsappVerification (provider_response, first_party_business, or linked_device) and whatsappCheckedAt. Provider answers remain best-effort; two agreeing fallback requests do not constitute independent ground truth. Conflicting fallback answers stay unknown. Cached-only records are saved in UNVERIFIED_RESULTS (up to 2,000 records, with total/truncation metadata), remain in RETRY_INPUT, and are not charged as completed checks.

📣 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.

The SUMMARY.sourceAttempts record contains aggregate counts by live-check source and outcome (resolved, noVerdict, rateLimited, unavailable). These count attempts across retries, not unique numbers, and contain no phone numbers. Unresolved valid numbers remain in RETRY_INPUT.


⚡ 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 up to 90 seconds early (one third of the remaining time for short runs). Completed results are flushed to the Dataset, and all remaining numbers are saved in RETRY_INPUT. Individual fallback chains are limited to 20-90 seconds; API writes have a separate bounded deadline. A recovery checkpoint is saved before results are exported. 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.

Ready-to-import n8n workflow

Clean a contact list before the next permitted outreach step with the maintained WhatsApp Validator n8n connector. Download the quickstart workflow, import it into n8n, add your Apify API credential, and supply the numbers you are authorized to validate.