WhatsApp Scraper — Numbers, Channels & Groups
Pricing
from $1.99 / 1,000 whatsapp results
WhatsApp Scraper — Numbers, Channels & Groups
Scrape public WhatsApp data from phone numbers, channel pages, group invite links, and business catalogs: name, photo, followers, bio, catalog flag, and latest updates. No login, no QR code.
Pricing
from $1.99 / 1,000 whatsapp results
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
4
Monthly active users
9 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool for publicly accessible WhatsApp pages (click-to-chat, channel pages, group invite previews, catalog landings). WhatsApp and related marks are trademarks of WhatsApp LLC / Meta. Not affiliated with, sponsored by, or endorsed by WhatsApp or Meta. Does not access private chats, messages, or anything behind login. For informational, research, lead-enrichment, and community-intelligence use only. Respect applicable terms of use and law (including GDPR / CCPA when you process phone numbers).
WhatsApp scraper for public numbers, channels, group invite links, and business catalogs — a practical WhatsApp API alternative that needs no login, no QR code, and no Business API token. Look up wa.me click-to-chat pages, hydrate WhatsApp channel URLs, resolve group invites, detect a WhatsApp Business catalog, or discover channels by keyword. Export business name, account type, profile photo, followers, bio, catalog flag, and latest-update reaction counts as JSON, CSV, or Excel. Scrape WhatsApp with Python, Node.js, cURL, or Apify MCP / AI assistants.
This Actor reads the same public Open Graph metadata a logged-out browser sees. It is a WhatsApp number checker for publicly exposed profiles (typical WhatsApp Business pages), a WhatsApp channel scraper, a WhatsApp catalog checker, and a WhatsApp group scraper in one run.
| Actor | Focus |
|---|---|
| WhatsApp Scraper ◄── you are here | Public WhatsApp numbers, channels, group invites, catalogs |
| TikTok Trending Hashtags Scraper | TikTok Creative Center trending hashtags |
| YouTube Comments Scraper | YouTube comments without the Data API |
When to use this Actor
- You need a WhatsApp scraper / WhatsApp API alternative that returns structured JSON
- You want to check if a number exposes a public WhatsApp Business profile (name, photo, business / official-business flag)
- You want a WhatsApp channel scraper (name, follower count, bio, avatar, web join URL, latest updates)
- You want to check if a WhatsApp Business number has a public catalog (
hasCatalog) - You want a WhatsApp group scraper for invite-link previews (name, avatar, invite type)
- You scrape WhatsApp with Python, Node.js, or MCP and export a dataset
When not to use this Actor
- Private chats, message history, last seen, or About text — not published on public pages
- Guaranteed true/false for personal numbers — a personal account with locked privacy looks the same as an unregistered number (
status: unresolved). That is not a “not on WhatsApp” verdict - Business email, website, hours, GPS, or catalog product SKUs — those fields are not on the public click-to-chat / catalog landing pages
- Joining groups or following channels — metadata only; the Actor never joins
Key Features
- Four public surfaces — numbers (
wa.me), channels (whatsapp.com/channel/…), group invites (chat.whatsapp.com/…), catalogs (wa.me/c/…/whatsapp.com/catalog/…) - WhatsApp number checker (public) — E.164 normalization, line type, Brazil extra-9 fallback,
publicvsunresolved(never a false “not registered”) - WhatsApp Business flags —
business/official_businessfrom the public page - WhatsApp Business catalog checker —
hasCatalogfrom the public catalog landing (name + flag; no product grid without login) - WhatsApp channel scraper — parsed follower counts (
29K→29000), bio, avatar, web join URL, optional latest-update strip (time, reactions, text when shown) - Keyword channel discovery — search-engine indexing of public channel pages with extra result pages (not the in-app directory)
- HTTP only — Chrome TLS via curl_cffi, 256–512 MB, no Playwright, no QR
- MCP / AI ready — call from assistants via Apify MCP
Use Cases
| Use case | What you get |
|---|---|
| CRM / outreach lists | Public business name + photo + click-to-chat URL for numbers that expose a profile |
| Lead qualification | isBusiness / isOfficialBusiness to rank WhatsApp Business accounts |
| Channel research | Follower counts, bios, web join URL, and latest-update reactions |
| Catalog qualification | hasCatalog on public business numbers (Twilio-style catalog landing) |
| Invite-link audit | Live vs expired group invites (name + avatar when the invite is valid) |
| Community discovery | Keyword queries that surface indexed public channels |
Quick Start
Business number + catalog:
{"phoneNumbers": ["+14155238886", "+918976859807"],"includeCatalog": true,"maxItems": 50,"proxyConfiguration": { "useApifyProxy": false }}
Channel page + group invite:
{"startUrls": [{ "url": "https://www.whatsapp.com/channel/0029Va4K0PZ5a245NkngBA2M" },{ "url": "https://wa.me/c/14155238886" },{ "url": "https://chat.whatsapp.com/IJhrKyIsd3aCo3JypCW3KA" }],"includeChannelUpdates": true,"maxItems": 20}
Discover channels by keyword:
{"queries": ["crypto trading"],"maxChannelsPerQuery": 20,"maxItems": 40}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
phoneNumbers | Array | — | International numbers (E.164 preferred) |
numbersText | String | — | Paste many numbers (lines / commas / semicolons) |
startUrls | Array | — | Channel, group-invite, wa.me, or catalog URLs |
queries | Array | — | Channel keyword discovery (paginated search-engine index) |
defaultCountry | String | — | ISO country (US, GB, BR, IN) for numbers without + |
includeChannelUpdates | Boolean | true | Attach channel latest-update strip when present |
includeCatalog | Boolean | true | Check the public catalog landing for each number |
maxChannelsPerQuery | Integer | 20 | Cap on discovered channel URLs per query |
maxItems | Integer | 100 | Hard cap on dataset rows |
concurrency | Integer | 5 | Parallel page fetches (1–20) |
proxyConfiguration | Object | off | Optional; useful for large channel-search batches |
Output Format
Each dataset item is one number, channel, or group.
| Field | Type | Description |
|---|---|---|
type | String | number / channel / group |
status | String | public / unresolved / not_found / invalid / error |
name | String | Public display name when the page exposes one |
accountType | String | business / official_business / channel / group / public |
isBusiness / isOfficialBusiness | Boolean | From the public click-to-chat page |
onWhatsAppPublic | Boolean | true only when named public metadata was present |
description | String | Channel bio or business label |
followers / followersRaw | Integer / String | Channel follower count |
avatarUrl / profileImageUrl | String | Public profile / channel / group image |
phone | Object | E.164, country, line type (numbers) |
hasCatalog | Boolean | true when the public catalog landing exists |
catalogStatus | String | ok / none / skipped / error |
catalogName / catalogUrl | String | Business name and catalog landing URL |
channelId / inviteCode | String | From the URL |
webJoinUrl | String | web.whatsapp.com/accept?channel_invite_code=… |
latestUpdates | Array | Channel time + reactions + text when shown |
clickToChatUrl | String | Canonical wa.me URL |
matchedQuery | String | Search query that surfaced a channel |
scrapedAt | String | UTC timestamp |
Example — public business number:
{"type": "number","status": "public","name": "Twilio","accountType": "business","isBusiness": true,"onWhatsAppPublic": true,"url": "https://wa.me/14155238886","clickToChatUrl": "https://wa.me/14155238886","hasCatalog": true,"catalogStatus": "ok","catalogName": "Twilio","catalogUrl": "https://www.whatsapp.com/catalog/14155238886/"}
Example — channel:
{"type": "channel","status": "public","name": "WhatsApp","followers": 234000000,"followersRaw": "234M","description": "WhatsApp’s official channel. Follow for our latest feature launches, updates, exclusive drops and more.","channelId": "0029Va4K0PZ5a245NkngBA2M","webJoinUrl": "https://web.whatsapp.com/accept?channel_invite_code=0029Va4K0PZ5a245NkngBA2M","hasLatestUpdates": true,"url": "https://www.whatsapp.com/channel/0029Va4K0PZ5a245NkngBA2M"}
unresolved on a number means the public send page stayed generic. It does not prove the number has no personal WhatsApp account.
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/whatsapp-scraper').call({phoneNumbers: ['+14155238886'],startUrls: [{ url: 'https://www.whatsapp.com/channel/0029Va4K0PZ5a245NkngBA2M' }],maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/whatsapp-scraper").call(run_input={"phoneNumbers": ["+14155238886"],"startUrls": [{"url": "https://www.whatsapp.com/channel/0029Va4K0PZ5a245NkngBA2M"}],"maxItems": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("type"), item.get("name"), item.get("status"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~whatsapp-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"phoneNumbers":["+14155238886"],"maxItems":20}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/whatsapp-scraper.
Example prompts:
- "Run WhatsApp Scraper for +14155238886 and return name, accountType, hasCatalog, status, clickToChatUrl as JSON"
- "Scrape the official WhatsApp channel and summarize follower count, webJoinUrl, plus latestUpdates"
- "Find public WhatsApp channels for crypto trading (max 20) then scrape each channel page"
Suite next step
WhatsApp is the messaging layer next to short-video social. For TikTok trend boards, run TikTok Trending Hashtags Scraper. For YouTube comment threads, continue with YouTube Comments Scraper.
FAQ
Is this an official WhatsApp API?
No. It reads public HTML / Open Graph on click-to-chat, channel, group-invite, and catalog landing pages — a WhatsApp API alternative for public metadata only.
Can it tell me if a personal number is on WhatsApp?
Only when that number exposes a public profile (typical for WhatsApp Business). Personal accounts with default privacy return unresolved. Do not treat that as false.
WhatsApp number checker vs WhatsApp Business lead scraper?
Same Actor. Numbers that publish a business page come back with name, isBusiness, and avatarUrl. Channels and groups are separate type values in the same dataset.
Does it scrape channel messages?
It captures the public Latest updates strip when WhatsApp renders it (time, reaction counts, and post text when the HTML includes it). Full message history stays in the app.
Does it scrape WhatsApp Business catalog products?
The public catalog landing confirms a catalog exists (hasCatalog: true) and usually the business name. Product SKUs, prices, and images are not on the logged-out page.
Do I need a WhatsApp account or QR code?
No.
Python / Node.js / MCP?
Yes — use the Apify client examples above or Apify MCP prompts.
Can I export CSV or Excel?
Yes. Download the default dataset from Apify Console, or pull it via the API / MCP.
Related Actors
| Actor | Focus |
|---|---|
| WhatsApp Scraper ◄── you are here | Public WhatsApp numbers, channels, groups, catalogs |
| TikTok Trending Hashtags Scraper | TikTok trending hashtags |
| YouTube Comments Scraper | YouTube comments |