# Whatsapp scraper (`curious_coder/whatsapp-scraper`) Actor

Scrape  whatsapp numbers in bulk and extract complete details including name, email, website, address, description, profile picture, etc

- **URL**: https://apify.com/curious_coder/whatsapp-scraper.md
- **Developed by:** [Curious Coder](https://apify.com/curious_coder) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 792 total users, 1 monthly users, 100.0% runs succeeded, 20 bookmarks
- **User rating**: 1.40 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 contacts scraper lets you extract details of given whatsap numbers to get name, bio, locations, email, website, address, profile picture url, categories, business hours etc

### How to scrape whatsapp numbers

#### Step 1

Go to input tab of whatsapp scraper

#### Step 2

Enter the phone numbers you want to scrape, or copy paste list of numbers from your google sheet or csv file in bulk edit mode

#### Step 3

Run the scraper and wait for QR code

#### Step 4

It will ask you to scan the QR code when it is ready. To scan the QR code, go to 'Live view' tab. Open your whatsapp app on your phone and go to Whatsapp menu > Linkedin Devices  and click on 'Link a device' button and scan the QR code

#### Step 5

Once QR code is scanned successfully, you can go to 'Log' tab to see the status updates of the scraper as it scrapes the numbers you have passed to it

#### Step 6

Once it finishes scraping, you can export the scraped data to different format like CSV, JSON, XML, etc.

If you are for scrapers for finding leads, you should also give a try to these scrapers

- [Crunchbase Scraper](https://apify.com/curious_coder/crunchbase-scraper): Scrape leads, investors, companies and everything else from crunchbase search. It can easily get you more than 1k results scraped for free
- [Facebook group members scraper](https://apify.com/curious_coder/facebook-scraper) lets you scrape unlimited members from facebook groups of your competitor or your niche
- [Instagram Scraper - All in one](https://apify.com/curious_coder/instagram-scraper) lets you extract any kind data from instagram including followers, posts, likes, comments, profiles, etc

### Sample data

#### Scrape whatsapp profiles

```json
[
  {
    "businessProfile": {
      "id": {
        "server": "c.us",
        "user": "918976859807",
        "_serialized": "918976859807@c.us"
      },
      "tag": "102921066",
      "description": "India’s Highest Rated Food Delivery App: 4.7. \nFlat 30% OFF on every order. NO T&C. ZERO Delivery/Packaging Fees. Benefits on all Handpicked Partner Brands like BOX8, MOJO Pizza, Itminaan Biryani & more.",
      "categories": [
        {
          "id": "273819889375819",
          "localized_display_name": "Restaurant"
        }
      ],
      "profileOptions": {
        "commerceExperience": "none",
        "cartEnabled": true,
        "directConnection": false
      },
      "email": "hello@eatclub.in",
      "website": [
        "https://eatclub.page.link/qrid"
      ],
      "businessHours": null,
      "address": "No 548, 22nd Cross, 14th Main Road, HSR Layout Sector 3, Bangalore, Karnataka - 560102",
      "fbPage": {},
      "igProfessional": {},
      "isProfileLinked": false,
      "directConnection": {
        "enabled": false
      },
      "coverPhoto": null
    },
    "id": {
      "server": "c.us",
      "user": "918976859807",
      "_serialized": "918976859807@c.us"
    },
    "number": "918976859807",
    "isBusiness": true,
    "type": "in",
    "isMe": false,
    "isUser": true,
    "isGroup": false,
    "isWAContact": true,
    "isMyContact": false,
    "isBlocked": false,
    "about": "India’s Highest Rated Food Delivery App: 4.7",
    "profilePicUrl": "https://pps.whatsapp.net/v/t61.24694-24/328134927_579346797408337_6534925906918654566_n.jpg?ccb=11-4&oh=01_AdTENlu80Nd9A9D7bR3Llynpj2Bp0F5mr3yZJ9r_uO1lhA&oe=6511557C&_nc_sid=000000&_nc_cat=108",
    "givenNumber": "8976859807"
  }
]
```

### Use cases

#### Lead enrichment

If you got a list of phone numbers of businesses and looking to find emails, then you can pass them to whatsapp scraper and get website, email, etc from their whatsapp business profile. If you just get website, you can use it to find email address.

#### Phone number verification

You can verify whether a number is valid by checking if the number exists on whatsapp. Although this is not a best way to verify, you can use this method to shortlist and prioritise numbers that are active on whatsapp

# Changelog

This Actor's version history is a separate document: https://apify.com/curious_coder/whatsapp-scraper/changelog.md

# Actor input Schema

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

List of phone numbers to search on whatsapp

## `proxy` (type: `object`):

Make sure to select the country where your whatsapp number is currently logged in

## `sessionStoreId` (type: `string`):

ID or name of the Key-value store for storing and loading whatsapp session data for authentication. Use this value in future runs to avoid scanning QR code

## Actor input object example

```json
{
  "numbers": [
    "8976859807",
    "8655907795",
    "8860033772"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "sessionStoreId": "whatsapp-session-1"
}
```

# 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": [
        "8976859807",
        "8655907795",
        "8860033772"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("curious_coder/whatsapp-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 = {
    "numbers": [
        "8976859807",
        "8655907795",
        "8860033772",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("curious_coder/whatsapp-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 '{
  "numbers": [
    "8976859807",
    "8655907795",
    "8860033772"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call curious_coder/whatsapp-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,curious_coder/whatsapp-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/CYXYNtW2GIpejQ3WM/builds/YzKSvE7eAeOt9HgXj/openapi.json
