Facebook Group Posts and Details Scraper with Comments
Pricing
from $3.99 / 1,000 results
Facebook Group Posts and Details Scraper with Comments
Facebook Group Posts and Details Scraper with Comments extracts posts, comments, reactions, author details, timestamps, media, and engagement data from public Facebook groups. Export structured data to JSON, CSV, Excel, or integrate with your workflows.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Group Posts and Details Scraper with Comments — Posts, Comment Threads & Nested Replies
Scrape public Facebook groups and get more than a feed dump: each post arrives with its author, text, image, timestamp and group — plus a full comment thread, including nested replies, commenter profiles, like counts and threading depth.
Monitoring mode remembers what it has already seen, so scheduled runs return only genuinely new posts and only pay to read the comments underneath them.
What is Facebook Group Posts and Details Scraper?
This Actor reads a public Facebook group's feed through Facebook's own GraphQL interface, then walks each post's discussion.
Comments are handled in two stages, deliberately: a zero-extra-request preview is used first, and a dedicated comments query runs only when you ask for more than the preview contains. Replies are fetched through Facebook's separate reply-thread query and nested under each comment with a replyToCommentId and threadingDepth.
The result is a dataset where the conversation structure survives — you can see not just what was posted, but who responded, what they said, and who replied to whom.
What data can you extract?
Per post
| Field | Description |
|---|---|
id | Facebook post ID |
postText | Full post text |
image | Attached image URL |
postAuthor, firstName, lastName | Author name, split into parts |
postAuthorId, postAuthorUrl | Author's Facebook ID and profile link |
timestamp | Post creation time (epoch) |
groupUrl | Which group the post came from |
commentCount | How many comments were collected for this post |
comments[] | The comment thread (see below) |
email | Reserved field, returned empty |
Per comment (and per reply)
| Field | Description |
|---|---|
commentId, commentUrl | Comment identifier and permalink |
commentText | Comment body |
commentTimestamp | ISO timestamp |
commenterName, commenterId, commenterProfileUrl | Who wrote it |
commenterProfilePicture | Avatar URL |
commentLikesCount | Likes on the comment |
replyCount | Total replies Facebook reports |
threadingDepth | Nesting level |
commentAttachmentUrl | Media attached to the comment |
replies[] | Nested replies, same shape |
Why teams scrape Facebook group discussions
For market and customer research
Group threads are where people describe problems in their own words, unprompted and unfiltered by a survey. The comments matter more than the posts: a question with 80 replies is a map of what an audience actually believes, disagrees about and recommends.
For lead generation
Intent shows up in comments as often as in posts — "does anyone know a good…", "I've been looking for…". Because every comment carries commenterName and commenterProfileUrl, an intent search turns directly into a contact list.
For brand and competitor monitoring
Seeing your product mentioned is one thing; seeing how the group replies to that mention is the actual signal. Nested replies let you read the whole exchange rather than an isolated sentence.
For community managers
commentLikesCount, replyCount and threadingDepth quantify which topics generate real discussion versus polite acknowledgement — useful for planning what to post next.
For social researchers and data teams
Post text, comment text, reply structure, timestamps and engagement counts together make a genuinely rich conversational dataset, with the thread graph preserved through parentId and threadingDepth.
How to scrape a Facebook group step by step
- Open a public Facebook group and copy its URL, or note its identifier (the part after
/groups/). - Paste it into Facebook Group URLs or Identifiers — one per line for several groups.
- Set Maximum Posts. This is a global cap across the whole run, split across your groups.
- Leave Include Comment Threads on and set Max Comments Per Post; turn on Include Nested Replies for full threads.
- Optionally set a start date and a post sort order.
- Click Start, then export the Output tab as JSON (recommended — comments are nested) or CSV.
⬇️ Input
Example input
{"startUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"maxPosts": 50,"sortOrder": "RECENT_ACTIVITY","includeComments": true,"maxCommentsPerPost": 20,"includeCommentReplies": true,"commentsSortOrder": "all"}
Input reference — posts
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — (required) | Facebook group URLs or identifiers. Full URL (https://www.facebook.com/groups/name) or bare identifier (name). Multiple groups per run supported. |
maxPosts | integer | 10 | Global cap across the whole run, minimum 10. With multiple groups the cap is split between them and the merged result is capped at this value. Example: maxPosts: 50 with 2 groups → roughly 25 each, ≤50 total. |
sortOrder | string | RECENT_ACTIVITY | Feed ordering: RECENT_POSTS, TOP_POSTS, RECENT_ACTIVITY, CHRONOLOGICAL. |
startDate | string | — | Only posts newer than this date (YYYY-MM-DD). Leave empty for no date filter. |
monitoringMode | boolean | false | Remembers post IDs already seen (in the Apify Key-Value Store) and skips duplicates on future runs. Comment threads are fetched only for the new posts that survive the filter. |
Input reference — comments
| Field | Type | Default | Description |
|---|---|---|---|
includeComments | boolean | true | Adds a comments list and commentCount to every post. Turn off for a posts-only run with no extra requests. |
maxCommentsPerPost | integer | 20 | Cap on top-level comments per post, minimum 1. Replies are counted separately. |
includeCommentReplies | boolean | true | Also collect replies under each fetched comment, nested in comments[].replies. Off is faster and cheaper. |
commentsSortOrder | string | all | Facebook's comment ordering: most_relevant, newest or all. |
Network
| Field | Type | Default | Description |
|---|---|---|---|
proxyConfiguration | object | Apify Residential | This Actor always uses residential proxy regardless of your selection. Configure Apify Proxy credentials if needed. |
⬆️ Output
Where the data lands
- Default dataset — one row per post, with the comment thread nested inside it. These are the charged rows.
- Per-run child dataset (named
<runId>-comments) — the same comments and replies flattened into individual rows, labelledtype: "comment"ortype: "reply",isChild: true, withpostId,parentIdandgroupUrl. This mirror is not charged — it exists so comment data is easy to query flat without paying twice.
Example output — post row
{"id": "1234567890123456","postText": "Batch-cooked 12 portions of chilli for under £14 this week — full breakdown in the comments!","image": "https://scontent.xx.fbcdn.net/…","postAuthor": "Jamie Example","firstName": "Jamie","lastName": "Example","postAuthorId": "100001234567890","postAuthorUrl": "https://www.facebook.com/profile.php?id=100001234567890","timestamp": 1786451351,"groupUrl": "https://www.facebook.com/groups/cheapmealideas/","email": "","commentCount": 2,"comments": [{"commentId": "Y29tbWVudDoxMjM0","commentUrl": "https://www.facebook.com/groups/cheapmealideas/posts/1234567890123456/?comment_id=1234","commentText": "This is genuinely useful — what supermarket?","commentTimestamp": "2026-08-06T18:22:11Z","commenterName": "Priya Example","commenterId": "100009876543210","commenterProfileUrl": "https://www.facebook.com/priya.example","commenterProfilePicture": "https://scontent.xx.fbcdn.net/…","commentLikesCount": 18,"replyCount": 1,"threadingDepth": 0,"commentAttachmentUrl": null,"replies": [{"commentId": "Y29tbWVudDo1Njc4","commentText": "Aldi — the dried beans are the trick.","commenterName": "Jamie Example","commentLikesCount": 6,"threadingDepth": 1,"replyToCommentId": "Y29tbWVudDoxMjM0"}]}]}
Illustrative values — a live run returns current Facebook data.
Usage recipes
Daily monitoring that only pays for new content
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"maxPosts": 200,"monitoringMode": true,"sortOrder": "RECENT_POSTS","includeComments": true,"maxCommentsPerPost": 10}
Monitoring mode is the key setting here: comment threads are fetched only for posts that are actually new, so a scheduled run does not re-read discussions it has already collected.
Deep-dive one high-engagement thread set
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"maxPosts": 10,"sortOrder": "TOP_POSTS","maxCommentsPerPost": 100,"includeCommentReplies": true,"commentsSortOrder": "most_relevant"}
Fast, posts-only export
{"startUrls": ["group-one", "group-two", "group-three"],"maxPosts": 300,"includeComments": false}
Turning comments off removes all extra requests — the fastest and cheapest way to build a large post corpus.
Recent history only
{"startUrls": ["https://www.facebook.com/groups/yourniche/"],"startDate": "2026-07-01","sortOrder": "CHRONOLOGICAL","maxPosts": 500}
Lead mining from comments
Run with comments on, open the child <runId>-comments dataset, and filter commentText for intent phrases. commenterProfileUrl is your contact path.
How does this compare to Facebook's Graph API?
Facebook's Graph API can read group content only for groups your app has been installed into by an admin, with reviewed permissions. There is no sanctioned way to read an arbitrary public group you do not administer, and the group-content permissions have been progressively restricted.
This Actor reads the publicly visible group feed — the same content a logged-out visitor can see — which is why it needs no app, no review and no admin cooperation. The trade-off is that it is bound by what Facebook shows publicly and by anti-automation defences, which is why residential proxy is enforced and why coverage can be partial on a blocked route.
Integrate and automate
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperforge/facebook-group-posts-and-details-scraper").call(run_input={"startUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"maxPosts": 50,"includeComments": True,"maxCommentsPerPost": 20,})for post in client.dataset(run["defaultDatasetId"]).iterate_items():print(post["postAuthor"], "|", post["commentCount"], "comments |", post["postText"][:70])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperforge/facebook-group-posts-and-details-scraper').call({startUrls: ['https://www.facebook.com/groups/cheapmealideas/'],maxPosts: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
REST API
curl -X POST "https://api.apify.com/v2/acts/scraperforge~facebook-group-posts-and-details-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls":["https://www.facebook.com/groups/cheapmealideas/"],"maxPosts":50}'
n8n, Make, Zapier and AI agents
Call the Actor from n8n, Make, Zapier or an MCP-capable agent through Apify's integrations. Monitoring mode plus a schedule makes a clean "new community discussions" trigger.
Schedules and webhooks
Attach a Schedule with monitoringMode: true for continuous community monitoring, and use webhooks to notify your stack when a run finishes. Results can also flow into Google Sheets, Airtable, Slack or Google Drive.
Pricing and what you are charged for
Pay-per-event: a small Actor-start charge plus a charge per post row in the default dataset.
Two things worth knowing:
- Comments are not charged separately. They travel inside the post row, and the flattened child dataset is a free mirror — raising
maxCommentsPerPostdeepens your data without increasing the billed row count. maxPostsis the cost lever, andmonitoringModeis the cheapest way to run continuously, because repeat posts are skipped entirely.
Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run. Residential proxy traffic is billed separately by the platform.
Limits, reliability and blocking
- Public groups only. Private and closed groups require membership and are not accessible.
- Reliability varies with Facebook's anti-automation. Residential proxy is enforced for that reason, and you should not expect every run to reach
maxPosts— comment coverage in particular can be partial on a blocked route. This is stated up front because it is normal behaviour, not a defect. maxPostsis a global cap, split across groups — not a per-group limit.- Minimum 10 posts;
maxCommentsPerPostminimum 1. - Replies cost extra requests. Turning
includeCommentRepliesoff noticeably speeds up large runs. - The child comments dataset is per run (
<runId>-comments) — it is not a single cumulative dataset across runs. - Media URLs point at Facebook's CDN and expire; download assets promptly if you need them.
- Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for deep comment runs.
Is it legal to scrape Facebook groups?
This Actor collects publicly visible content from public Facebook groups — posts and comments any logged-out visitor can read. It does not log in, join groups, or bypass privacy settings.
Comment data is personal data about identifiable people, and often more sensitive than post data: names, profile links, opinions and health, financial or family details shared in community discussions. If you process it, ensure you have a lawful basis under GDPR and comparable regimes, minimise what you store, keep it secure, honour deletion requests, and do not repurpose community conversations for unsolicited marketing. You are responsible for ensuring your use complies with Facebook's terms and applicable law.
❓ Frequently asked questions
Do I need Facebook cookies or a login?
No. The Actor reads public group content without authentication.
Can it scrape private or closed groups?
No. Only public groups are accessible.
Are replies really nested, or flattened?
Both, deliberately. In the default dataset they are nested under comments[].replies with replyToCommentId and threadingDepth. In the free per-run child dataset they are flattened into individual rows with parentId, so you can query them in a spreadsheet without unnesting.
Does fetching more comments cost more?
No. Charging is per post row; comments ride inside it and the child mirror is uncharged.
What does monitoring mode actually remember?
Post IDs it has already returned, stored in the Apify Key-Value Store. On the next run those posts are skipped, and comment threads are fetched only for the new ones.
Why did my run return fewer posts than maxPosts?
Either the group had fewer available posts, your startDate filtered them out, or Facebook throttled part of the run. All three are normal — the run still finishes successfully with what it collected.
Which post sort order should I use?
RECENT_POSTS or CHRONOLOGICAL for monitoring, TOP_POSTS for the highest-engagement content, RECENT_ACTIVITY (the default) for threads that are actively being discussed right now.
Can I get commenter e-mail addresses?
No. Facebook does not publish them, and the email field on post rows is a reserved placeholder that is always empty.
Can I scrape several groups at once?
Yes — add them all to startUrls. Remember that maxPosts is shared across them, not applied per group.
Which export format should I use?
JSON for the default dataset, since comments and replies are nested. If you want a flat spreadsheet of the discussion, export the <runId>-comments child dataset instead.
🔗 Related scrapers
- Facebook Groups Scraper — group feed posts when you do not need comment threads.
- Facebook Groups Search Scraper — find the groups worth monitoring in the first place.
- Facebook Posts Search Scraper — keyword search across public Facebook posts.
- Facebook Marketplace Scraper — listings and availability from Marketplace.
Browse the full collection on the ScraperForge profile.
💬 Feedback
Need deeper comment pagination, reaction breakdowns, or a custom community-monitoring pipeline? Open an issue on the Issues tab of this Actor.