Facebook Groups Scraper
Pricing
from $3.99 / 1,000 results
Facebook Groups Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Groups Scraper — Posts, Reactions, Top Comments & Media from Public Groups
Turn any public Facebook group into structured data. Paste group URLs and the Actor returns each post with its full text, author, permalink, timestamp, reaction breakdown (likes, loves, total), share and comment counts, photo/video attachments and the top comments on the post.
Add a date cut-off, a keyword and year filter, or one of four sort strategies to target exactly the posts you need. Optional cookie login is supported for deeper access — but the Actor works fine without it.
What you get
| 📝 Post | ❤️ Engagement | 💬 Comments & media |
|---|---|---|
| Post ID and legacy ID | Total reaction count | Up to 2 top comments per post |
| Direct post permalink | Like count | Comment author, text and likes |
| Full post text | Love count | Comment threading depth |
| Publication timestamp | Share count | Photos with URI + dimensions |
| Author name and ID | Comment count | Accessibility caption (OCR-style text) |
| Group title and group ID | Feedback object ID | Media set / album links |
Key features
- Four sorting strategies.
CHRONOLOGICAL(newest first),RECENT_ACTIVITY(most active discussions),TOP_POSTS(highest engagement) andCHRONOLOGICAL_LISTINGS— the last one built specifically for buy/sell groups, where listings behave differently from discussion posts. - Reaction breakdown, not just a number. Separate
reactionLikeCountandreactionLoveCountalongside the total, so you can tell polite approval from genuine enthusiasm. - Top comments included. Each post carries up to two of its most interesting top-level comments with author, text, like count and threading depth — enough context to understand a thread without a second scraper.
- Date cut-off.
onlyPostsNewerThanstops the run once posts get older than your boundary. Accepts absolute dates (2026-01-15) or plain language (7 days,2 weeks,1 month) — ideal for scheduled monitoring where you only want what is new. - Keyword + year filtering. Narrow a group's history to a specific year and search term.
- Unlimited mode. Leave the post limit empty to collect everything the group feed will give you.
- Optional cookie login. Supply a Facebook cookie string to reach content that is gated behind a login wall. Entirely optional — leave it empty and the Actor runs anonymously.
- Residential proxy with auto-retry. Rotation and retry logic are built in, so long runs survive Facebook's rate limiting.
- Bulk groups per run. Scrape many groups in a single job; every row records which group it came from.
Use cases
- Community & audience research — understand what a niche actually talks about, with engagement numbers attached.
- Lead generation — surface posts that signal buying intent and follow up through the public post.
- Buy/sell group monitoring — use
CHRONOLOGICAL_LISTINGSto track marketplace-style groups for new listings. - Brand & competitor monitoring — catch mentions of your product inside communities, including how people reply to them.
- Content strategy & SEO — mine real questions and phrasing for content that ranks and resonates.
- Trend detection — schedule a daily run with a
7 dayscut-off and watch which topics accelerate. - Social listening & sentiment work — post text plus top comments gives you both the claim and the community's reaction.
- Academic and market research — build reproducible datasets of public community discourse.
How it works
- You supply one or more public group URLs, a post limit and (optionally) filters.
- The Actor bootstraps each group — it resolves the group's internal node ID and the tokens needed to page the feed, straight from the public page.
- The feed is paginated in your chosen sort order, cursor by cursor, with randomised delays and up to 3 retries per request.
- Every post node is normalised into a flat record: text, author, timestamp, permalink, reactions, counts, attachments and top comments.
- Filters are applied — the date cut-off stops pagination early once posts fall outside your window.
- Rows stream into the dataset as they are extracted.
Quick start
- Copy the URL of a public Facebook group.
- Paste it into Facebook Group URLs — add more lines for more groups.
- Set Number of Posts to Scrape (start with 20–50; leave empty for everything).
- Pick a Post Sorting Strategy —
CHRONOLOGICALis a good default. - Click Start, then export the Output tab as CSV, Excel or JSON.
Minimal input
{"startUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"resultsLimit": 50,"viewOption": "CHRONOLOGICAL"}
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — (required) | One or more public Facebook group URLs. Private groups require authentication and are not supported anonymously. |
resultsLimit | integer | 10 | Maximum posts to scrape per group. Leave empty to collect all available posts. |
viewOption | string | CHRONOLOGICAL | CHRONOLOGICAL (newest first), RECENT_ACTIVITY (most recently active threads), TOP_POSTS (most engaged), CHRONOLOGICAL_LISTINGS (buy/sell groups). |
onlyPostsNewerThan | string | — | Stop when posts are older than this. Absolute (2026-01-15) or relative (7 days, 2 weeks, 1 month). |
searchGroupKeyword | string | — | Keyword filter for posts inside the group. See the note below. |
searchGroupYear | string | — | Restrict to a year (e.g. 2026). Works best combined with a keyword. |
proxyConfiguration | object | Apify Proxy, RESIDENTIAL | Residential rotation with automatic retry. Recommended for anything at scale. |
cookieString | string | — | Optional. A Facebook cookie header (must include at least c_user and xs) to run logged in. Use a dedicated secondary account — cookies grant access to that account. |
About keyword search: Facebook's in-group search is heavily limited for logged-out visitors. Full words often return nothing. The reliable pattern is 1–2 letters combined with a year filter; for precise topic filtering, it is usually better to scrape broadly and filter the
textcolumn afterwards in your spreadsheet or code.
Note on limits: the post limit applies most predictably to the "new posts" (chronological) ordering.
Output data
One row per post.
| Field | Type | Description |
|---|---|---|
id | string | Facebook post node ID. |
legacyId | string | Legacy numeric post ID. |
url | string | Direct permalink to the post. |
text | string | Full post text. |
time | string | Publication timestamp (ISO, UTC). |
user | object | { id, name } for the post author. |
likesCount | number | Total reactions. |
reactionLikeCount | number | 👍 Like reactions. |
reactionLoveCount | number | ❤️ Love reactions. |
topReactionsCount | number | Combined top-reaction total. |
commentsCount | number | Comments on the post. |
sharesCount | number | Shares. |
topComments | array | Up to 2 top-level comments: author, text, likesCount, threadingDepth. |
attachments | array | Photos and media with image.uri, image.width, image.height, id, thumbnail, ocrText (accessibility caption), owner info and album/media-set links. |
groupTitle | string | Name of the group. |
facebookId | string | Group ID. |
facebookUrl / inputUrl | string | The group URL this post came from. |
feedbackId | string | Facebook's internal feedback object ID. |
pageAdLibrary | object | Ad Library reference for the group/page. |
Example output
{"id": "UzpfSTEwMDAwMTIzNDU2Nzg5MDoxMjM0NTY3ODkw","legacyId": "1234567890123456","url": "https://www.facebook.com/groups/cheapmealideas/posts/1234567890123456/","text": "Weekly shop came to £31 for four people. Full breakdown below 👇","time": "2026-08-06T07:14:52.000Z","user": { "id": "100001234567890", "name": "Jamie Example" },"likesCount": 512,"reactionLikeCount": 431,"reactionLoveCount": 74,"topReactionsCount": 505,"commentsCount": 96,"sharesCount": 23,"topComments": [{ "text": "This is genuinely useful, thank you!", "likesCount": "18", "threadingDepth": 0 }],"attachments": [{"__typename": "Photo","image": { "uri": "https://scontent.xx.fbcdn.net/…", "width": 1080, "height": 1440 },"id": "9876543210","ocrText": "May be an image of text that says 'WEEKLY SHOP £31'"}],"groupTitle": "Cheap Meal Ideas","facebookId": "123456789012345","inputUrl": "https://www.facebook.com/groups/cheapmealideas/"}
Illustrative values — a live run returns current Facebook data.
Usage examples
Daily monitoring — only what is new
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"viewOption": "CHRONOLOGICAL","onlyPostsNewerThan": "1 day","resultsLimit": 500}
Save as a Task, attach a daily Schedule, and deduplicate on id.
Best-performing content in a community
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"viewOption": "TOP_POSTS","resultsLimit": 300}
Sort the export by likesCount and commentsCount.
Buy/sell group listings
{"startUrls": ["https://www.facebook.com/groups/localbuysell/"],"viewOption": "CHRONOLOGICAL_LISTINGS","onlyPostsNewerThan": "7 days","resultsLimit": 1000}
Historical pull for a specific year
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"searchGroupKeyword": "a","searchGroupYear": "2025","resultsLimit": 500}
Several groups in one run
{"startUrls": ["https://www.facebook.com/groups/groupone/","https://www.facebook.com/groups/grouptwo/","https://www.facebook.com/groups/groupthree/"],"resultsLimit": 200,"viewOption": "RECENT_ACTIVITY"}
Run it from your own code
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperx/facebook-groups-scraper").call(run_input={"startUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"resultsLimit": 100,"viewOption": "CHRONOLOGICAL","onlyPostsNewerThan": "30 days",})for post in client.dataset(run["defaultDatasetId"]).iterate_items():print(post["time"], post["user"]["name"], post["likesCount"], post["text"][:80])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperx/facebook-groups-scraper').call({startUrls: ['https://www.facebook.com/groups/cheapmealideas/'],resultsLimit: 100,viewOption: 'CHRONOLOGICAL',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL
curl -X POST "https://api.apify.com/v2/acts/scraperx~facebook-groups-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls":["https://www.facebook.com/groups/cheapmealideas/"],"resultsLimit":100}'
Integrations
Push posts to Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or any endpoint via webhooks, and pair with Schedules for continuous community monitoring.
Pricing
Pay-per-event: a small Actor-start charge plus a charge per post row delivered to your dataset. You pay for the posts you get, not for run time. Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run.
Cost tip: combine onlyPostsNewerThan with a schedule so recurring runs only pay for genuinely new posts.
Limits & good to know
- Public groups only without cookies. Private and closed groups require membership; the Actor does not bypass that.
- In-group keyword search is limited for logged-out sessions. Prefer scraping broadly and filtering the
textcolumn, or use the 1–2 letter + year trick. resultsLimitis per group, so five groups at 200 posts can yield 1,000 rows.- Facebook restricts how far back a public feed can be paged; very old posts may be unreachable regardless of your limit.
topCommentsreturns up to 2 comments per post — it is context, not a full comment export.- Media URIs point at Facebook's CDN and expire; download assets promptly if you need to keep them.
- If you use
cookieString, use a dedicated secondary account: the cookie grants access to that account, and automated activity can get accounts restricted. - Default run options are 4 GB memory and a 1-hour timeout — raise the timeout for large multi-group runs.
FAQ
Do I need to log in?
No. The Actor runs anonymously on public groups. The cookieString field is optional and only needed for content behind a login wall.
Can it scrape private groups? Not anonymously. Only public group content is accessible without membership.
Does it return comments? Yes — up to two top comments per post, with author, text, like count and threading depth, alongside the total comment count.
What is CHRONOLOGICAL_LISTINGS for?
Buy/sell groups, where Facebook renders listings differently from ordinary discussion posts.
How do I only get new posts each day?
Set onlyPostsNewerThan to 1 day (or 7 days) and schedule the run.
Why does keyword search return nothing?
Facebook's logged-out group search barely works with full words. Use one or two letters plus a year, or filter the exported text column instead.
Can I scrape everything in a group?
Leave resultsLimit empty to go as deep as Facebook's feed allows. Very old history may still be capped by Facebook.
Which export formats are supported?
JSON, CSV, Excel (XLSX), XML and RSS. JSON keeps user, topComments and attachments nested.
Legal & responsible use
This Actor collects publicly visible content from public Facebook groups. It does not join groups, bypass privacy settings, or access private data. Posts, comments and profile names relate to real people — if you process this data, make sure you have a lawful basis under GDPR and similar regimes, and comply with Facebook's terms and applicable law. If you supply cookies, you are responsible for that account's use.
Support
Need more comments per post, extra fields, or a custom group-monitoring pipeline? Open an issue on the Issues tab.