# WhatsApp Number Lookup – Profile, Leaks & Carrier (`scrapepilot/whatsapp-number-lookup-profile-leaks-carrier`) Actor

Verify any phone number on WhatsApp: real profile pictures, Telegram registration, carrier & line type, location, timezone, breach data (Facebook 533M, WhatsApp 487M) & lead quality score. No API key, no login, 100% autonomous. National & international formats supported

- **URL**: https://apify.com/scrapepilot/whatsapp-number-lookup-profile-leaks-carrier.md
- **Developed by:** [Scrape Pilot](https://apify.com/scrapepilot) (community)
- **Security:** Limited permissions
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 live whatsapp lookup — number founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

***

## 📱 WhatsApp Number Lookup — Profile, Leaks, Telegram, Carrier & Lead Intel

***

**The most autonomous WhatsApp number lookup and phone OSINT actor on Apify.**\
Verify WhatsApp presence, extract real profile pictures, cross-check Telegram registration, identify carrier & line type, detect breach exposure (Facebook 533M / WhatsApp 487M), and score leads — all **without any third-party API keys or login**.

**Strict Data Integrity:** Only genuine data is returned. No AI-generated avatars, no placeholder images. If a number has no public WhatsApp profile picture, `urlImage` is `null`.

***

### 💡 What is the WhatsApp Number Lookup Actor?

This actor is a **full-stack phone OSINT engine**. Just feed it a list of phone numbers (national or international format), and it will return a comprehensive intelligence report for each one — including:

- ✅ **WhatsApp Presence** — real-time verification
- ✅ **Business Account Detection** — WhatsApp Business catalog probe
- ✅ **Real Profile Picture** — extracted from WhatsApp CDN, Telegram, or Facebook breach data
- ✅ **Telegram Registration** — cross-check with direct `t.me` link
- ✅ **Carrier & Line Type** — mobile, fixed-line, VoIP, or unknown
- ✅ **Location & Timezone** — city, region, country, local time
- ✅ **Breach Intelligence** — Facebook 533M & WhatsApp 487M exposure status
- ✅ **Lead Score & Quality** — hot / warm / cold ranking for outbound prioritization
- ✅ **Best Time to Message** — suggests `now`, `evening`, or `schedule_for_morning`

Everything works **100% autonomously** — no WhatsApp Business API, no Truecaller key, no Numverify key, no login required.

***

### 🔥 SEO Keywords (Why This Actor Ranks)

`whatsapp number lookup`, `whatsapp number checker`, `whatsapp profile picture scraper`, `whatsapp leads`, `phone number OSINT`, `phone number lookup`, `telegram number check`, `whatsapp business detector`, `carrier lookup`, `phone carrier lookup`, `facebook 533m breach check`, `whatsapp 487m breach`, `phone number validation`, `E.164 phone parser`, `phone leads for cold outreach`, `B2B phone intelligence`, `Apify phone lookup actor`, `no API key whatsapp lookup`, `autonomous whatsapp verification`

***

### 🚀 Key Features

| Feature | Description |
|---------|-------------|
| **Autonomous WhatsApp Check** | Probes `api.whatsapp.com/send/` gateway + `wa.me/c/` catalog to verify existence and business status. |
| **Real Profile Picture Extraction** | Pulls genuine CDN image and re-hosts it in Apify Key-Value Store to bypass 403. |
| **Telegram Cross-Check** | Resolves `t.me/+{number}` to detect registration + real profile photo. |
| **Facebook 533M Breach Lookup** | Detects if the number appears in the Facebook 533M dump. |
| **WhatsApp 487M Breach Lookup** | Detects regional coverage in the WhatsApp 487M global scrape. |
| **Carrier Intelligence** | Real carrier name + line type via `phonenumbers` library + regional fallback. |
| **Location & Timezone** | City, country, IANA timezone, current local time. |
| **Lead Scoring** | Algorithmic score 0–100 → hot / warm / cold classification. |
| **Permanent Caching** | Every successful lookup is cached; reruns are 15× cheaper ($0.10 vs $30/1K). |
| **Concurrency Control** | Safe parallel processing up to 50 numbers at once. |
| **Pay-Per-Event Pricing** | Only charged when a number exists on WhatsApp. Failed lookups are free. |
| **No API Keys** | Zero sign-ups, zero third-party dependencies. |

***

### 📥 Input Parameters

The actor accepts a JSON object with the following fields:

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `numbers` | array of strings | Yes | Demo numbers | Phone numbers in any format (national or international). |
| `defaultCountryCode` | string | No | `null` | Two-letter ISO country code (e.g., `US`, `BD`) for parsing local-format numbers. |
| `concurrency` | integer | No | `5` | Parallel workers (1–50). |
| `preferCache` | boolean | No | `true` | Use the permanent cache to skip live lookups. |
| `onlyCache` | boolean | No | `false` | Return cache-only results (never call upstream). |
| `includeProfilePic` | boolean | No | `true` | Return the real WhatsApp profile picture if available. |
| `includeAbout` | boolean | No | `true` | Return the "About" status text. |
| `includeTelegram` | boolean | No | `true` | Cross-check Telegram registration. |
| `includeLeaks` | boolean | No | `true` | Return Facebook 533M / WhatsApp 487M breach data. |
| `fbProfilePic` | boolean | No | `true` | Probe Facebook CDN for the number's profile photo. |
| `includeCarrier` | boolean | No | `true` | Return carrier name + line type. |
| `timeoutMs` | integer | No | `30000` | Per-request timeout in milliseconds. |

#### Example Input

```json
{
  "numbers": [
    "+8801841281197",
    "+14155552671",
    "+5511991234567",
    "+442071838750",
    "+919876543210"
  ],
  "defaultCountryCode": "US",
  "concurrency": 10,
  "preferCache": true,
  "includeTelegram": true,
  "includeLeaks": true,
  "includeProfilePic": true
}
```

***

### 📤 Output Fields

For each number you get one enriched record. All fields are genuine and verified.

| Field | Type | Description |
|-------|------|-------------|
| `input` | string | The original input as provided. |
| `e164` | string | International format with `+` (e.g., `+14155552671`). |
| `international` | string | Human-readable international format. |
| `national` | string | National format. |
| `number` | string | Digits-only form. |
| `valid` | boolean | Whether the number passes validation. |
| `countryCode` | integer | Numeric country code (e.g., `1`, `44`, `880`). |
| `regionCode` | string | ISO 3166-1 alpha-2 country code (e.g., `US`). |
| `country` | string | Full country name. |
| `location` | string | City / region (e.g., `San Francisco, CA`). |
| `carrier` | string | Real carrier name (e.g., `AT&T / T-Mobile`). |
| `lineType` | string | `mobile`, `fixed_line`, `fixed_line_or_mobile`, `voip`, `toll_free`, etc. |
| `timezones` | array | IANA timezones for the number. |
| `localTimezone` | string | Primary timezone. |
| `localTimeNow` | string | Current local time (HH:MM). |
| `bestTimeToMessage` | string | `now`, `evening`, or `schedule_for_morning`. |
| `whatsappCapable` | boolean | Line type capable of WhatsApp. |
| `whatsapp` | boolean | Number is on WhatsApp. |
| `exists` | boolean | Alias for `whatsapp`. |
| `isBusiness` | boolean | WhatsApp Business account. |
| `name` | string | Real display name (if exposed). |
| `urlImage` | string | null | Real profile picture URL (uploaded to Apify KV Store). |
| `whatsappProfilePic` | string | null | Alias for `urlImage`. |
| `facebookProfilePicUrl` | string | null | Facebook CDN photo (if breached). |
| `about` | string | WhatsApp "About" status. |
| `telegram` | object | Telegram cross-check result (`registered`, `firstName`, `photoUrl`, `directLink`, `status`). |
| `leakedData` | object | Breach summary (`riskLevel`, `compromisedDatasets`, `exposedFields`, `recordsIndexed`, `summary`). |
| `fbLeak` | object | Facebook-specific breach info (`exposureStatus`, `profileUrl`, `photoUrl`). |
| `leadScore` | integer | 0–100 algorithmic lead quality. |
| `leadQuality` | string | `hot` (≥80), `warm` (50–79), `cold` (<50). |
| `source` | string | `fresh`, `cache`, `database`, `not-found`, or `error`. |
| `fetchedAt` | string | ISO 8601 timestamp. |

#### Example Output (Verified Indian Mobile)

```json
{
  "e164": "+919876543210",
  "valid": true,
  "whatsapp": true,
  "carrier": "Airtel",
  "country": "India",
  "location": "India",
  "lineType": "mobile",
  "leadScore": 95,
  "leadQuality": "hot",
  "bestTimeToMessage": "schedule_for_morning",
  "localTimeNow": "21:47",
  "urlImage": "https://api.apify.com/v2/key-value-stores/.../avatar_919876543210.jpg",
  "about": "Available",
  "isBusiness": true,
  "telegram": {
    "directLink": "https://t.me/+919876543210",
    "checked": true,
    "registered": false,
    "status": "unlisted_or_private"
  },
  "leakedData": {
    "breachChecked": true,
    "riskLevel": "high",
    "compromisedDatasets": ["Facebook 533M", "WhatsApp 487M Global Scrape"],
    "exposedFields": ["Phone Number", "Full Name", "Carrier", "Geographic Location"],
    "recordsIndexed": "6,162,450 Facebook + 6,000,000 WhatsApp regional records",
    "summary": "Phone prefix (+91) was part of the 533M Facebook & 487M WhatsApp breach dumps."
  },
  "fbLeak": {
    "checked": true,
    "regionCode": "IN",
    "country": "India",
    "exposureStatus": "exposed_in_533m_dump",
    "database": "Facebook 533M Phone Directory",
    "profileUrl": "https://www.facebook.com/search/top?q=%2B919876543210"
  },
  "source": "fresh",
  "fetchedAt": "2026-10-03T16:17:57.352959+00:00"
}
```

#### Example Output (Clean US Number)

```json
{
  "e164": "+14155552671",
  "valid": true,
  "whatsapp": true,
  "carrier": "AT&T / T-Mobile",
  "country": "United States",
  "location": "San Francisco, CA",
  "lineType": "fixed_line_or_mobile",
  "leadScore": 70,
  "leadQuality": "warm",
  "bestTimeToMessage": "now",
  "localTimeNow": "09:17",
  "urlImage": null,
  "about": "Available",
  "isBusiness": false,
  "telegram": {
    "registered": false,
    "status": "unlisted_or_private"
  },
  "leakedData": {
    "riskLevel": "high",
    "compromisedDatasets": ["Facebook 533M", "WhatsApp 487M Global Scrape"]
  },
  "source": "fresh"
}
```

***

### 💰 Pricing (Pay-Per-Event)

This actor uses **transparent pay-per-event pricing**. You are only charged when a real result is delivered.

| Event | Event Name | Price / 1K | When Charged |
|-------|------------|------------|--------------|
| **Live WhatsApp lookup** | `live-whatsapp-lookup` | **$30.00 / 1,000** | Fresh upstream check, number found on WhatsApp (not cached). |
| **Cached WhatsApp lookup** | `cached-whatsapp-lookup` | **$0.10 / 1,000** | Served from permanent cache (15× cheaper). |
| **Database-only hit** | `database-only-hit` | **$0.10 / 1,000** | Record found purely in offline DB, no live lookup. |
| **Profile picture addon** | `profile-picture-addon` | **$80.00 / 1,000** | Only when a **genuine** non-default profile picture is returned. |
| **Leak / breach addon** | `leak-data-addon` | **$1.50 / 1,000** | When Facebook 533M / WhatsApp 487M breach records are found. |
| **Actor start** | `apify-actor-start` | **$0.02 / run** | One-time startup fee per run. |

**Free:** Numbers not on WhatsApp, invalid numbers, and failed lookups are **never charged**.

**Example total cost for 1,000 live lookups with profile pics + leaks:**\
1,000 × ($0.03 + $0.08 + $0.0015) + $0.02 = **~$111.52**

**Example total cost for 1,000 cached lookups:**\
1,000 × $0.0001 + $0.02 = **~$0.12**

***

### 🛠 How to Use on Apify

1. **Create a task** with this actor.
2. **Paste your numbers** into the `numbers` array (any format: `+14155552671`, `+8801841281197`, `5551234567` with `defaultCountryCode: "US"`).
3. **Set concurrency** — `5` for safe runs, `10–20` for high-volume batches.
4. **Enable residential proxies** (optional, recommended for 500+ numbers).
5. **Run** — the actor queries WhatsApp, Telegram, and breach databases in parallel.
6. **Export** — download as JSON, CSV, Excel from the Dataset tab.

#### Running via API

```bash
curl -X POST "https://api.apify.com/v2/acts/your-username~whatsapp-number-lookup/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "numbers": ["+14155552671", "+8801841281197"],
    "concurrency": 5,
    "preferCache": true
  }'
```

***

### 🎯 Use Cases

- **Cold outreach & lead gen** — verify numbers before calling/messaging.
- **B2B sales intelligence** — score hot leads by carrier + Telegram + WhatsApp Business status.
- **Fraud & KYC** — detect VoIP numbers, unregistered lines, breach exposure.
- **Recruitment sourcing** — verify candidate numbers before scheduling.
- **Data enrichment** — append real carrier, timezone, and local time to CRM records.
- **Security research** — check breach exposure for a list of phone numbers.
- **Market analysis** — map carrier distribution across regions.

***

### ❓ Frequently Asked Questions

**1. Do I need a WhatsApp API key?**\
No. The actor uses WhatsApp's public web gateways without any key.

**2. Do I need a Telegram API key?**\
No. Uses `t.me/+{number}` public resolver.

**3. Will the profile pictures be real?**\
Yes. Only real, verified CDN photos are returned. If a number has no public picture, `urlImage` is `null`. **No AI-generated portraits.**

**4. How accurate is the Facebook 533M breach check?**\
The breach dataset is region-based. If the phone prefix (+1, +44, +91, etc.) is in the dump, `leakedData.riskLevel` is `high`. Individual phone numbers are checked against the CDN by prefix.

**5. What is the difference between `live-whatsapp-lookup` and `cached-whatsapp-lookup`?**\
`live` = fresh request to WhatsApp servers (expensive). `cached` = previously verified result from our permanent KV cache (15× cheaper). Set `preferCache: true` (default) to maximize savings.

**6. Why does `urlImage` sometimes come back null?**\
Because the user has no public WhatsApp profile picture, and neither Facebook breach data nor Telegram contains one. **We never fabricate images.**

**7. Am I charged for numbers not on WhatsApp?**\
No. Failed lookups (not-found) are 100% free.

**8. How long does each number take?**\
\~2–5 seconds per number with concurrency 5. A batch of 1,000 takes ~3–5 minutes.

**9. What's the difference between `whatsappCapable` and `whatsapp`?**\
`whatsappCapable` = line type *can* use WhatsApp. `whatsapp` = number *actually* registered on WhatsApp (real check).

**10. Can I run this offline / cache-only?**\
Yes. Set `onlyCache: true` — it never calls WhatsApp, only reads cache + DB. Cheaper for high-volume reruns.

***

***

### 🔗 Related Actors

- **[Telegram Username Info](https://apify.com/your-username/telegram-username-info)** — Public Telegram profile lookup.
- **[Telegram Phone Number Info](https://apify.com/your-username/telegram-phone-number-info)** — Phone-to-Telegram registration check.
- **[Bilibili Scraper](https://apify.com/your-username/bilibili-scraper)** — Bilibili videos, comments, danmaku & users.

***

***

**Start verifying WhatsApp numbers autonomously today — pay only $30/1K for live lookups. Cached results just $0.10/1K.**

````



# Actor input Schema

## `numbers` (type: `array`):

List of phone numbers in international (+8801841281197) or national format. Supports international and local syntax.
## `defaultCountryCode` (type: `string`):

Optional 2-letter ISO country code (e.g. 'BD', 'US', 'GB', 'IN', 'BR') used to parse national format numbers that do not have an international '+' prefix.
## `includeCarrier` (type: `boolean`):

Attach carrier name, country, city/location, line type (mobile/fixed/voip), formats (E.164, national, international), timezones, and local time.
## `includeProfilePic` (type: `boolean`):

Return genuine WhatsApp profile picture URL when available (from WhatsApp CDN, business catalogs, Telegram, or leaks). If private or unavailable, returns null.
## `includeAbout` (type: `boolean`):

Return the user's WhatsApp status / about bio text when available.
## `includeTelegram` (type: `boolean`):

Include Telegram presence, direct t.me link, and profile if registered.
## `includeLeaks` (type: `boolean`):

Query breach databases and provide breach exposure analysis (Facebook 533M, WhatsApp 487M scrape).
## `fbProfilePic` (type: `boolean`):

Fetch the Facebook leak record and return its stored profile picture when available.
## `preferCache` (type: `boolean`):

Try permanent cache first. If cached entry exists, skip live lookup. Falls through to live fetch on miss.
## `onlyCache` (type: `boolean`):

Never make live WhatsApp calls. Returns only data already in the database. Pairs with super-cheap per-hit pricing.
## `concurrency` (type: `integer`):

How many numbers to process in parallel (1 – 50). Higher = faster.
## `timeoutMs` (type: `integer`):

Per-lookup timeout in milliseconds.

## Actor input object example

```json
{
  "numbers": [
    "+8801841281197",
    "+14155552671",
    "+5511991234567",
    "+442071838750"
  ],
  "defaultCountryCode": "",
  "includeCarrier": true,
  "includeProfilePic": true,
  "includeAbout": true,
  "includeTelegram": true,
  "includeLeaks": true,
  "fbProfilePic": true,
  "preferCache": true,
  "onlyCache": false,
  "concurrency": 5,
  "timeoutMs": 30000
}
````

# Actor output Schema

## `results` (type: `string`):

Structured records containing existence, avatar images, bio status, Telegram presence, carrier details, and breach data.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "numbers": [
        "+8801841281197",
        "+14155552671",
        "+5511991234567",
        "+442071838750"
    ],
    "defaultCountryCode": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapepilot/whatsapp-number-lookup-profile-leaks-carrier").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "numbers": [
        "+8801841281197",
        "+14155552671",
        "+5511991234567",
        "+442071838750",
    ],
    "defaultCountryCode": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapepilot/whatsapp-number-lookup-profile-leaks-carrier").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "numbers": [
    "+8801841281197",
    "+14155552671",
    "+5511991234567",
    "+442071838750"
  ],
  "defaultCountryCode": ""
}' |
apify call scrapepilot/whatsapp-number-lookup-profile-leaks-carrier --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapepilot/whatsapp-number-lookup-profile-leaks-carrier"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZMeMWQXYelds2Zb2r/builds/ioKoNeZmIfeL7wZDV/openapi.json
