WhatsApp Group Links Scraper & Precision Search Filters
Pricing
from $2.99 / 1,000 results
WhatsApp Group Links Scraper & Precision Search Filters
WhatsApp Group Links Scraper & Precision Search Filters extracts public WhatsApp group links using targeted filters, including keywords, categories, titles, descriptions, locations, and topics. Ideal for group discovery, community research, audience analysis, and market research.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
WhatsApp Group Links Scraper โ Invite Links, Topic & Risk Data
WhatsApp Group Links Scraper finds public WhatsApp group and channel invite links (chat.whatsapp.com URLs) indexed by Google across Facebook, Instagram, TikTok, LinkedIn, Twitter/X, YouTube, Pinterest and Reddit, then narrows the raw hits down with precision filters before anything reaches your dataset. Each row carries the invite link (groupUrl), the source page (url, title, desc), the search term (keyword), a duplicate flag (isDuplicateGroupUrl), and โ when you switch it on โ an AI topic category and scam-risk score. Growth marketers, community managers, and trust-and-safety researchers use it to build clean invite-link lists or measure how much of a topic's WhatsApp ecosystem is scam bait.
๐ก What is WhatsApp Group Links Scraper?
It is a Google-search-based discovery Actor: for every search term you give it, it runs a site:-restricted query against one social network for pages that mention chat.whatsapp.com, extracts every WhatsApp invite link on the page, and pushes one row per kept result. No WhatsApp, Google, or social-media login is required โ the Actor queries public search results through Apify Proxy and never authenticates to any of the platforms it scans.
- Discovery by search term โ each entry in
searchTermsis queried independently against the one network insocialSource, and every row is tagged with the exact term that produced it. - Core identifying fields โ
groupUrl(the normalized invite link),url(source page),title,desc(snippet). - Secondary data type โ optional AI topic category and scam/spam-risk classification (
aiTopicCategory,aiScamRiskLevel,aiScamRiskScore,aiScamSignals). - Geographic & temporal fields โ
country/geoTargetregion bias,resultFreshnesswindow,scrapedAtcollection timestamp. - Real filters โ
excludeTerms,minSnippetLength,uniqueGroupLinksOnly,maxLinkRecords. - Export formats โ standard Apify dataset export (JSON, CSV, Excel/XLSX) from the Console, or pulled programmatically via the Apify API/CLI.
๐ What data can I extract with WhatsApp Group Links Scraper?
Every kept search result becomes one dataset row carrying the invite link, its source context, and (optionally) an AI risk read; one closing run_summary row per run adds the run-level tally.
Result row (rowType: "result")
| Field | Example Value | Use Case |
|---|---|---|
keyword | "crypto trading" | which search term produced this row |
platform | "facebook.com" | which network was searched |
country | "us" | region bias used for the query |
title | "Digital Marketing WhatsApp Group Links" | title of the source page in the search results |
desc | "Join the best digital marketing WhatsApp groups..." | snippet text the invite link was found in |
url | "https://www.facebook.com/groups/645308090352562/" | source page the link was extracted from |
groupUrl | ["https://chat.whatsapp.com/HsOmSeLn8vvCoII4Vds0UL"] | normalized WhatsApp invite link(s) on this row |
rowType | "result" | "result" for a link row, "run_summary" for the closing row |
groupUrlCount | 1 | how many invite links this result exposed |
newGroupUrls | ["https://chat.whatsapp.com/HsOmSeLn8vvCoII4Vds0UL"] | subset of groupUrl not already collected earlier in the run |
isDuplicateGroupUrl | false | true when every link on the row was already collected earlier in the run |
snippetLength | 168 | character count of desc โ what minSnippetLength filters on |
scrapedAt | "2026-07-30T10:14:52Z" | ISO-8601 UTC collection timestamp |
aiTopicCategory | "business/marketing" | topic bucket โ populated only when riskClassification is on |
aiTopicConfidence | 0.82 | model confidence (0.0โ1.0) in aiTopicCategory |
aiScamRiskLevel | "low" | "low" / "medium" / "high" scam-risk verdict |
aiScamRiskScore | 0.05 | scam-risk score, 0.0 (legitimate community) โ 1.0 (near-certain scam) |
aiScamSignals | [] | concrete red-flag phrases behind the score, empty when none found |
Run summary row (rowType: "run_summary") โ appended once, at the end of the run, when appendRunSummary is on. Also stored as the RUN_SUMMARY record in the run's key-value store.
| Field | Example Value | Use Case |
|---|---|---|
rowType | "run_summary" | marks this as the one closing row per run |
uniqueGroupLinks | 18 | distinct WhatsApp invite links collected across the whole run |
totalResultRows | 20 | total result rows kept |
duplicateRowsFlagged | 2 | rows whose links had all been seen earlier in the run |
perPlatformCounts | {"facebook.com": 20} | kept-row count broken down by socialSource |
perKeywordCounts | {"digital marketing": 11, "crypto trading": 9} | kept-row count broken down by search term |
removedByExcludeTerms | 6 | results dropped for matching an excludeTerms word |
removedBySnippetLength | 3 | results dropped for a snippet shorter than minSnippetLength |
removedAsDuplicateLink | 0 | results dropped because uniqueGroupLinksOnly was on and the link was a repeat |
scrapedAt | "2026-07-30T10:16:10Z" | when the summary was compiled |
๐ค Topic & scam-risk signals
aiTopicCategory, aiTopicConfidence, aiScamRiskLevel, aiScamRiskScore and aiScamSignals are produced by one model call per kept result, using your own classifierModel/classifierApiKey. They are the decision-driving layer for trust-and-safety use: a low-effort "guaranteed daily profit" or "crypto airdrop" listing scores high on aiScamRiskScore with the matching phrase quoted in aiScamSignals, while a plain topical community scores low. All five fields stay null when riskClassification is off, when no provider key is available, or when the combined title+snippet text is too short to judge โ the classifier never fabricates a verdict from insufficient text.
๐ฏ Targeting & de-dup signals
country/geoTarget biases which market's search results come back; resultFreshness restricts to how recently the source page was indexed. isDuplicateGroupUrl, newGroupUrls and groupUrlCount are the de-duplication layer: the same popular group gets re-posted on dozens of pages, so these fields โ plus the uniqueGroupLinksOnly filter โ let you segment "every mention" from "only brand-new invite links."
๐ ๏ธ Why not build this yourself?
WhatsApp does not publish a search or discovery API for finding public groups by keyword โ its official Business/Cloud APIs are for messaging within accounts and groups you already control, not for locating community invite links across the open web. Building this yourself means handling Google's result-page pagination and CAPTCHA/anti-bot blocking, a proxy-tier escalation ladder for when a route stops returning results, invite-link parsing that correctly handles both the modern chat.whatsapp.com/<code> form and the legacy .../invite/<code> form, run-level de-duplication, and freshness/junk filtering โ all of which this Actor already implements: a three-tier RouteManager (your configured route โ GOOGLE_SERP โ RESIDENTIAL) that escalates automatically on soft failures, up to 3 retries per page with exponential backoff, and a regex tuned to avoid collapsing every legacy-format link into the literal string "invite."
๐ก How to use data extracted from WhatsApp Group Links Scraper?
๐ฃ Growth marketers & community managers
Set searchTerms to your niche, socialSource to the network your audience actually posts invites on, add excludeTerms for the noise you don't want ("scam", "betting", "mlm"), set minSnippetLength to cut link-farm pages, and turn on uniqueGroupLinksOnly. The result is a live-filling dataset of groupUrl values you can export straight to CSV for outreach or a community directory, with no repeat invite links.
๐ข Agencies & service providers
Run one job per client vertical and network, reading perKeywordCounts and perPlatformCounts from the run_summary row to show which terms and networks actually yield active-looking communities for that client, then repeat the same run monthly to track how the yield changes.
๐ Trust & safety research
Turn on riskClassification and sweep a suspect topic (e.g. "crypto airdrop", "forex signals") across a network. aiScamRiskLevel, aiScamRiskScore and aiScamSignals let you quantify what fraction of that topic's WhatsApp-group ecosystem is scam bait versus a genuine community, without opening a single page by hand.
๐ค AI agents and automated pipelines
Because the Actor is a standard Apify run behind the Apify API, an agent can trigger it with a topic and network, then read groupUrl, aiTopicCategory and aiScamSignals back as structured JSON โ useful as a discovery tool ahead of a moderation pipeline, or as a RAG source answering "what public communities exist for X."
๐ผ Input sample
None of the fields below are required โ every one has a working default or fallback.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
searchTerms | No | array | Topics to search for, one term per line. Falls back to ["marketing", "jobs"] if left empty and keywords is also empty. | ["marketing", "jobs"] |
socialSource | No | string | Network the invite links are published on. One of: facebook.com, linkedin.com, instagram.com, twitter.com, youtube.com, reddit.com, pinterest.com, tiktok.com. Default facebook.com. | facebook.com |
geoTarget | No | string | Country to bias results toward. One of 101 region codes (see full list below). Default us. | us |
maxLinkRecords | No | integer, minimum 1 | Stop after this many kept records, counted across all search terms after every filter is applied. See โ ๏ธ note below. | 25 |
excludeTerms | No | array | Drop any result whose title, snippet or source link mentions one of these words; the same words are pushed into the search query as negatives too. Default []. | ["scam", "betting", "adult"] |
resultFreshness | No | string, default "any" | One of any, day, week, month, year. | week |
minSnippetLength | No | integer, minimum 0, maximum 1000, default 0 | Reject a result whose snippet is shorter than this many characters. | 120 |
uniqueGroupLinksOnly | No | boolean, default false | Keep a result only when it introduces at least one invite link not already collected in this run. | true |
appendRunSummary | No | boolean, default true | Append the closing run_summary row. | true |
riskClassification | No | boolean, default false | Score every kept result for topic + scam/spam risk. | false |
classifierModel | No | string, default "claude-haiku-4-5" | Model used when riskClassification is on โ see the full 20-model list below. | claude-haiku-4-5 |
classifierApiKey | No | string (secret) | Your own provider key. Falls back to ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY / XAI_API_KEY / DEEPSEEK_API_KEY / PERPLEXITY_API_KEY / MISTRAL_API_KEY; with no key at all the classification columns stay null. | โ |
keywords | No | array | Legacy alias for searchTerms. Used only when searchTerms is empty. | ["marketing", "jobs"] |
platform | No | string | Legacy alias for socialSource. Same 8-value enum. Used only when socialSource is empty. | facebook.com |
country | No | string | Legacy alias for geoTarget. Used only when geoTarget is empty. Unlike geoTarget, this is a free-text field with no enum check. | us |
limit | No | integer, minimum 1 | Legacy alias for maxLinkRecords. Used only when maxLinkRecords is empty. | 10 |
proxyConfiguration | No | object, default {"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]} | Network route to the search results. The Actor escalates automatically on soft failures, so the default is safe to keep. | โ |
โ ๏ธ maxLinkRecords / limit left empty does not mean "no limit." The input description says leaving the field empty keeps everything found, but the Actor's own fallback sets it to 10 whenever both maxLinkRecords and limit are absent. If you want an uncapped run, you currently have to set a deliberately high number rather than leaving the field blank.
Example input
{"searchTerms": ["crypto trading", "digital marketing"],"socialSource": "facebook.com","geoTarget": "us","maxLinkRecords": 25,"excludeTerms": ["scam", "betting"],"resultFreshness": "month","minSnippetLength": 120,"uniqueGroupLinksOnly": true,"appendRunSummary": true,"riskClassification": false}
Common pitfall: socialSource (and its alias platform) takes a single network per run, not a list. To cover several networks, queue one run per network rather than trying to pass an array.
๐ฝ Output sample
Every row is typed, normalized JSON with a consistent schema, live-pushed to the dataset the moment a result is kept โ open the Output tab during a run and watch it fill. Export as JSON, CSV or Excel from the Console, or pull it programmatically over the Apify API.
[{"keyword": "digital marketing","platform": "facebook.com","country": "us","title": "Digital Marketing WhatsApp Group Links","desc": "Join the best digital marketing WhatsApp groups for 2026 ... chat.whatsapp.com/HsOmSeLn8vvCoII4Vds0UL ...","url": "https://www.facebook.com/groups/645308090352562/","groupUrl": ["https://chat.whatsapp.com/HsOmSeLn8vvCoII4Vds0UL"],"rowType": "result","groupUrlCount": 1,"newGroupUrls": ["https://chat.whatsapp.com/HsOmSeLn8vvCoII4Vds0UL"],"isDuplicateGroupUrl": false,"snippetLength": 168,"scrapedAt": "2026-07-30T10:14:52Z","aiTopicCategory": null,"aiTopicConfidence": null,"aiScamRiskLevel": null,"aiScamRiskScore": null,"aiScamSignals": null},{"rowType": "run_summary","uniqueGroupLinks": 18,"totalResultRows": 20,"duplicateRowsFlagged": 2,"perPlatformCounts": { "facebook.com": 20 },"perKeywordCounts": { "digital marketing": 11, "crypto trading": 9 },"removedByExcludeTerms": 6,"removedBySnippetLength": 3,"removedAsDuplicateLink": 0,"scrapedAt": "2026-07-30T10:16:10Z"}]
๐ฏ How do you filter and target specific group link results?
This Actor's discovery axis is a search term, not a category tree, so precision comes from four independent filters stacked on top of it:
- Search term vs source network.
searchTermsis free text combined with a fixedsite:restriction to the one network insocialSourceโ only one network is scanned per run. Broaden coverage by adding more, more specific terms, not by expecting one run to cover several networks. - Scope precision.
geoTargetbiases the underlying search to one country;resultFreshness(day/week/month/year) restricts to how recently the source page was indexed โ tighter freshness correlates with invite links that are still live, since dead groups stop getting freshly re-posted. - Quality thresholds.
excludeTermsis enforced twice โ pushed into the query as negatives and checked locally against title, snippet and URL โ whileminSnippetLengthrejects thin, context-free link-farm pages.uniqueGroupLinksOnlyadds a third layer: invite-link-level de-duplication, not just source-page de-duplication. - Volume controls.
maxLinkRecords/limitcaps the kept-record count across all terms combined. โ ๏ธ Per term, the Actor scans at most 5 result pages (up to 50 raw hits) before moving to the next term โ a fixed constant in the code, not an input you can raise. If a term dries up before your budget is reached, add more or broader terms rather than raising the budget alone.
{ "searchTerms": ["real estate investing"], "socialSource": "facebook.com", "geoTarget": "us", "excludeTerms": ["scam", "mlm"], "resultFreshness": "week", "minSnippetLength": 150, "uniqueGroupLinksOnly": true, "maxLinkRecords": 30 }
{ "searchTerms": ["crypto airdrop", "forex signals"], "socialSource": "twitter.com", "riskClassification": true, "classifierModel": "claude-haiku-4-5", "appendRunSummary": true }
{ "keywords": ["marketing"], "platform": "linkedin.com", "country": "uk", "limit": 15 }
โถ๏ธ Want to try other WhatsApp scrapers?
| Scraper Name | What it extracts |
|---|---|
| Reddit API Scraper With Comment Threads | Reddit posts by keyword or URL, with full nested comment threads (author, score, permalink, depth) |
| Instagram Posts Scraper With Tagged Places & Coordinates | Instagram posts for a profile, including tagged-place names and coordinates |
| Instagram Story Details Scraper With Media Details | Instagram story details with normalized video/image renditions per story |
| TikTok User Profile Scraper: Business Leads | TikTok profile and lead-contact fields by handle |
| LinkedIn Company Profile Scraper & Ad Library Creatives | LinkedIn company firmographics plus public Ad Library creatives and transparency data |
| Google Images Scraper With Advanced Filters | Google Images results by search phrase, with filterable image metadata |
๐ป How to extract WhatsApp group link data programmatically
The Actor runs as a standard Apify Actor: one authenticated call to the Apify API starts the run and returns structured JSON, no separate signup or credential flow beyond your Apify account.
๐ Python example
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<ACTOR_ID>").call(run_input={"searchTerms": ["crypto trading"],"socialSource": "facebook.com","geoTarget": "us","excludeTerms": ["scam"],"maxLinkRecords": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item.get("rowType") != "result":continueprint(item["keyword"], item["groupUrl"], item.get("aiScamRiskLevel"))
๐ค Export to spreadsheets or CRM
Export the dataset as CSV from the Console (or via the API's dataset-items CSV endpoint) and import directly: map groupUrl to your link column, keyword and platform to your source/campaign columns, and aiScamRiskLevel/aiTopicCategory to a triage column if classification was on. Filter out rowType == "run_summary" before importing, since that row has a different shape.
โ๏ธ Is it legal to scrape WhatsApp group links?
Yes โ this Actor only collects publicly visible search results and invite links that were already posted openly on public web pages; nothing is unlocked, logged into, or paywalled to get it. The records returned are business/community listings (group topics, source pages, invite links), not profiles of identifiable individuals, so the applicable framework is each source platform's terms of service rather than GDPR โ GDPR does not attach to this kind of public community-listing data. If you plan to join or message groups discovered this way in bulk, check anti-spam and unsolicited-messaging rules in your jurisdiction separately, since those govern the messaging, not the scraping. Consult legal counsel for commercial applications involving bulk outreach.
โ FAQ
Are the invite links guaranteed to still be active?
No. The Actor extracts and normalizes invite links from search-result text; it never opens chat.whatsapp.com to confirm a group still accepts new members. resultFreshness only filters on how recently the source page was indexed, which correlates with โ but does not guarantee โ a still-joinable group. Validate links downstream before relying on them.
Can I get topic and scam-risk data along with the main records?
Yes โ set riskClassification to true and supply a classifierModel/classifierApiKey (or the matching environment variable). Each kept result gets one model call, adding aiTopicCategory, aiTopicConfidence, aiScamRiskLevel, aiScamRiskScore and aiScamSignals. Without a working key, or when the title+snippet text is too short to judge, those five fields stay null rather than guessing.
How accurate is the source and snippet data?
The Actor returns the title, snippet and link exactly as they appear in the search result at request time. Accuracy of the invite itself depends on whether the poster keeps it current โ the standard downstream step is to open a sample of links before a bulk campaign.
How many records can I get per run?
maxLinkRecords (or its alias limit) is any integer >= 1, applied across all search terms combined after every filter runs. But per search term, the Actor stops after at most 5 result pages (50 raw Google hits) regardless of your budget โ that ceiling is fixed in the code. Leaving the field empty falls back to a default of 10, not "unlimited," despite what the field's own description says.
Can I search more than one source network in a single run?
No. socialSource/platform takes exactly one network value per run โ it is a single string, not a list. Queue separate runs, one per network, to cover Facebook, LinkedIn, Instagram, Twitter/X, YouTube, Reddit, Pinterest and TikTok together.
Does WhatsApp Group Links Scraper work with Claude, ChatGPT, and AI agent frameworks?
Yes, in two ways. First, it's callable as a standard HTTP endpoint through the Apify API by any agent framework that can make an authenticated API call. Second, the optional riskClassification step itself runs on a model you choose from Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity or Mistral โ so the Actor already routes through Claude or ChatGPT if that's the classifierModel you pick.
Can I use it without a WhatsApp account, Google account, or API key?
Yes for the base scrape โ no WhatsApp account, Google account, or API key of any kind is required to run search, filtering, de-duplication or the run summary. The only feature that needs a key is riskClassification, and that key is your own model provider's, not WhatsApp's or Google's.
What happens to results removed by my filters โ am I charged for them?
No. Only rows pushed with the row_result charged event are billed โ that's every kept result row. Rows dropped by excludeTerms, minSnippetLength, or uniqueGroupLinksOnly never reach the dataset at all, and the closing run_summary row is pushed without a charged event. If you pull the dataset via the API and want only billed rows, filter on rowType == "result".
๐ Conclusion
WhatsApp Group Links Scraper turns a manual "search Google, click every result, copy the invite link" chore into a filtered, live-updating dataset: exclude terms, a freshness window, a junk-snippet floor, invite-link-level de-duplication, and an optional topic/scam-risk read, all backward-compatible with the original Actor's field names. It's built for anyone who needs a clean list of public WhatsApp communities โ growth marketers building lead lists, agencies auditing client verticals, and trust-and-safety researchers quantifying scam density โ without hand-checking every hit. Open it in the Apify Console, fill in your search terms and filters, and click Start.