# WhatsApp Group Link Search Scraper (`khadinakbar/whatsapp-group-link-search-scraper`) Actor

Discover public WhatsApp group invite links by keyword via managed Google SERP. Returns invite URL, invite code, source page context, and optional public invite preview (group name/image). Provider-backed (ScrapeCreators + SociaVault), cookieless, no login. MCP-ready.

- **URL**: https://apify.com/khadinakbar/whatsapp-group-link-search-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 whatsapp group link founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Group Link Search Scraper

Discover **public WhatsApp group invite links** by keyword. Paste topics such as gardening, crypto trading, or nursing jobs and this Actor returns unique `chat.whatsapp.com` invite URL rows with invite code, source-page title, URL, and snippet for community managers and growth marketers. Optional preview enrichment reads the public invite page Open Graph tags for group name and image. Runs on Apify with API access, scheduling, and MCP so humans and agents can call the same contract.

Built for community managers, growth marketers, and niche researchers who need publicly shared WhatsApp communities without logging into WhatsApp.

### Best fit for this Actor

- Map publicly indexed WhatsApp groups for a niche topic or local market.
- Build a directory of invite links with source-page provenance for later review.
- Feed an agent workflow that turns a keyword into structured invite rows.

For public Telegram channel messages, use [Telegram Channel Scraper](https://apify.com/khadinakbar/telegram-channel-scraper) when the community lives on Telegram rather than WhatsApp. For website contact discovery, use [Contact Details Scraper](https://apify.com/khadinakbar/contact-details-scraper). For username presence across many sites, use [Username OSINT Scraper](https://apify.com/khadinakbar/username-osint-scraper).

### Practical scenario

A travel operator pastes `travel tips`, sets country to `US`, and `maxGroups` to `5`. The Actor searches Google for indexed `chat.whatsapp.com` invites, dedupes by invite code, and saves one row per unique link with the page that mentioned it. Enabling `enrichPreview` adds the public OG group name when WhatsApp still exposes the invite page.

### Quick start input

```json
{
  "keywords": ["gardening"],
  "country": "US",
  "maxGroups": 5,
  "enrichPreview": false
}
```

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `keywords` | array (required) | Topics to search. Example: `gardening`. Max 25. |
| `country` | enum | SERP country bias such as `US`, `GB`, `IN`, `BR`. Default `US`. |
| `maxGroups` | integer | Cap unique billed invites. Default 20, prefill 5, max 200. |
| `enrichPreview` | boolean | Fetch public OG name/image. Default false. |
| `providerOrder` | enum | `scrapecreators-first` (default) or `sociavault-first`. |

### What data you receive

One dataset item is one unique invite.

```json
{
  "inviteUrl": "https://chat.whatsapp.com/JkBz9stvtb23wtp0HCYYQJ",
  "inviteCode": "JkBz9stvtb23wtp0HCYYQJ",
  "linkType": "group",
  "keyword": "gardening",
  "country": "US",
  "searchQuery": "gardening \"chat.whatsapp.com\"",
  "sourceTitle": "Example gardening community post",
  "sourceUrl": "https://example.com/post",
  "sourceSnippet": "Join https://chat.whatsapp.com/JkBz9stvtb23wtp0HCYYQJ",
  "provider": "scrapecreators",
  "enriched": false,
  "scrapedAt": "2026-08-21T12:00:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `inviteUrl` / `inviteCode` | Canonical invite link and code |
| `sourceTitle` / `sourceUrl` / `sourceSnippet` | Indexed page that mentioned the invite |
| `groupName` / `previewImageUrl` | Present when `enrichPreview` succeeds |
| `keyword` / `country` | Search context |

`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, `linksFound`, and `chargedEventCounts`. Download the dataset as JSON, CSV, Excel, or HTML.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~whatsapp-group-link-search-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["gardening"],"country":"US","maxGroups":5}'
```

### Use with AI agents through Apify MCP

> Find public WhatsApp group invite links for gardening in the US. Return inviteUrl, inviteCode, sourceTitle, sourceUrl, and keyword. Cap at 5 unique links.

Connect via <https://mcp.apify.com>. Read `OUTPUT.outcome` and `itemsPushed` to interpret empty datasets. Scope is public indexed invites only — not member lists or private chats. Cost is forecastable from `maxGroups` × $0.01 plus optional enrich.

### Connect the workflow

- After you have invite URLs for community research, enrich website leads with [Contact Details Scraper](https://apify.com/khadinakbar/contact-details-scraper) when the source page is a business site.
- For Telegram communities on the same keyword theme, route to [Telegram Channel Scraper](https://apify.com/khadinakbar/telegram-channel-scraper).

### Pricing

Pay per event plus platform usage. Confirm current event prices on the live Pricing tab; that tab is the source of truth if this page ever lags.

- `apify-actor-start`: $0.00005 per run
- `group-link-found`: **$0.01** per unique invite row
- `group-preview-enriched`: **$0.005** when OG preview enrichment succeeds

A five-link run is about $0.05 in result events plus a few seconds of Apify platform usage. No-match keywords finish `VALID_EMPTY` with no `group-link-found` charge. Provider credits are paid by the Actor owner.

### How it works

1. Build Google queries that target `chat.whatsapp.com` invite URLs for each keyword.
2. Call ScrapeCreators Google Search first; if the SERP is empty or fails, fall through to SociaVault.
3. Extract and dedupe invite codes from titles, URLs, and snippets.
4. Optionally fetch the invite page Open Graph preview for group name and image.
5. Charge PPE only after a validated dataset write (`Actor.charge` then `pushData`).

### Best results

- Provide concrete niche keywords and a matching country bias for denser invite yield.
- Start with a small `maxGroups` canary, then raise the cap once the niche shows public invites.
- Turn on `enrichPreview` when you need public OG group names for a directory-style dataset.
- Prefer source-page review before outreach; indexed invites stay public-web provenance only.

### Responsible use

Collect publicly indexed invite links you are authorized to access and follow applicable laws plus WhatsApp terms for any outreach.

### Builder's note

I built this around Google SERP over invite URLs people already posted online because WhatsApp has no public keyword-group search endpoint. I found that ScrapeCreators as primary with SociaVault fallback works well, and that an empty primary SERP must fall through to the next provider or niches the secondary index still covers stay under-filled.

### Support

Open an issue on the Actor’s Issues tab in Apify Console for bugs or feature requests.

# Actor input Schema

## `keywords` (type: `array`):

Topics to search for public WhatsApp group invite links, such as gardening or crypto trading. Each keyword becomes a Google query that looks for chat.whatsapp.com invites. Up to 25 keywords per run. Prefill is gardening so quality tests finish quickly. NOT a WhatsApp invite URL — paste invite URLs only into a group-metadata scraper.

## `country` (type: `string`):

Country/market bias for Google Search discovery (e.g., US, GB, IN, BR). Default US. This biases the SERP region; it does not guarantee the group is located in that country.

## `maxGroups` (type: `integer`):

Maximum unique WhatsApp group invite links to save and bill this run. Default 20. Prefill is 5 so Apify quality tests finish quickly; raise it for production batches. Duplicate invite codes across keywords are deduped and billed once.

## `enrichPreview` (type: `boolean`):

When enabled, each found invite URL is fetched for the public Open Graph group name and image. Enrichment costs an additional $0.005 per successfully enriched link on top of the $0.01 found-link charge. Leave disabled when you only need invite URLs from search.

## `providerOrder` (type: `string`):

Which Google Search provider to try first. Both return the same row shape; the fallback is used automatically when the primary fails. Keep the default unless you have a reason to prefer SociaVault.

## Actor input object example

```json
{
  "keywords": [
    "gardening"
  ],
  "country": "US",
  "maxGroups": 5,
  "enrichPreview": false,
  "providerOrder": "scrapecreators-first"
}
```

# Actor output Schema

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

Dataset items containing inviteUrl, inviteCode, keyword, source context, and optional preview fields.

## `summary` (type: `string`):

Run summary including outcome, linksFound, chargedEventCounts, and warnings.

## `runSummary` (type: `string`):

Machine-readable RUN\_SUMMARY record mirroring OUTPUT for integrations that read RUN\_SUMMARY directly.

# 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 = {
    "keywords": [
        "gardening"
    ],
    "country": "US",
    "maxGroups": 5,
    "enrichPreview": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/whatsapp-group-link-search-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 = {
    "keywords": ["gardening"],
    "country": "US",
    "maxGroups": 5,
    "enrichPreview": False,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/whatsapp-group-link-search-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 '{
  "keywords": [
    "gardening"
  ],
  "country": "US",
  "maxGroups": 5,
  "enrichPreview": false
}' |
apify call khadinakbar/whatsapp-group-link-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/whatsapp-group-link-search-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/ViNFempvgNpOpvatd/builds/Gb6AxuHeWbMXJeOfX/openapi.json
