Facebook Group Posts Scraper avatar

Facebook Group Posts Scraper

Pricing

from $5.00 / 1,000 facebook group post scrapeds

Go to Apify Store
Facebook Group Posts Scraper

Facebook Group Posts Scraper

Scrape public Facebook group posts by group URL or ID, with post text, author, reaction, comment and share counts, media URLs, top comments and pagination cursors. No login or cookies needed.

Pricing

from $5.00 / 1,000 facebook group post scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

What is Facebook Group Posts Scraper — Text, Engagement & Comments?

Facebook Group Posts Scraper is an Apify Actor for public Facebook group content. It accepts one or more public group URLs or numeric group IDs and returns one dataset record per post. Each record can include post text, author details, publish time, reaction/comment/share counts, media URLs, top-comment previews, pagination cursors, and execution provenance fields such as source and scrape timestamp. The Actor is usable through Apify MCP and through the Apify API.

Best fit and connected workflows

This Actor fits workflows that start with a public Facebook group and end with structured post data for analysis, review, or downstream automation.

Use it when you want to:

  • collect public group posts from a known group URL or group ID
  • compare post activity using reaction, comment, and share counts
  • capture author and media context alongside the post text
  • resume a feed with a saved cursor from a previous run
  • feed an AI agent or internal pipeline with stable JSON records

Connected workflows can stay inside the Facebook post surface:

  • pass a returned post into Facebook Post Comments Scraper when you need deeper comment extraction for a specific post
  • pass public reaction or profile data into Facebook Likes Scraper -- Public Reactions & Profiles when the next step is reaction or profile-oriented analysis

Practical scenario

Maya, a community researcher, starts with a public group URL for a local gardening group and sets a maximum post count for the run. The Actor returns rows with text, authorName, publishedAt, reactionCount, commentCount, shareCount, imageUrl, and topComments. Maya reviews the posts with the highest engagement, then opens the linked post URLs to compare recurring themes and decide which discussion thread to summarize next.

Input

FieldTypePurpose
groupUrlsarray[string]One or more public Facebook group URLs
groupIdsarray[string]Numeric Facebook group IDs when the URL is unknown
maxPostsintegerMaximum post records to save across all groups
maxPagesPerGroupintegerMaximum provider pages to request per group
startCursorstringCursor from RUN_SUMMARY.nextCursors for resuming a feed
sortBystringProvider-side ordering: RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL, CHRONOLOGICAL_LISTINGS
dataSourcestringauto, provider, or browser
providerOrderstringThe routing options listed in the input schema
useBrowserFallbackbooleanEnables Playwright browser fallback when provider APIs are unavailable, empty, or disabled
maxBrowserScrollsintegerMaximum scrolls in browser fallback mode
facebookCookiesstringOptional cookie input for browser fallback using an authorized session
proxyobjectProxy settings for browser fallback
includeRawDatabooleanAdds the raw source object to each dataset row

Focused input example

{
"groupUrls": [
"https://www.facebook.com/groups/homemakingtips/"
],
"maxPosts": 25,
"maxPagesPerGroup": 4,
"sortBy": "RECENT_ACTIVITY",
"dataSource": "auto",
"useBrowserFallback": true,
"includeRawData": false
}

Output

One dataset record represents one public Facebook group post.

FieldTypePurpose
groupUrlstringCanonical group URL used for the record
groupIdstring or nullNumeric group ID when available
groupSlugstring or nullGroup slug extracted from the URL
sourceInputstringOriginal input URL or group ID
postIdstring or nullPost identifier when available
postUrlstring or nullDirect post permalink
textstring or nullPost text or browser-extracted visible text
authorNamestring or nullPublic author display name
authorIdstring or nullPublic author identifier
authorUrlstring or nullPublic author profile URL
publishedAtstring or nullISO timestamp or provider timestamp string
publishTimeinteger or nullProvider Unix timestamp when available
reactionCountinteger or nullReaction total
commentCountinteger or nullComment total
shareCountinteger or nullShare total
videoViewCountinteger or nullVideo views when available
engagementCountinteger or nullSum of reactions, comments, and shares when available
imageUrlstring or nullImage or thumbnail URL
videoUrlstring or nullDirect provider video URL
videoDetailsobject or nullProvider video metadata
topCommentsarray or nullTop-comment preview objects
sortBystringSort mode used for the record
pageintegerProvider page or browser fallback page number
cursorstring or nullCursor used for this page when available
sourcestringData source used for the record
scrapedAtstringISO timestamp when the row was saved
rawPostobject or nullRaw source object when includeRawData is enabled

Illustrative output record

{
"groupUrl": "https://www.facebook.com/groups/homemakingtips/",
"groupId": "1234567890",
"groupSlug": "homemakingtips",
"sourceInput": "https://www.facebook.com/groups/homemakingtips/",
"postId": "2065680910795061",
"postUrl": "https://www.facebook.com/groups/homemakingtips/permalink/2065680910795061/",
"text": "Looking for ideas to organize a small pantry.",
"authorName": "Jane D.",
"authorId": "1000123456789",
"authorUrl": "https://www.facebook.com/profile.php?id=1000123456789",
"publishedAt": "2025-02-14T10:30:00Z",
"reactionCount": 42,
"commentCount": 18,
"shareCount": 3,
"videoViewCount": null,
"engagementCount": 63,
"imageUrl": "https://example.com/image.jpg",
"videoUrl": null,
"videoDetails": null,
"topComments": [],
"sortBy": "RECENT_ACTIVITY",
"page": 1,
"cursor": "cursor_value",
"source": "provider",
"scrapedAt": "2025-02-14T10:31:00Z",
"rawPost": null
}

How it works

The Actor accepts public Facebook group URLs or group IDs, then tries configured provider APIs first. The provider chain is the primary and fallback data providers, with a selectable order. If browser fallback is enabled, it can use a Playwright scrape path. Provider pagination returns up to 3 posts per request and uses cursors, which are exposed in execution summaries for resuming later. The Actor stores the dataset rows in the default dataset and writes RUN_SUMMARY and OUTPUT to the default key-value store.

Pricing

Facebook Group Posts Scraper — Text, Engagement & Comments uses Pay per event pricing with Apify platform usage included. The primary event is one saved Facebook group post. There is also a small actor-start event, and Apify platform usage is included in the event price. For the current pricing details, see the live Pricing tab on the Actor page.

For example, a run that saves ten posts creates ten post-scraped events, plus the actor-start event, and Apify platform usage is added according to the execution configuration.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. It provides structured public Facebook group post data that agent workflows can read, filter, summarize, or pass into follow-up tools.

Tool identity: khadinakbar/facebook-group-posts-scraper

Scrape the public Facebook group at https://www.facebook.com/groups/homemakingtips/, return up to 20 recent posts, and include post text, author, counts, media URLs, and top comments. Use the dataset rows as the source of truth, then summarize the most engaging posts.

Output interpretation:

  • each dataset row is one public group post
  • postUrl is the canonical link for record-level follow-up
  • reactionCount, commentCount, shareCount, and engagementCount help rank activity
  • topComments gives a preview of visible provider comments when available
  • source, cursor, page, and scrapedAt provide provenance for agent reasoning

Provenance and scope:

  • the Actor targets public Facebook group posts
  • it accepts group URLs or group IDs
  • it writes dataset rows plus execution summaries to key-value store records
  • browser fallback is available when configured through the input

Pagination and cost guidance:

  • provider responses return up to 3 posts per request
  • use maxPagesPerGroup to expand coverage in one run
  • reuse RUN_SUMMARY.nextCursors with startCursor to continue a feed
  • event-based pricing means saved posts drive the main cost

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/facebook-group-posts-scraper').call({
groupUrls: ['https://www.facebook.com/groups/homemakingtips/'],
maxPosts: 10,
sortBy: 'RECENT_ACTIVITY',
});
const dataset = client.dataset(run.defaultDatasetId);
const { items } = await dataset.listItems({ clean: true });
console.log(items);

Best results and outcome guidance

Start with a single public group URL or a small set of related group IDs when you are validating a workflow. Use RECENT_ACTIVITY for current discussion flow, or TOP_POSTS when you want engagement-ranked posts. Set maxPosts to the number of rows your pipeline needs, and raise maxPagesPerGroup when you want broader coverage from the same group feed. If you need to continue from a previous run, copy the cursor from RUN_SUMMARY.nextCursors into startCursor. When a downstream process only needs structured records, read the dataset items; when it also needs run context, read RUN_SUMMARY and OUTPUT from the default key-value store.

Continue the workflow

  • Then use Facebook Groups Scraper to extend Facebook Group Posts Scraper — Text, Engagement & Comments research with a complementary content contract.
  • Then use Facebook Groups Search Scraper to extend Facebook Group Posts Scraper — Text, Engagement & Comments research with a complementary discovery contract.

Design note

I found that the output contract includes both RUN_SUMMARY and OUTPUT in the default key-value store, which makes the Actor straightforward to use from both scripts and agents.

FAQ

How do I choose between group URLs and group IDs? Use a group URL when you have the canonical public link. Use a group ID when that is the identifier you already store in another system.

How do I continue a partially collected group feed? Read the cursor from RUN_SUMMARY.nextCursors and pass it back as startCursor.

Which field should I use for engagement ranking? engagementCount is the combined total of available reactions, comments, and shares. The individual counts are also available.

How do I connect this Actor to comment collection? Use the returned postUrl or post identifier with Facebook Post Comments Scraper when your workflow needs a post-level comment pass.

How do I connect this Actor to reaction or profile analysis? Pass returned Facebook records into Facebook Likes Scraper -- Public Reactions & Profiles when the next step needs public reaction or profile data.

Responsible use

This Actor is designed for public Facebook group content and for data you are authorized to access. Respect Facebook's terms, applicable laws, and any rights or permissions that apply to the content you process. Use authorized sessions only for browser fallback, and keep your collection aligned with your organization's compliance and data-handling requirements.