Facebook Groups Search Scraper: Find Groups by Keyword
Pricing
from $1.25 / 1,000 groups
Facebook Groups Search Scraper: Find Groups by Keyword
Find Facebook groups by keyword, location or language without login: one row per group with name, link, group id, public or private, exact members, posts per day and month, created date, location, description, rules and admin count.
Pricing
from $1.25 / 1,000 groups
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
From The Mine Works, makers of Facebook Pages Scraper and B2B Leads Finder, with over 260,000 runs across 290+ public actors.
Updated 31 Oct 2026: first release. Keyword search with an optional location and language, group links read directly, and one flat row per group with its numeric id, link, public or private, exact member count, posts today and in the last 30 days, created date, every location, description, rules and admin count. Bookmark this Actor on its Store page so it is one click away next time.
Why choose this actor?
- The numbers that tell a live group from a dead one. Every row has the exact member total (
146154, not "146K"), Facebook's own counters for posts in the last day and the last 30 days, andposts_per_day. A 300,000 member group with 3 posts a month and a 6,000 member group with 70 sit side by side, sortable in a spreadsheet. - Public and private groups, no account. Facebook shows a private group's About data to anyone, so private groups come back with members, activity, created date, locations and rules too. Nothing logs in, so no Facebook account can be restricted because of a run.
- Pay per group, nothing for misses. Groups that fail your filters, groups found twice, groups Facebook does not show, the summary row and error rows are never charged. A keyword that finds nothing costs no start fee.
Part of The Mine Works Social media and video family: Threads Scraper, Reddit Scraper, Threads Search Scraper, Instagram Profile Scraper, Instagram Followers & Following, Reddit Search Scraper.
Try it in one minute
Paste this into the input (JSON view) and press Start. It returns 20 groups about "real estate investors" with their About data read. It took 23 to 49 seconds in our test runs (38 in the last one):
{"searchQueries": ["real estate investors"],"maxGroupsPerKeyword": 20}
Put several keywords on separate lines to search them all in one run. A group that two keywords find is delivered once, under the first.
Apify's free plan includes $5 of credit every month, which covers about 2,900 groups at this actor's price.
Copy to your AI assistant
themineworks/facebook-groups-search-scraper on Apify. Finds Facebook groups by keyword (optionally a location and a language) through web search, then reads each group logged out, and returns one flat row per group with no login. Call ApifyClient("TOKEN").actor("themineworks/facebook-groups-search-scraper").call(run_input={"searchQueries": ["real estate investors"], "maxGroupsPerKeyword": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give searchQueries (list of keywords) or startUrls (Facebook group links, share links /share/g/..., or group search links /search/groups/?q=...) or both; up to 100 keywords. Optional: maxGroupsPerKeyword (default 50, 1 to 1000), location (text added to every search), locationMustMatch (default false), language (en, es, pt, fr, de, it, nl, pl, tr, id, vi, ar, hi, ro, sv, tl; steers the search, not a strict filter), includeAbout (default true; members, privacy, activity, created date, locations, rules), privacy (any, public, private), minMembers (default 0), requireKeywordMatch (default false), searchEngines (default ["duckduckgo","brave"]; "google" optional). Group rows have no _type field and carry group_id, name, url, vanity, privacy, privacy_description, visibility, members, members_text, posts_today, posts_last_month, posts_per_day, created_at, history_text, location, locations, description, rules_count, rules (title, description), admins_and_moderators, emails, websites, image_url, keyword, keyword_match, search_query, source, search_result_url, about_read, about_error, rank, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when groups were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~facebook-groups-search-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Keyword, location, language. Each keyword runs as a short plan of web searches for
facebook.com/groupspages: the keyword itself, then with "group", "community", "club" and similar words, so one keyword reaches past the first page. A location (London, Texas, Mumbai) is added to every search. A language adds its own words for group and community first, soyogain French finds "Communauté Yoga" and "Yoga: groupe d'entraide". - Exact About data. With
includeAbouton (the default), each group's public About data is read: exact members, posts today and in the last 30 days, Public or Private, Visible or Hidden, the created date and name change history, every location the group set, each rule with its text, and the admin and moderator count. - Numeric id for every group. Search results often show a vanity link such as
/groups/teslaownersaustralia/. Every row carries the numericgroup_idtoo, and a group found under both is delivered once. - Group links in, rows out. Paste group links you already have (the group, its About tab, a post inside it, or a
/share/g/link) to refresh their numbers, one row each. - Contacts the admins published.
emailsandwebsiteslist the addresses and outside links written into the group's description or rules. Facebook links are left out. - Filters that cost you nothing. Public or private only, a minimum member count, keyword in the name or description, location named by the group. Groups that fail a filter are never delivered or charged.
- Stops cleanly. A keyword that finds no group stops after one search page. A search engine that fails twice in a row is dropped for the run. The run stops before its time limit and keeps every row. The summary row says why a keyword came back short.
How to use it
Basic: groups about one topic
{"searchQueries": ["dog lovers"],"maxGroupsPerKeyword": 100}
Sort by posts_per_day to find the groups people actually post in, or by members for reach.
Local groups in one city
{"searchQueries": ["moms", "buy and sell"],"location": "Austin","locationMustMatch": true,"maxGroupsPerKeyword": 50}
The location steers every search toward Austin. With locationMustMatch on, a group is kept only when its Facebook locations, name or description mention Austin.
Large, active, public groups only
{"searchQueries": ["real estate investors"],"privacy": "public","minMembers": 10000,"maxGroupsPerKeyword": 50}
Groups under 10,000 members or private ones are read and skipped, never charged. Very strict filters can end a keyword early; the summary row says how many groups each filter dropped.
Groups in another language
{"searchQueries": ["yoga", "running"],"language": "fr","maxGroupsPerKeyword": 50}
French words for group and community lead the searches. Facebook does not publish a group's language, so this steers the search rather than filtering rows.
Refresh numbers for groups you already track
{"startUrls": ["https://www.facebook.com/groups/teslaownersaustralia/","https://www.facebook.com/groups/260505726202010/"]}
One row per link with today's members and activity. Filters do not apply to groups you list.
Fast list without About data
{"searchQueries": ["nurses"],"includeAbout": false,"maxGroupsPerKeyword": 100}
Rows carry the group id, name, link, description, first location and picture. In our test, 30 groups took 17 seconds this way. Same price per group.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
searchQueries | array of strings | empty | Keywords, one per line, each searched on its own. |
location | string | empty | City, region or country added to every search. |
language | string | any | Language code that steers the search: en, es, pt, fr, de, it, nl, pl, tr, id, vi, ar, hi, ro, sv, tl. |
maxGroupsPerKeyword | integer | 50 | Most groups delivered per keyword, 1 to 1,000. |
includeAbout | boolean | true | Reads each group's About data (members, privacy, activity, created date, locations, rules, admin count). |
privacy | string | any | public or private to keep only those (turns About on). |
minMembers | integer | 0 | Skip groups with fewer members (turns About on). |
requireKeywordMatch | boolean | false | Keep a group only when every word of the keyword is in its name, description or location. |
locationMustMatch | boolean | false | With a location set, keep a group only when it mentions every word of it. |
startUrls | array of strings | empty | Group links, share links or Facebook group search links. |
searchEngines | array | duckduckgo, brave | Where groups are looked up. Add google for more groups on some keywords (slower). |
Give searchQueries, startUrls or both. Up to 100 keywords and 5,000 group links per run. maxGroups and maxItems are accepted as names for maxGroupsPerKeyword.
What data do you get?
One row per group. Group rows have no _type field; the summary, info and error rows do, so a filter on _type separates them.
| Field | What it is |
|---|---|
group_id | Numeric Facebook group id, e.g. 179046264217457 |
name, url, vanity | Group name, link, and the custom name in the link when there is one |
privacy, privacy_description | Public or Private, and Facebook's explanation |
visibility | Visible (anyone can find it) or Hidden |
members, members_text | Exact member count, and the text as Facebook writes it |
posts_today, posts_last_month, posts_per_day | Facebook's own post counters for the last day and 30 days, and the daily average |
created_at, history_text | Created date (ISO 8601) and the creation and name change history |
location, locations | First location the group set, and every location |
description | Group description |
rules_count, rules | Number of rules, and each rule's title and description |
admins_and_moderators | Number of admins and moderators (public groups; Facebook hides it on private ones) |
emails, websites | Addresses and outside links written into the description or rules |
image_url | Group cover picture |
keyword, keyword_match | The keyword that found the group, and where all its words appear: name, description, location or none |
search_query, source, search_result_url, rank | The exact search, the engine (duckduckgo, brave, google or group_url), the result that pointed to the group (the group or a post in it), and the order the keyword delivered it |
about_read, about_error | Whether the About data was read, and why not when it was not |
scraped_at | When the row was written |
Summary row (_type: "summary", never charged): keywords_requested, keywords_read, searches_run, groups_found, groups_read, groups_delivered, charged_for, duplicates_skipped, about_ok, about_failed, not_found, the count each filter dropped (filtered_privacy, filtered_members, filtered_keyword, filtered_location), request counts per search engine, ended_on_deadline, stopped_by_max_cost, shortfall_reason when fewer groups came back than asked, and per_keyword, one entry per keyword with searches, pages, groups_found, delivered, filtered and why it stopped. The same summary is saved as the OUTPUT record of the run.
Error rows (_type: "error", never charged): one per input that could not be read, with error_type (invalid_url, not_found, unreadable, share_link), identifier and reason.
Stable fields for automations
These were present in every group row of our test runs (300 rows from 3 keywords, About on), and their names will not change:
| Field | What it is |
|---|---|
group_id | The key to store and join on |
name | Group name |
url | Group link |
privacy | Public or Private |
visibility | Visible or Hidden |
members | Exact member count |
posts_today | Posts in the last day |
posts_last_month | Posts in the last 30 days |
posts_per_day | Daily average |
created_at | Created date |
history_text | Creation history |
rules_count | Number of rules |
keyword | Keyword that found it |
source | Search engine |
rank | Order for the keyword |
Optional, present only when Facebook shows a value: vanity (groups with a custom link name), location and locations (143 of 300 test rows; many groups set none), description, admins_and_moderators (public groups only), image_url, and emails (19 of 300) or websites (38 of 300). With includeAbout off, rows carry group_id, name, url, description, location and image_url only.
Output examples
One group from the "nurses" search (test run, 30 Oct 2026, trimmed):
{"group_id": "336180506139537","name": "Nurse Community","url": "https://www.facebook.com/groups/nursescommunity/","vanity": "nursescommunity","privacy": "Public","privacy_description": "Anyone can see who's in the group and what they post.","visibility": "Visible","members": 27501,"members_text": "27,501 total members","posts_today": 56,"posts_last_month": 922,"posts_per_day": 30.7,"created_at": "2024-04-15T14:35:53.000Z","history_text": "Group created on April 15, 2024. Name last changed on May 18, 2024.","location": "United States","locations": ["United States"],"description": "Welcome to Nurse Community! This group is dedicated to nurses across the United States...","rules_count": 4,"rules": [{ "title": "Respect everyone's privacy", "description": "Being part of this group requires mutual trust..." }],"admins_and_moderators": 5,"emails": [],"websites": [],"keyword": "nurses","keyword_match": "description","search_query": "site:facebook.com/groups nurses","source": "duckduckgo","search_result_url": "https://www.facebook.com/groups/nursescommunity/","about_read": true,"rank": 1,"scraped_at": "2026-10-30T18:59:49.412Z"}
A private group from the "sourdough baking" search (trimmed):
{"group_id": "2211426535791322","name": "Sourdough Bread Baking","url": "https://www.facebook.com/groups/2211426535791322/","privacy": "Private","visibility": "Visible","members": 6309,"posts_today": 2,"posts_last_month": 70,"posts_per_day": 2.3,"created_at": "2019-03-13T16:49:12.000Z","location": "Omaha, Nebraska","rules_count": 3,"keyword": "sourdough baking","keyword_match": "name","source": "duckduckgo","rank": 6}
An error row, never charged:
{ "_type": "error", "error_type": "invalid_url", "identifier": "https://www.facebook.com/teslamotors", "reason": "Not a Facebook group link. Use a link like https://www.facebook.com/groups/<name or id>/, a share link https://www.facebook.com/share/g/<code>/, or put words in searchQueries." }
Pricing
Pay per event: you pay for the groups you receive, plus a flat $0.003 per run, whatever memory you choose. Reading the About data costs nothing extra, and neither does adding Google.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
group-scraped | Once per group row stored in your dataset | $1.71 per 1,000 | $1.55 per 1,000 | $1.40 per 1,000 | $1.25 per 1,000 |
run-start | Once per run, after the first group reached your dataset | $0.003 | $0.003 | $0.003 | $0.003 |
The price of one group is the price per 1,000 divided by 1,000.
Never charged:
- links that are not Facebook group links (each gets an error row);
- groups that fail your privacy, member, keyword or location filters;
- a group found twice in the same run (two keywords, or its vanity link and its id);
- groups Facebook does not show to a logged out visitor (removed, secret, or limited by age or country);
- groups past your
maxGroupsPerKeyword; - the summary, info and error rows;
- a run with no valid input, or one whose keywords find no group: the start fee is charged only once a group reached your dataset;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.
Run it on a schedule
- Open the actor in Apify Console, set your input and click Save as a new task.
- In the task, open Schedules, click Add schedule and pick how often (every day, every Monday at 08:00 and so on).
- Compare runs on
group_idto spot new groups for your keywords, and onmembersandposts_last_monthto see which ones grow. - Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.
FAQ
How does it find groups without a Facebook login?
Facebook's own group search needs a login, so the actor finds groups the way people find them on the open web: site:facebook.com/groups searches on DuckDuckGo and Brave (and Google if you add it). Any result inside a group, such as a post or its About tab, counts for that group. Each group is then read logged out from Facebook itself, so the numbers are Facebook's own.
How many groups can I get per keyword?
Up to 1,000. Popular keywords reached 100 groups in every one of our tests (dog lovers, crypto trading, yoga teachers, vintage cars, wedding photographers, nurses, sourdough baking, small business owners); niche ones return fewer. It is not every group Facebook holds, only the ones the web can see. More specific keywords (a city, a product, a hobby) reach further, and each keyword in a run adds its own groups.
Why are some groups not about my exact keyword?
A search result can be a post inside a group, so a group whose members talk about "crypto trading" can be named "Bitcoin Investors". keyword_match says where all the words of your keyword appear (name, description, location or none). Turn on requireKeywordMatch to keep only the groups whose name, description or location carry them.
Does it work for private groups?
Yes. Facebook shows a private group's About data to anyone: name, members, activity, created date, locations and rules. Its posts stay hidden, and Facebook does not show its admin count, so admins_and_moderators is empty on private groups. Secret (hidden) groups cannot be found from outside.
How is activity measured?
posts_today and posts_last_month are Facebook's own counters from the About data. posts_per_day is posts_last_month divided by 30, rounded to one decimal.
How long does a run take?
In our tests: 23 to 49 seconds for the "Try it" input (20 groups), about 3.5 to 6.5 minutes for 200 groups from two keywords, 9 minutes for 300 groups from three keywords, and 17 seconds for 30 groups with includeAbout off. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.
Does it return admin names or member lists?
No. Member lists, admin names and posts need a login. Only the admin and moderator count is returned, and only the emails and websites the admins wrote into the description or rules.
Do I need an account, cookies or a proxy?
No. The actor uses Apify Proxy, which is included in the price. Nothing to set up.
Which actor should I use next?
Facebook Pages Scraper for details, followers and contacts of business Pages, Facebook Comments Scraper for comments on public posts, and Facebook Ad Library Scraper for the ads brands run.
Which formats can I download?
JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has two ready views: Groups, and About details. In CSV and Excel, locations and rules are flattened into columns such as locations/0 and rules/0/title.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/facebook-groups-search-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http facebook-groups-search-scraper "https://mcp.apify.com/?tools=themineworks/facebook-groups-search-scraper"
Is it legal to scrape Facebook groups?
The actor reads only what Facebook shows to anyone without logging in: a group's public About information and public web search results. It does not log in, join groups or read posts or members. You are responsible for how you use the data, including Facebook's terms and data protection law such as GDPR and CCPA. This is general information, not legal advice.
Integrations
- Google Sheets: send each run's groups to a sheet with Apify's Google Sheets integration; one row per group fits a sheet as is.
- Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new groups for our keywords every Monday to Slack".
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Social media and video
- Threads Scraper
- Reddit Scraper
- Threads Search Scraper
- Instagram Profile Scraper
- Instagram Followers & Following
- Reddit Search Scraper
- Twitter / X Scraper
- YouTube Transcript
- Xiaohongshu (RED) Scraper
- Telegram Channel Scraper
- Telegram Channel Finder
- Pinterest Profile Scraper
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a keyword that returns fewer groups than you expect, or a field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.
Find Facebook groups by keyword, location or language and get every group back as one row, with its id, link, public or private, exact members, posts per day, created date, locations and rules, no login.

