# Whatsapp Profile Scraper (`api_factory/whatsapp-profile-scraper`) Actor

📞 WhatsApp: +447984004914
📧 E-mail: contact@apifactory.pro

Our API allows you to retrieve public profile information from an account.

📷 Profile Photo Access – public profile picture/image

👤 Attributes:

- address

- description

- website

- email

- category

- business\_hours

- **URL**: https://apify.com/api\_factory/whatsapp-profile-scraper.md

- **Developed by:** [Michael Hunter](https://apify.com/api_factory) (community)

- **Categories:** Lead generation, Social media, Developer tools

- **Stats:** 9 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks

- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.10 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## WhatsApp Profile Scraper

Retrieve available WhatsApp profile information for a phone number.

The Actor can return profile-picture information and, when available, WhatsApp Business profile details including address, description, website, email, category, timezone, and business hours.

🚀 NEED **BULK VALIDATION**? Visit https://apifactory.pro/whatsapp-number-validator.aspx

### Features

- Retrieve available WhatsApp profile data
- Retrieve profile picture when visible
- Detect available WhatsApp Business profile information
- Retrieve business description
- Retrieve business address
- Retrieve business website
- Retrieve business email
- Retrieve business category
- Retrieve business hours and timezone
- Fast real-time API through Apify Standby
- Simple JSON request and response
- Suitable for CRM enrichment and automated workflows

### Profile lookup

Use the `/profile` endpoint.

#### Endpoint

```text
POST /profile
```

#### Request

```json
{
  "phone_number": "447984004914"
}
```

Phone numbers should be provided in international format. The leading `+` is optional.

### Example response

```json
{
  "phone": "+447984004914",
  "success": true,
  "contactId": "447984004914@s.whatsapp.net",
  "picture": "https://example.com/profile-picture.jpg",
  "businessProfile": true,
  "businessWid": "447984004914@s.whatsapp.net",
  "businessAddress": "London, United Kingdom",
  "businessDescription": "Example business description",
  "businessWebsite": "https://example.com",
  "businessEmail": "hello@example.com",
  "businessCategory": "Professional Services",
  "businessTimezone": "Europe/London",
  "businessHours": null,
  "status": "success",
  "message": "Success"
}
```

Not every field will be available for every profile.

For a normal WhatsApp account, a response may instead look like:

```json
{
  "phone": "+447984004914",
  "success": true,
  "contactId": "447984004914@s.whatsapp.net",
  "picture": null,
  "businessProfile": false,
  "businessWid": null,
  "businessAddress": null,
  "businessDescription": null,
  "businessWebsite": null,
  "businessEmail": null,
  "businessCategory": null,
  "businessTimezone": null,
  "businessHours": null,
  "status": "success",
  "message": "Success"
}
```

### Calling the API

This Actor supports Apify Standby, allowing it to behave like a real-time API.

#### cURL example

```bash
curl -X POST \
  "https://api-factory--whatsapp-profile-scraper.apify.actor/profile" \
  -H "Authorization: Bearer YOUR_APIFY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "447984004914"
  }'
```

Replace `YOUR_APIFY_API_TOKEN` with your Apify API token.

You can also explore and test the API through the Actor's **Endpoints** tab in Apify.

### Running from the Apify Console

The Actor can also be run normally from the Apify Console.

Enter:

```text
447984004914
```

and start the Actor.

The available profile information will be written to the Actor dataset.

### Response fields

| Field | Description |
|---|---|
| `phone` | Normalized phone number |
| `success` | Whether the profile lookup completed successfully |
| `contactId` | WhatsApp contact identifier returned by the lookup |
| `picture` | Profile-picture URL when available |
| `businessProfile` | Whether WhatsApp Business profile information was returned |
| `businessWid` | Business WhatsApp identifier when available |
| `businessAddress` | Business address when available |
| `businessDescription` | Business profile description when available |
| `businessWebsite` | Business website when available |
| `businessEmail` | Business email address when available |
| `businessCategory` | WhatsApp Business category when available |
| `businessTimezone` | Business timezone when available |
| `businessHours` | Business opening-hours information when available |
| `status` | Status returned by the profile lookup |
| `message` | Additional status information |

### Important: profile visibility

A `null` value does **not necessarily mean that the information does not exist**.

For example:

```json
{
  "picture": null
}
```

can occur because:

- The account has no profile picture
- The profile picture is not visible to the WhatsApp session performing the lookup
- The user's privacy settings restrict profile-picture visibility
- WhatsApp does not return the information for that lookup

The same principle applies to other profile fields.

### Does this Actor confirm whether a number is registered on WhatsApp?

Not necessarily.

A successful profile lookup containing a WhatsApp-style `contactId` should not by itself be treated as definitive proof that the number is registered.

Likewise:

```json
{
  "picture": null
}
```

does **not** mean the number is unregistered.

If you specifically need to determine whether a number is registered on WhatsApp, use the **WhatsApp Number Validator** Actor instead.

The two Actors are designed for different purposes:

| Actor | Purpose |
|---|---|
| WhatsApp Number Validator | Determine whether a number is registered on WhatsApp |
| WhatsApp Profile Scraper | Retrieve available profile and business information |

### Pricing

This Actor uses pay-per-result pricing.

Each successful profile lookup counts as one result.

See the Actor's current Apify pricing section for the latest price per result.

Free Apify accounts may be subject to additional usage limits.

### Common use cases

- CRM enrichment
- WhatsApp contact enrichment
- Business-profile discovery
- Retrieving available profile pictures
- Lead enrichment
- Customer-data verification
- Business-contact research
- Make, Zapier, n8n, and custom API workflows

### Input format

Use an international phone number including the country code.

Examples:

```text
447984004914
+447984004914
14155552671
5511999999999
```

### Data availability

The Actor returns only information made available by the underlying WhatsApp profile lookup at the time of the request.

Results may vary depending on:

- WhatsApp privacy settings
- Account type
- Profile visibility
- Whether the account uses WhatsApp Business
- Changes made by the WhatsApp user

### Support

If you encounter an issue, please open an issue through the Actor's Apify page and provide:

- The HTTP status code
- The response received
- The endpoint used
- A sample phone number where appropriate

Never include your Apify API token or other credentials in a public support request.

# Actor input Schema

## `phone_number` (type: `string`):

Enter number in international format without '+', e.g. 447984004914

## Actor input object example

```json
{
  "phone_number": "447984004914"
}
```

# Actor output Schema

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

No description

# 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 = {
    "phone_number": "447984004914"
};

// Run the Actor and wait for it to finish
const run = await client.actor("api_factory/whatsapp-profile-scraper").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 = { "phone_number": "447984004914" }

# Run the Actor and wait for it to finish
run = client.actor("api_factory/whatsapp-profile-scraper").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 '{
  "phone_number": "447984004914"
}' |
apify call api_factory/whatsapp-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,api_factory/whatsapp-profile-scraper"
        }
    }
}

```

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/Ed1OZHSSjOge3VpE1/builds/vemmdBqnbW4ZahSHA/openapi.json
