Facebook Group Post Scraper
Pricing
$24.99/month + usage
Facebook Group Post Scraper
Scrape Facebook group posts easily with Facebook Group Post Scraper! Extract post text, author info, reactions, comments, and timestamps from any group. Perfect for data collection, market research, community analysis, and engagement tracking across Facebook groups.
Pricing
$24.99/month + usage
Rating
5.0
(8)
Developer
Scraper Engine
Maintained by CommunityActor stats
8
Bookmarked
310
Total users
3
Monthly active users
11 days ago
Last modified
Categories
Share
Facebook Group Post Scraper — Text, Reactions and Top Comments
Facebook Group Post Scraper extracts posts from any public Facebook group — post text, author name and profile URL, reaction/share/comment counts, and top comments with commenter details — and returns them as structured JSON, ready to use with no parsing required. Built for marketers, researchers, and developers who track group conversations at scale. No Facebook login is required for public groups. Paste a group URL below and start your first run.
What is Facebook Group Post Scraper?
Facebook Group Post Scraper is an Apify Actor that fetches the post feed of a public Facebook group and converts it into structured JSON — post text, author, engagement counts, attachments, and top comments. It runs entirely logged out: the input schema has no cookie or password field, and the Actor's own request code hardcodes an empty session (cookies=None), so no Facebook account is needed. It's built for social media marketers, community managers, and data/AI teams who need group-level post data without maintaining a browser session or Facebook credentials.
What Facebook group post data is publicly available to scrape?
Anyone who opens a public Facebook group's feed in a browser, logged out, can see its posts, authors, engagement counts, and top comments — that same visible layer is what this Actor returns.
| Data Category | Publicly Available | Restricted behind group membership |
|---|---|---|
| Post text, timestamp, and permalink | Yes, for public groups | Invisible to non-members on private/closed groups |
| Author name and profile URL | Yes | Invisible to non-members on private/closed groups |
| Reaction, share, and comment counts | Yes | Invisible to non-members on private/closed groups |
| Top-level comments and commenter profiles | Yes | Invisible to non-members on private/closed groups |
| Post attachments (photos, videos, external links) | Yes | Invisible to non-members on private/closed groups |
| Full group member list | No | Facebook never exposes member lists through the post feed, even for public groups |
| Group rules and admin/moderator identities | No, not through the post feed | Only visible via the group's own About/Members tab |
Facebook Group Post Scraper only returns publicly visible data — what any visitor sees when opening the group's public feed. Nothing behind a login wall or membership approval is accessed.
What data can I extract with Facebook Group Post Scraper?
Every run returns one JSON object per post, covering the post's identity/content and its engagement, including a nested array of top comments.
| Field Name | Description |
|---|---|
createdAt | Unix timestamp (seconds) when the post was created |
url | Direct permalink to the post |
user.id | Post author's Facebook user ID (often an opaque pfbid… token) |
user.name | Post author's display name |
user.url | Author's profile URL (empty string when Facebook doesn't expose it inline) |
text | Full post caption/body text |
attachments[].type | Facebook typename of the primary media, or "ExternalLink" |
attachments[].url | Off-Facebook link when the attachment is a shared article/outbound link, else null |
attachments[].title | Shared-link/attachment title, when present |
attachments[].mediaType | Coarse media kind: "video", "image", or null |
attachments[].subattachmentCount | Number of album/carousel children in the attachment |
reactionCount | Total reactions (likes, love, etc.) on the post |
shareCount | Number of times the post was shared |
commentCount | Total comment count reported on the post |
topComments[].text | Comment text |
topComments[].createdAt | Unix timestamp when the comment was created |
topComments[].author.name / .id / .gender / .url / .profilePicture / .shortName / .isVerified | Commenter's display name, Facebook ID, gender, profile URL, profile picture, short name, and verification flag |
topComments[].reactionCount | Reactions on the comment |
topComments[].commentCount | Reply count on the comment |
topComments[].url | Direct link to the comment |
Post identity & content fields
createdAt, url, user (id, name, url), text, and attachments (type, url, title, mediaType, subattachmentCount) describe what the post is, who wrote it, and what's attached to it.
Engagement & comment fields
reactionCount, shareCount, commentCount, and topComments (with each comment's text, timestamp, author object, reaction count, reply count, and URL) describe how the post performed and who engaged with it. Note: the Actor caps topComments at 10 per post — this limit is fixed in the current code and not exposed as an input.
🤖 Add-on: Need additional Facebook data?
If you need the group's own metadata rather than its posts, Facebook Group Profile Scraper: Rules & Topics Extractor pulls rules, topics, and admin/moderator lists. To go deeper on engagement, Facebook Comments Scraper: Reaction Breakdown decodes a post's full reaction-type mix (like/love/haha/wow/sad/angry/care). If you don't have a group URL yet, Facebook Groups Search Scraper finds groups by keyword first.
How does Facebook Group Post Scraper differ from the official Facebook API?
Meta deprecated the Facebook Groups API outright: as of Graph API v19.0 (effective April 22, 2024), the publish_to_groups and groups_access_member_info permissions and the Groups API reviewable feature were removed from all versions, per Meta's own Graph API v19.0 changelog. There is currently no supported Graph API path for a third-party app to read an arbitrary public group's post feed at all.
| Feature | Official Graph API | Facebook Group Post Scraper |
|---|---|---|
| Read a group's public post feed | Not available — Groups API deprecated since April 2024 | Yes, from a group URL |
| App review required | N/A (feature removed) | No — no app, no OAuth token |
| Access to groups you don't administer | Not available | Yes, for public groups |
| Setup | N/A | Paste a group URL and run |
| Output consistency | N/A | Stable JSON schema across runs |
Since Meta offers no working API for this, Facebook Group Post Scraper is the practical way to get structured public group-post data — for the small number of Meta-approved partner integrations that do have Groups API access through a different program, that path remains the compliant option if it applies to your use case.
How to use Facebook Group Post Scraper
Facebook Group Post Scraper runs on the Apify platform — no separate signup or API key beyond your Apify account is required.
- Open the Actor's page in Apify Console and click Start (or Try for free).
- Provide the required input:
groupUrl, the full URL of the public Facebook group (e.g.https://www.facebook.com/groups/cheapmealideas). - Optionally set
count(how many posts to collect),sortType(new posts, most relevant, or recent activity), andscrapeUntil(only posts newer than a given date). - Start the run.
- Open the Dataset tab once the run finishes and export results as JSON, CSV, Excel, or another supported format — or pull them via the Apify API.
How to scale to bulk Facebook group post extraction
groupUrl is a single string, not an array — one run covers one group, and this Actor's input schema has no bulk/list field for multiple groups in a single run. To cover several groups, start one run per group, looping over your list of group URLs through the Apify API or SDK (or Apify's scheduler for recurring runs); each run pushes its posts to its own dataset, which you can then merge downstream.
What can you do with Facebook group post data?
- A community manager tracking a support group uses
textandreactionCountto surface which member questions are getting ignored versus answered. - A social listening analyst monitoring brand mentions uses
topComments[].textandtopComments[].author.nameto see who is amplifying (or disputing) a claim made in a post. - A researcher studying discussion dynamics uses
commentCount,shareCount, andcreatedAtto chart how engagement on a topic changes over time. - A growth marketer scoping a niche community uses
user.nameanduser.urlacross many posts to identify the most active contributors worth engaging directly. - An AI engineer builds a RAG pipeline over
textandtopComments[].text, indexing them byurlso an agent can answer questions about what a community has actually discussed, with citations back to the source post.
How does Facebook Group Post Scraper handle rate limits and blocking?
The Actor makes direct HTTP requests to Facebook's own GraphQL endpoint (no proxy by default) and automatically escalates on blocking: a 403, 429, or 503 response triggers a fallback from no proxy → Apify datacenter proxy → Apify residential proxy, and once residential proxy is used it stays in use for the rest of the run. Each request is retried up to 3 times with an increasing delay between attempts. When Facebook's GraphQL response contains an error, the Actor only retries on errors marked CRITICAL severity — non-critical errors are treated as a valid (if partial) response. A randomized delay is inserted between paginated requests to avoid hammering the group's feed. If a group's ID or GraphQL document ID can't be resolved after all fallback attempts (for example, the group doesn't exist or is fully blocking the request), the Actor logs a warning and returns whatever posts it already collected for that run rather than throwing an error.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
groupUrl | Yes | string | Full Facebook group URL to scrape. | https://www.facebook.com/groups/cheapmealideas |
count | No | integer | Maximum number of posts to collect. Default 20, range 1–10,000. Leave empty to scrape all available posts. | 100 |
sortType | No | string | How posts are sorted: new_posts (chronological, default), most_relevant (top by engagement), or recent_activity (latest comments/interactions first). | new_posts |
scrapeUntil | No | string | Only collect posts created after this UTC date/time (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS). Leave empty to scrape all posts. | 2024-01-15 |
proxy | No | object | Apify Proxy configuration. Recommended to leave enabled to help avoid rate limits and access restrictions. | {"useApifyProxy": true} |
Example input
{"groupUrl": "https://www.facebook.com/groups/cheapmealideas","count": 100,"sortType": "new_posts","scrapeUntil": "2024-01-15","proxy": {"useApifyProxy": true}}
⬆️ Output
Each scraped post is pushed to the Apify dataset as a single, typed JSON record the moment it's extracted — no waiting for the run to finish before results appear. Every pushed record is billed under the row_result charged event; the Actor does not push any separate uncharged summary or error rows. Export the dataset as JSON, CSV, Excel, XML, or RSS from the Apify Console, or read it via the Apify API.
Example output
{"createdAt": 1761419106,"url": "https://www.facebook.com/groups/germtheory.vs.terraintheory/permalink/25132651666385171/","user": {"id": "pfbid0Ypf1LaaX4i3fZVCN4zpxvkqJBn8Sdco4pqE42cdaH974RpncHEKhcAsxu1Ar6igPl","name": "Anna Kazazis","url": "https://www.facebook.com/anna.kazazis"},"text": "Are dried goji berries considered sweet or subacid?","attachments": [{"type": "Photo","url": null,"title": null,"mediaType": "image","subattachmentCount": 0}],"reactionCount": 3,"shareCount": 0,"commentCount": 8,"topComments": [{"text": "I believe dried fruit is its own category, not sweet or subacid.","createdAt": 1761463794,"author": {"name": "Gosia Adur","id": "pfbid0xBBvGGZDdjVCwCXJjiKQGFPUJ3nXxqFELp82wtGBVb4adizWYh52Tgsfjb7kPnnRl","gender": "FEMALE","url": null,"profilePicture": "https://scontent.fdac142-1.fna.fbcdn.net/v/example_profile.jpg","shortName": "Gosia","isVerified": false},"reactionCount": 2,"commentCount": 1,"url": "https://www.facebook.com/groups/germtheory.vs.terraintheory/permalink/25132651666385171/?comment_id=25143801295270208"}]}
How does it work?
Facebook Group Post Scraper makes direct HTTP requests to Facebook's public GraphQL endpoint and rendered HTML — there's no headless browser rendering the page. It presents real Chrome request headers (user agent, sec-ch-ua) so requests look like an ordinary logged-out browser visit, resolves the group's internal ID and GraphQL document ID from the group's own page and script bundles, then pages through the feed using Facebook's cursor-based pagination. When Facebook responds with a block signal, requests automatically route through Apify Proxy (datacenter, then residential) instead of failing outright. Only what a logged-out visitor could see in the group's feed is ever returned — no private-group or membership-gated content. The output schema (createdAt, url, user, text, attachments, reactionCount, shareCount, commentCount, topComments) stays fixed regardless of how Facebook's underlying page markup changes.
Integrations
Facebook Group Post Scraper runs on Apify, so it works with anything that can call the Apify API, plus Apify's no-code and AI-agent integrations.
Calling Facebook Group Post Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"groupUrl": "https://www.facebook.com/groups/cheapmealideas","count": 100,"sortType": "new_posts",}run = client.actor("scraper-engine/facebook-group-post-scraper").call(run_input=run_input)for post in client.dataset(run["defaultDatasetId"]).iterate_items():print(post["text"], post["reactionCount"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
MCP integration for AI agents
Facebook Group Post Scraper is reachable through Apify's hosted Actors MCP Server at https://mcp.apify.com. Add it as a remote MCP connector in Claude, Cursor, or another MCP-compatible client, authenticate with your Apify account, and select this Actor as an available tool — the agent can then start runs and read results directly inside the conversation.
No-code tools (n8n, Make, LangChain)
In n8n, use the Apify node (or an HTTP Request node against the Apify API) pointed at this Actor's run endpoint to trigger scrapes from a workflow. In Make, the Apify app's "Run an Actor" module takes the same input JSON shown above. In LangChain or LlamaIndex, wrap the Apify API call in a custom tool so an agent can call the Actor and consume the returned dataset as retrieval context.
Is it legal to scrape Facebook group posts?
Scraping publicly accessible data is generally permitted, and Facebook Group Post Scraper only collects posts, comments, and author details that are visible to a logged-out visitor of a public group — nothing behind a login wall or membership approval. Because that data includes individuals' names, profile URLs, and profile pictures, it counts as personal data under regimes like GDPR and CCPA, which govern how you store, process, and reuse it — not whether the initial collection of public data is itself lawful. Consult legal counsel if your use case involves bulk storage or downstream processing of personal data.
Frequently asked questions
What Facebook group post fields does Facebook Group Post Scraper return?
The top fields are text, user.name, reactionCount, commentCount, and topComments — see the full fields table above for every field, including nested attachment and comment-author data.
Does Facebook Group Post Scraper require a Facebook account or login?
No. It scrapes public groups logged out — the input schema has no cookie, password, or session field, and the Actor's request code always sends an empty session.
How many Facebook group posts can I extract in one run?
The count input accepts 1 to 10,000 posts per run, or you can leave it empty to collect all posts available through the group's feed for the selected sort order.
What happens if a group is private, doesn't exist, or the URL is wrong?
The Actor can't resolve a group ID or GraphQL document ID for a group it can't access, logs a warning naming the URL, and returns an empty result for that run rather than throwing an error — it does not attempt to guess or fabricate data for an inaccessible group.
Can I scrape multiple Facebook groups at once?
Not in a single run — groupUrl accepts one URL, with no array/bulk field in the input schema. Loop over your list of group URLs and start one run per group via the Apify API, SDK, or scheduler.
Does Facebook Group Post Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's reachable through Apify's hosted MCP server (https://mcp.apify.com) for MCP-compatible clients like Claude, and callable as a plain HTTP endpoint by any agent framework via the Apify API.
How does Facebook Group Post Scraper compare to scraping the group manually or building your own?
Manually copying posts doesn't scale past a handful of items, and a self-built scraper has to solve group-ID/document-ID resolution, GraphQL pagination, and Facebook's blocking behavior from scratch — this Actor already handles that resolution, pagination, and proxy fallback logic.
Does Facebook Group Post Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or CSS selectors needed. Pass it directly to an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when Facebook changes its layout or anti-bot system?
The Actor resolves its group ID and GraphQL document ID dynamically from the live page rather than hardcoding them, and the output schema is designed to stay stable across Facebook UI changes. No specific update turnaround time is published or guaranteed.
Can I use Facebook Group Post Scraper without managing proxies or browser infrastructure?
Yes. There's no headless browser to configure, and proxy handling — including the fallback from no proxy to Apify datacenter to Apify residential proxy on blocking — is built into the Actor.
Which fields work best for AI training data and RAG indexing?
For RAG, index text and topComments[].text (the high-information natural-language fields), keyed by url for citation. For structured training data, createdAt, reactionCount, shareCount, and commentCount return as consistent typed primitives (integer/timestamp) across every record.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Facebook Posts Scraper | Posts, engagement, and reaction breakdowns from Facebook Pages (not groups) |
| Facebook Groups Search Scraper | Discovers Facebook groups by keyword or direct link |
| Facebook Group Profile Scraper: Rules & Topics Extractor | A group's rules, topics/tags, description keywords, and category |
| Facebook Comments Scraper: Reaction Breakdown | Per-comment reaction-type breakdown and derived engagement metrics |
| Facebook Marketplace Scraper | Marketplace listing titles, prices, locations, and seller info |
| Facebook Groups Scraper With Lead & Contact Finder | Group posts filtered and mined for emails, phone numbers, and social handles |
Your feedback
Found a bug or missing a field? Let us know through the Issues tab on this Actor's Apify Console page so we can take a look. Feedback like this directly shapes what gets fixed and added next.