WhatsApp Number Validator - Bulk Check 10K per Run avatar

WhatsApp Number Validator - Bulk Check 10K per Run

Pricing

from $1.00 / 1,000 number validateds

Go to Apify Store
WhatsApp Number Validator - Bulk Check 10K per Run

WhatsApp Number Validator - Bulk Check 10K per Run

Check if phone numbers have WhatsApp. Validate up to 10,000 numbers per run from CSV, Excel, or direct input. Yes/no result per number. Clean contact lists before WhatsApp campaigns.

Pricing

from $1.00 / 1,000 number validateds

Rating

3.5

(2)

Developer

ClearPath

ClearPath

Maintained by Community

Actor stats

6

Bookmarked

993

Total users

66

Monthly active users

0.48 hours

Issues response

7 hours ago

Last modified

Share

WhatsApp Phone Number Validator | Bulk Verification API (2026)

Check 10,000 numbers for WhatsApp. Find registered accounts in your contact list.

Built by Clearpath, the team behind Telegram Number Validator and Email Account Checker. This WhatsApp validator has been used in 8,000+ lifetime runs.

Why choose this actor?

  • Check up to 10,000 numbers together. Find which numbers are registered on WhatsApp and export the result with each normalized number, country code and check time. No WhatsApp login is needed.
  • Turn your spreadsheet into a checked contact list. Upload CSV/XLSX or paste your numbers. Phone-column detection, country-code handling and duplicate removal prepare the list automatically, including common CRM exports.
  • Keep only WhatsApp contacts. Enable onlyWhatsappUsers to export registered numbers, or retain both yes/no results for review. Download JSON, CSV or Excel to update your contact list.

Preview sample output

Preview the output first

{
"testMode": true
}

Open actor input with Test Mode enabled to see three fixed sample records. No real numbers are checked or billed as validations. For real checks, disable Test Mode and use a paying Apify account. A minimum batch applies, last documented as 500 unique valid numbers; if it changes, the run tells you the number required.

Mainland China (+86) numbers are skipped. An empty hasWhatsapp means a number was not checked. Registration does not establish recent account activity. WhatsApp-only filtering still bills all numbers checked. See pricing for current charges.

Clearpath · Phone & Account Intelligence
 WhatsApp
You are here
 Telegram
Account checks
 Phone Status
Active-number checks
 Email Accounts
Registration checks

Copy to your AI assistant

clearpath/whatsapp-phone-number-validator-api on Apify. Check phone lists for WhatsApp registration, returning hasWhatsapp=true/false (null means not checked), normalized phoneNumber, originalInput, countryCode and checkedAt. Preview with {"testMode":true}; real checks require a paying Apify account and the current minimum batch (last documented 500 valid unique numbers), up to 10,000 numbers. Inputs: phoneNumbers, csvFile, defaultCountryCode, onlyWhatsappUsers. Mainland China +86 is unsupported. Call ApifyClient("TOKEN").actor("clearpath/whatsapp-phone-number-validator-api").call(run_input={...}), then read defaultDatasetId. Full spec: GET https://api.apify.com/v2/acts/clearpath~whatsapp-phone-number-validator-api/builds/default (Bearer TOKEN). Token: https://console.apify.com/account/integrations

Use Cases

Marketing Teams

Clean lists before WhatsApp campaigns. Stop paying for messages to invalid numbers.

Sales Teams

Prioritize leads registered on WhatsApp. Add WhatsApp status to CRM records.

Lead Gen Agencies

Validate purchased or scraped lists before selling. Include WhatsApp registration status.

E-commerce

Identify customer numbers registered on WhatsApp for your support workflows.

Developers

Bulk enrichment via API. Connect with Zapier, Make, n8n for automation.


Pricing

Apify PlanPer NumberPer 1,000
FreeSample output only; real checks require a paying Apify account-
No subscription$0.003$3.00
Bronze$0.0025$2.50
Silver$0.002$2.00
Gold$0.001$1.00

Examples

NumbersNo subscriptionBronzeSilverGold
500$1.50$1.25$1.00$0.50
1,000$3.00$2.50$2.00$1.00
10,000$30.00$25.00$20.00$10.00

Duplicates are auto-removed — you only pay for unique numbers.


Quick Start

Minimum batch size is currently 500 numbers per run and can change. Examples below show 3 phones for brevity, pad with the rest of your list.

Basic - Direct Input

{
"phoneNumbers": [
"+1234567890",
"+4915123456789",
"+447911123456"
]
}

From CSV File

{
"csvFile": "https://example.com/contacts.csv"
}

From Excel File

{
"csvFile": "https://example.com/contacts.xlsx"
}

Combined Input

{
"phoneNumbers": ["+1234567890", "+4915123456789", "..."],
"csvFile": "https://example.com/more-contacts.csv"
}

Input Parameters

ParameterTypeRequiredDescription
phoneNumbersarrayNo*List of phone numbers with country code (e.g., +1234567890). Maximum 10,000 numbers per run (combined with csvFile). A minimum batch size also applies, currently 500, and it can change (see Minimum batch size).
csvFilestringNo*URL or Apify Key-Value store key to CSV or Excel (.xlsx) file with phone numbers
defaultCountryCodestringNoCountry code to prepend to numbers without a + prefix (e.g., 91 for India, 1 for US)
onlyWhatsappUsersbooleanNoOnly output numbers that have WhatsApp (default: false)

*At least one of phoneNumbers or csvFile is required.

Phone Number Formats

The actor accepts phone numbers in various formats and normalizes them automatically:

+1234567890 ✅ E.164 (preferred)
1234567890 ✅ Without plus
+1 234 567 890 ✅ With spaces
+1-234-567-890 ✅ With dashes
(123) 456-7890 ✅ US format

Numbers Without Country Code

If your CSV contains local numbers without country code prefix (e.g., 9876543210 instead of +919876543210), use the defaultCountryCode field:

{
"csvFile": "https://example.com/indian-contacts.csv",
"defaultCountryCode": "91"
}
Your CSVDefault Country CodeResult
987654321091+919876543210 (India) ✅
55512345671+15551234567 (US) ✅
+44791112345691+447911123456 (unchanged) ✅

Numbers that already have a + prefix are not modified.

CSV/Excel File Requirements

  • Supported formats: .csv, .xlsx
  • Delimiters: Comma, semicolon, tab, pipe (auto-detected)
  • Column detection: Automatically finds phone columns including:
    • Standard: phone, mobile, cell, tel, telephone, whatsapp
    • Variations: phone number, mobile number, cell phone, contact number
    • CRM exports: mobile phone, direct phone, work phone, personal phone, primary phone
    • International: telefon, telefono, téléphone, celular, handy
  • No headers? Scans content to find phone-like columns automatically
  • International headers: Non-English phone columns are detected automatically when possible

Output

Each validated number returns:

FieldTypeDescription
phoneNumberstring|nullPhone number in E.164 format (null when the input could not be read as a valid number)
originalInputstringOriginal input as provided
countryCodestring|nullDetected country code (e.g., US, DE, GB); null for unreadable numbers
isValidFormatbooleanWhether the input was recognized as a valid phone number
hasWhatsappboolean|nulltrue if number has WhatsApp, false if not, null if the number was not checked
checkedAtstringISO 8601 timestamp of validation

Numbers that cannot be read as valid phone numbers are still included in the output with isValidFormat: false and hasWhatsapp: null. They are not submitted for checking and incur no validation charge, so nothing in your input silently disappears.

China mainland (+86) numbers cannot be checked. You can leave them in your list: they are skipped automatically, returned with hasWhatsapp: null, and incur no validation charge, while the rest of your numbers are checked as normal. A run made up entirely of +86 numbers stops immediately and tells you so.

Output Example

[
{
"phoneNumber": "+1234567890",
"originalInput": "+1234567890",
"countryCode": "US",
"isValidFormat": true,
"hasWhatsapp": true,
"checkedAt": "2025-01-15T10:30:00.000Z"
},
{
"phoneNumber": "+4915123456789",
"originalInput": "+49 151 23456789",
"countryCode": "DE",
"isValidFormat": true,
"hasWhatsapp": true,
"checkedAt": "2025-01-15T10:30:00.000Z"
},
{
"phoneNumber": "+447911123456",
"originalInput": "447911123456",
"countryCode": "GB",
"isValidFormat": true,
"hasWhatsapp": false,
"checkedAt": "2025-01-15T10:30:00.000Z"
},
{
"phoneNumber": null,
"originalInput": "not-a-number",
"countryCode": null,
"isValidFormat": false,
"hasWhatsapp": null,
"checkedAt": "2025-01-15T10:30:00.000Z"
}
]

API Integration

Python

from apify_client import ApifyClient
client = ApifyClient("your_api_token")
run = client.actor("clearpath/whatsapp-phone-number-validator-api").call(
run_input={
"phoneNumbers": ["+1234567890", "+4915123456789"]
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
status = "✅ WhatsApp" if item["hasWhatsapp"] else "❌ No WhatsApp"
print(f"{item['phoneNumber']}: {status}")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'your_api_token' });
const run = await client.actor('clearpath/whatsapp-phone-number-validator-api').call({
phoneNumbers: ['+1234567890', '+4915123456789']
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
const status = item.hasWhatsapp ? '✅ WhatsApp' : '❌ No WhatsApp';
console.log(`${item.phoneNumber}: ${status}`);
});

cURL

curl -X POST "https://api.apify.com/v2/acts/clearpath~whatsapp-phone-number-validator-api/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"phoneNumbers": ["+1234567890", "+4915123456789"]}'

Advanced Usage

Validate from Google Sheets

Export your Google Sheet as CSV and use the public URL:

{
"csvFile": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/export?format=csv"
}

Large Batch Processing

For lists over 10,000 numbers, split into multiple runs:

from apify_client import ApifyClient
client = ApifyClient("your_api_token")
all_numbers = [...] # Your large list
# Split into chunks of 10,000
chunks = [all_numbers[i:i+10000] for i in range(0, len(all_numbers), 10000)]
all_results = []
for chunk in chunks:
run = client.actor("clearpath/whatsapp-phone-number-validator-api").call(
run_input={"phoneNumbers": chunk}
)
results = list(client.dataset(run["defaultDatasetId"]).iterate_items())
all_results.extend(results)
print(f"Validated {len(all_results)} numbers")

Filter WhatsApp Users Only

Use the onlyWhatsappUsers option to only output numbers with WhatsApp:

{
"phoneNumbers": ["+1234567890", "+4915123456789"],
"onlyWhatsappUsers": true
}

Or filter programmatically:

whatsapp_users = [item for item in results if item["hasWhatsapp"]]
print(f"Found {len(whatsapp_users)} WhatsApp users")

FAQ

Q: How accurate is the validation? A: Returns WhatsApp registration status at the time of the check.

Q: What countries are supported? A: Mainland China (+86) is excluded. Numbers must include a country code or use defaultCountryCode.

Q: Do I need a WhatsApp account? A: No. Fully automated, no WhatsApp credentials required.

Q: How fast is it? A: ~1-2 minutes per 1,000 numbers.

Q: What about duplicates? A: Auto-removed after normalization. You're only charged for unique numbers.

Q: How many numbers do I need per run, and why did the minimum change? A: The minimum batch size is currently 500 numbers per run. It is not fixed: it has ranged between 300 and 500, and it can change on any given day. You never have to guess it. If your list is below the minimum in force at that moment, the run stops right away, no validation is charged, and the status message states the exact number required, for example "At least 500 valid phone numbers are required per run. You provided 320." Add numbers to reach that figure and run again. Duplicates and unreadable entries do not count toward it, only unique valid numbers do.

Q: Some of my numbers came back with an empty result. What does that mean? A: A number with an empty hasWhatsapp was not checked, which is different from being checked and found to have no WhatsApp account. It incurs no validation charge. Very large batches occasionally cannot be completed in one go; when that happens the run automatically continues in smaller batches, and only numbers that no batch could complete are returned this way. Nothing is wrong with those numbers. Submitting them again in a smaller run normally gets them checked.

Q: My run failed and said none of my numbers were checked. What should I do? A: Nothing is wrong with your numbers, and no validation was charged, because none of them were checked. The run already retried your list in smaller batches automatically, so re-running it unchanged is unlikely to help. This is a problem on our side. Please contact support if it keeps happening.


More from Clearpath (Email tools):


📧 Support

  • Email: max@mapa.slmail.me
  • Feature Requests: Email or submit via issues
  • Response Time: Typically within 24 hours

This actor validates publicly available WhatsApp registration status. Users are responsible for complying with WhatsApp's Terms of Service and applicable data protection regulations (GDPR, CCPA).