Facebook Groups Search Scraper With AI Relevance Filter
Pricing
from $5.99 / 1,000 results
Facebook Groups Search Scraper With AI Relevance Filter
π Facebook Groups Search Scraper collects group names, URLs, member count, privacy, niche & activity from Facebook search results. π Perfect for market research, lead gen & community growth. β‘ Fast, accurate CSV/JSON exports. β Ideal for marketers, analysts & founders.
Pricing
from $5.99 / 1,000 results
Rating
5.0
(1)
Developer
Scrapier
Maintained by CommunityActor stats
3
Bookmarked
185
Total users
56
Monthly active users
14 days ago
Last modified
Categories
Share
Facebook Groups Search Scraper β AI Relevance Filter & Clustering
Facebook Groups Search Scraper β AI Relevance Filter & Clustering discovers public Facebook groups from a keyword search or a direct group URL and returns one structured JSON row per group, complete with member counts, post frequency, and a free-text description. Two optional AI passes run on top of that base data: a relevance classifier that flags likely search-engine noise, and a near-duplicate detector that groups rebranded listings under one ID. Every response is ready-to-use JSON β pass it straight to an LLM, a vector store, or a lead pipeline.
What is Facebook Groups Search Scraper With AI Relevance Filter?
Facebook Groups Search Scraper With AI Relevance Filter queries DuckDuckGo for a keyword (or takes a direct Facebook group URL) and returns one row of structured JSON per public Facebook group, pulling each group's About page for its name, description, member count, and post activity. What sets it apart is the optional AI layer: a topical-relevance classifier that flags likely search-engine noise before you open a single group, and a near-duplicate/rebrand detector that ties differently-named listings of the same community together. No Facebook account or login is required β every field comes from a public group's About page, scraped logged-out.
- Dual discovery modes β search by keyword via DuckDuckGo or paste direct Facebook group URLs, mixed in the same run
- Free-text
groupDescriptionharvest plus numericmemberCountNumeric/postsPerDayNumeric/postsPerMonthNumericfields for sorting and filtering - Optional AI topical-relevance classification (
isOnTopic/relevanceConfidence/relevanceReason) to separate genuine communities from SERP noise - Optional AI near-duplicate/rebrand clustering (
clusterId/clusterConfidence/clusterReason) across groups found in the same run - Choice of 26 models across 7 AI providers (Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity, Mistral) for either AI pass
- Scale control β up to 500 groups per keyword; direct URLs are always fully scraped
What data can you get with Facebook Groups Search Scraper With AI Relevance Filter?
The Actor returns one row per discovered or scraped Facebook group, plus an optional AI enrichment layer computed on top of the same rows.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Facebook Group (keyword or direct URL) | query, sourceType, id, name, url, groupDescription, discoverabilityText, profilePictureUri, visibility, memberInfo, memberCountNumeric, postFrequency, postsPerDayNumeric, postsPerMonthNumeric, type, viewerJoinState, scrapedAt | Community discovery, lead lists, market mapping |
| AI relevance & clustering (optional) | isOnTopic, relevanceConfidence, relevanceReason, clusterId, clusterConfidence, clusterReason | Cleaning noisy keyword search results and de-duplicating rebranded groups |
AI topical-relevance classification and duplicate clustering
When enableRelevanceClassification is on, every keyword-discovered group is sent β name and groupDescription only β to the selected LLM (default claude-haiku-4-5, configurable to 26 models across 7 providers), which returns a strict-JSON verdict per group: isOnTopic (true/false), relevanceConfidence (0β100), and relevanceReason (one sentence). Direct-URL groups are skipped β there is no keyword to judge relevance against. When enableDuplicateClustering is on, groups discovered in the same run are compared the same way to find the same real-world community listed under two names (a rebrand, or a duplicate listing); matches share a clusterId, clusterConfidence, and clusterReason. Both passes are key-gated: with no AI provider key configured (input or environment variable), the Actor still returns the full base dataset β the six AI fields are simply left null, never fabricated.
{"isOnTopic": false,"relevanceConfidence": 88,"relevanceReason": "Name and description describe a general local marketplace, not a Tesla-owner community.","clusterId": "cluster-1","clusterConfidence": 81,"clusterReason": "Same Tesla-owner community as 'Tesla Owners Club' under a different name."}
groupDescription and numeric derived fields
Every group's About page is parsed for its groupDescription β the group's public og:description meta tag β plus numeric fields the base engine doesn't compute: memberCountNumeric (digits parsed from the member-count text), and postsPerDayNumeric/postsPerMonthNumeric (parsed from Facebook's own posts-per-day/month counters). These are the fields the AI passes read, but they're useful without AI too β sort or filter a keyword's results by activity or size without re-parsing memberInfo/postFrequency text yourself.
How does Facebook Groups Search Scraper With AI Relevance Filter differ from the official Meta Graph API?
Meta's Graph API has never offered keyword search or discovery of Facebook Groups, and as of the Graph API v19.0 rollout (announced January 23, 2024) it no longer grants any third-party app access to Groups data at all, including for groups an app's own users administer.
| Feature | Meta Graph API | Facebook Groups Search Scraper With AI Relevance Filter |
|---|---|---|
| Keyword-based group discovery | Not offered β no group search endpoint exists | groupSearchKeywords searches DuckDuckGo and returns matching public groups |
| Third-party Groups access | Discontinued platform-wide as of the Graph API v19.0 change (Jan 23, 2024) | Not dependent on Meta's developer platform β reads public About pages directly |
| Approval process | Required Meta App Review and group-admin authorization, even before the 2024 cutoff | None β point it at a keyword or a public group URL and run |
| Relevance/noise filtering | Not applicable β no search results to filter | Optional AI classification flags likely search-engine false positives |
| Duplicate/rebrand detection | Not applicable | Optional AI clustering ties same-community listings together |
| Output format | JSON, where still available | Structured JSON dataset, exportable as JSON, CSV, or Excel |
There is no scenario where the official Graph API substitutes for keyword-based group discovery β that capability doesn't exist there for outside developers, and even administered-group access has been cut off. Use this Actor when you need to find or monitor public groups by topic without a Meta developer account, App Review, or group-admin permissions.
How to scrape Facebook with Facebook Groups Search Scraper With AI Relevance Filter?
No input field is technically required, but a run needs at least one entry in groupSearchKeywords to return any groups.
- Open the Actor on its Apify Store listing and go to the Input tab.
- Add one or more search keywords and/or direct Facebook group URLs to
groupSearchKeywords. - Set
maxGroupsPerKeyword(1β500), and, if you want the AI passes, turn onenableRelevanceClassification/enableDuplicateClustering, pick anaiModel, and supplyaiApiKey. - Start the run.
- Read results from the Dataset tab, or export as JSON, CSV, or Excel.
{"groupSearchKeywords": ["tesla", "bmw", "https://www.facebook.com/groups/1234567890/"],"maxGroupsPerKeyword": 50,"enableRelevanceClassification": true,"enableDuplicateClustering": true,"aiModel": "claude-haiku-4-5"}
How to run multiple keyword searches in one job
groupSearchKeywords accepts an array β mix plain keywords with direct Facebook group URLs in the same list, and each is processed as its own search or direct scrape, one after another. Keyword searches run through DuckDuckGo with built-in request throttling to reduce blocking; direct URLs are always scraped in full regardless of maxGroupsPerKeyword. AI relevance classification and clustering run once at the end, across every group collected from every keyword and URL in the run.
β¬οΈ Input
All 8 input fields are optional; a run needs at least one entry in groupSearchKeywords to return any groups.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
groupSearchKeywords | No | array | Search keywords and/or direct Facebook group URLs to scrape. Mix both in the same list; also accepts the base startUrls/urls key. | ["tesla", "https://www.facebook.com/groups/1234567890/"] |
maxGroupsPerKeyword | No | integer | Max groups to collect per keyword (1β500). Direct URLs are always scraped in full. Also accepts the base maxItems key. Default 100. | 100 |
enableRelevanceClassification | No | boolean | Turn on AI topical-relevance classification for keyword-discovered groups. Default false. | true |
dropOffTopicGroups | No | boolean | When relevance classification is on, drop off-topic groups from the output instead of just flagging them. Default false. | false |
enableDuplicateClustering | No | boolean | Turn on AI near-duplicate/rebrand clustering across groups found in the same run. Default false. | true |
aiModel | No | string (enum) | LLM used for either AI pass; provider auto-detected from the model name. Default claude-haiku-4-5. | "claude-haiku-4-5" |
aiApiKey | No | string (secret) | API key for the selected provider. Falls back to the provider's environment variable if left empty. | "sk-ant-..." |
proxyConfiguration | No | object | Optional Apify Proxy configuration. Default: no proxy, auto-escalates on block. | {"useApifyProxy": false} |
Example JSON input
{"groupSearchKeywords": ["tesla", "bmw", "https://www.facebook.com/groups/1234567890/"],"maxGroupsPerKeyword": 50,"enableRelevanceClassification": true,"dropOffTopicGroups": false,"enableDuplicateClustering": true,"aiModel": "claude-haiku-4-5","proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: turning on enableRelevanceClassification/enableDuplicateClustering without a valid aiApiKey or matching provider environment variable doesn't error β it silently no-ops. Check the run log for the "no AI provider key is available" warning rather than assuming a null isOnTopic/clusterId means every group was checked and found unclustered.
β¬οΈ Output
Results are typed, normalized JSON with a consistent 23-field schema across runs, exportable as JSON, CSV, or Excel from the Dataset tab. Only groups whose About page yielded a real name are ever written as a row β failed fetches and blocked pages never appear, and only these successfully-scraped rows are charged under the row_result event.
Scraped results
[{"query": "tesla","sourceType": "keyword","id": "123456789012345","name": "Tesla Owners Club","url": "https://www.facebook.com/groups/teslaowners/","groupDescription": "Online community for Tesla owners and EV enthusiasts.","discoverabilityText": "Anyone can find this group.","profilePictureUri": "https://scontent.xx.fbcdn.net/v/t1.6435-9/tesla-owners.jpg","visibility": "Public","memberInfo": "22,345 total members","memberCountNumeric": 22345,"postFrequency": "5.2 posts a day","postsPerDayNumeric": 5,"postsPerMonthNumeric": 156,"type": "Group","viewerJoinState": "CAN_JOIN","isOnTopic": true,"relevanceConfidence": 94,"relevanceReason": "Name and description explicitly describe a Tesla owner community.","clusterId": null,"clusterConfidence": null,"clusterReason": null,"scrapedAt": "2026-07-25T10:12:03Z"},{"query": "tesla","sourceType": "keyword","id": "998877665544332","name": "Tesla Owners Worldwide","url": "https://www.facebook.com/groups/teslaownersworldwide/","groupDescription": "The global home for Tesla owners β formerly Tesla Owners Club.","discoverabilityText": "Anyone can find this group.","profilePictureUri": "https://scontent.xx.fbcdn.net/v/t1.6435-9/tesla-owners-worldwide.jpg","visibility": "Public","memberInfo": "41,002 total members","memberCountNumeric": 41002,"postFrequency": "3.8 posts a day","postsPerDayNumeric": 4,"postsPerMonthNumeric": 114,"type": "Group","viewerJoinState": "CAN_JOIN","isOnTopic": true,"relevanceConfidence": 91,"relevanceReason": "Description confirms this is a Tesla owner community.","clusterId": "cluster-1","clusterConfidence": 81,"clusterReason": "Same Tesla-owner community as 'Tesla Owners Club' under a different name.","scrapedAt": "2026-07-25T10:12:04Z"},{"query": "tesla","sourceType": "keyword","id": "554433221100998","name": "Tesla Local Buy and Sell","url": "https://www.facebook.com/groups/teslabuysell/","groupDescription": "Buy, sell and trade anything in your local area β not Tesla-specific.","discoverabilityText": "Anyone can find this group.","profilePictureUri": "https://scontent.xx.fbcdn.net/v/t1.6435-9/local-marketplace.jpg","visibility": "Public","memberInfo": "8,760 total members","memberCountNumeric": 8760,"postFrequency": "1.2 posts a day","postsPerDayNumeric": 1,"postsPerMonthNumeric": 36,"type": "Group","viewerJoinState": "CAN_JOIN","isOnTopic": false,"relevanceConfidence": 88,"relevanceReason": "Name and description describe a general local marketplace, not a Tesla-owner community.","clusterId": null,"clusterConfidence": null,"clusterReason": null,"scrapedAt": "2026-07-25T10:12:05Z"},{"query": "direct_urls","sourceType": "direct_url","id": "111222333444555","name": "BMW Enthusiasts Hub","url": "https://www.facebook.com/groups/bmwenthusiastshub/","groupDescription": "For BMW owners, mods, and meetups.","discoverabilityText": "Anyone can find this group.","profilePictureUri": "https://scontent.xx.fbcdn.net/v/t1.6435-9/bmw-hub.jpg","visibility": "Public","memberInfo": "15,410 total members","memberCountNumeric": 15410,"postFrequency": "2.5 posts a day","postsPerDayNumeric": 3,"postsPerMonthNumeric": 75,"type": "Group","viewerJoinState": "CAN_JOIN","isOnTopic": null,"relevanceConfidence": null,"relevanceReason": null,"clusterId": null,"clusterConfidence": null,"clusterReason": null,"scrapedAt": "2026-07-25T10:12:06Z"}]
How can I use the data extracted with Facebook Groups Search Scraper With AI Relevance Filter?
- Community managers and marketers: use
isOnTopicto strip DuckDuckGo SERP noise from a keyword sweep before reaching out to admins, andclusterIdto avoid pitching the same rebranded community twice. - Lead researchers and B2B prospectors: build niche-interest prospect lists from
memberCountNumeric/postsPerDayNumericto prioritize active, sizable communities worth contacting first. - AI engineers and LLM developers: an agent issues a keyword query, receives this Actor's structured JSON, and grounds a "find me communities about X" answer in real, currently-discoverable groups instead of stale training data.
- Market researchers: map how many distinct (non-duplicate) communities exist around a topic by counting unique
clusterIds, and gauge niche activity levels viapostFrequency/memberInfoacross a keyword's full result set.
How do you monitor Facebook groups over time?
Community monitoring here means re-running the same groupSearchKeywords list on a schedule and diffing the new rows against the previous run's, rather than trusting one snapshot to still be accurate next month. Because every row is keyed by id and stamped with scrapedAt, repeated runs let you track memberCountNumeric and postsPerDayNumeric/postsPerMonthNumeric growth for the same group over time, spot newly-discoverable groups that didn't appear in the last run, and catch groups that vanish (closed, merged, or made private). Clustering itself only compares groups discovered within the same run β to catch a rebrand across time, feed last run's known group URLs back in as direct links alongside this run's fresh keyword searches, and the AI pass will flag the new listing as a likely match to a group you already track.
A basic workflow: schedule this Actor against a fixed keyword list, store each run's rows keyed by id and scrapedAt in your own database, then diff the newest run against the previous one for member-count jumps, activity changes, or newly-appearing ids. Apify's platform-level Schedule feature can trigger the Actor on a fixed interval without any code of your own, and the Apify API's dataset endpoints or run-finished webhooks can deliver each run's rows into your own pipeline for the diffing step.
Integrate Facebook Groups Search Scraper With AI Relevance Filter and automate your workflow
Facebook Groups Search Scraper With AI Relevance Filter works with any language or tool that can send an HTTP request.
REST API with Python
import requestsTOKEN = "<YOUR_APIFY_TOKEN>"url = "https://api.apify.com/v2/acts/scrapier~facebook-groups-search-scraper-with-ai-relevance-filter/run-sync-get-dataset-items"payload = {"groupSearchKeywords": ["tesla", "bmw"],"maxGroupsPerKeyword": 50,"enableRelevanceClassification": True,"aiModel": "claude-haiku-4-5",}resp = requests.post(url, params={"token": TOKEN}, json=payload, timeout=180)groups = resp.json() # list of group rows, as shown abovefor g in groups:print(g["name"], g["memberCountNumeric"], g["isOnTopic"])
MCP for query-grounded AI agents
The Actor is reachable through Apify's Actors MCP Server: run npx @apify/actors-mcp-server --tools scrapier/facebook-groups-search-scraper-with-ai-relevance-filter locally with an APIFY_TOKEN set, or connect the hosted server at https://mcp.apify.com. Register it with an MCP-compatible client β Claude Desktop, Claude Code, or Cursor β and an agent can call it as a tool: a user asks to find communities about a topic, the agent runs the search, and grounds its answer in the returned group and relevance fields instead of guessing.
Scheduled monitoring and delivery
There is no actor-specific webhook built into this Actor. Attach it to Apify's platform-level Schedule to trigger runs against the same keyword list on an interval, and use the Apify API's run-finished webhooks or dataset export endpoints to deliver each run's rows into your own storage or pipeline for the diffing workflow described above.
Is it legal to scrape Facebook group search results?
Yes β scraping Facebook group data that's publicly visible to any logged-out visitor is generally lawful. In Meta Platforms, Inc. v. Bright Data Ltd. (N.D. Cal., Jan. 2024), the court held that Facebook and Instagram's own Terms of Service do not bar logged-off scraping of public data, since those terms govern logged-in "use" of the platform. This Actor only reads public group About pages logged-out β the same pages any visitor sees, never authenticated or private content. Because group data can include personal names and descriptions, GDPR/CCPA-style data-protection rules may still apply to how you store and process it. Scraping for periodic community monitoring carries a different risk profile than scraping to train a model or resell data. Consult your legal team for commercial use cases involving bulk storage or resale.
Frequently asked questions
How many groups does this Actor return per keyword?
maxGroupsPerKeyword caps keyword-sourced groups between 1 and 500 (default 100); direct URLs are always scraped in full regardless of that cap. If duplicate clustering is on, only the first 200 eligible groups per run are compared for clusters, in chunks of 40 β a cluster can't span two chunks, and groups beyond the 200-group cap keep clusterId: null rather than being silently dropped.
Does the AI relevance filter make a real LLM call, and which model?
Yes. When enableRelevanceClassification is on and a provider key is available, each keyword-discovered group's name and description are sent, in batches of up to 15, to the selected model's real API β Anthropic's Messages API for Claude models, or an OpenAI-compatible Chat Completions API for OpenAI, Gemini, Grok, DeepSeek, Perplexity, or Mistral models β and the model's JSON verdict is written into isOnTopic/relevanceConfidence/relevanceReason. The default model is claude-haiku-4-5; 26 models across 7 providers are selectable via aiModel. Without a key, these fields stay null β never simulated.
Does this Actor detect duplicate or rebranded groups?
Yes, when enableDuplicateClustering is on. The same kind of LLM call compares every eligible group discovered in the run (by name and description) and assigns a shared clusterId/clusterConfidence/clusterReason to groups it judges to be the same real-world community listed under different names or a rebrand.
What happens to off-topic groups by default?
They're still returned, just flagged with isOnTopic: false β set dropOffTopicGroups to true to exclude them from the output instead.
Do I need a Facebook account or login?
No β the Actor scrapes each group's public About page logged-out; no cookies, session, or Facebook account are used or required.
How does it handle DuckDuckGo and Facebook's anti-bot measures?
It detects blocked or rate-limited responses (HTTP 403/429/503, or a DuckDuckGo challenge page) and retries with backoff; if blocking continues, it automatically escalates from no proxy to a backup datacenter connection and then to residential proxy.
How do I monitor groups over time?
Schedule the Actor against the same keyword list, store each run's rows keyed by id and scrapedAt, and diff memberCountNumeric/postsPerDayNumeric/postsPerMonthNumeric between runs to catch growth, activity changes, or newly-discoverable groups.
Does it work with Claude, ChatGPT, and AI agent frameworks?
Yes β it's callable as a plain HTTP endpoint by any agent framework that can send a request, and it's also reachable through Apify's Actors MCP Server (npx @apify/actors-mcp-server --tools scrapier/facebook-groups-search-scraper-with-ai-relevance-filter, or the hosted https://mcp.apify.com) for MCP-native clients like Claude Desktop and Claude Code.
Can I use it without managing proxies or a Facebook account?
Yes. No Facebook account or login is required, and proxy handling is automatic β the default run uses no proxy and escalates to a backup connection, then residential, only if Facebook or DuckDuckGo blocks a request; you can also supply your own proxyConfiguration.
Your feedback
Found a bug or a field that doesn't match what's documented here? Let us know through the Actor's Issues tab on Apify or Scrapier's support contact β reports like this go straight into fixing the extractor.