Facebook Groups Scraper avatar

Facebook Groups Scraper

Pricing

from $4.00 / 1,000 facebook group post scrapeds

Go to Apify Store
Facebook Groups Scraper

Facebook Groups Scraper

Scrape public Facebook group posts by group URL or group ID. Export post text, author, engagement counts, media URLs, top comments, and pagination cursors. MCP/API-ready.

Pricing

from $4.00 / 1,000 facebook group post scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

2

Monthly active users

8 days ago

Last modified

Share

What is Facebook Groups Scraper?

Facebook Groups Scraper by khadinakbar/facebook-groups-scraper is an Apify Actor for public Facebook group posts. It accepts public Facebook group URLs or numeric group IDs, then saves one dataset record per post. Each record can include post text, author details, publish time, reaction, comment, share, and video-view counts, media URLs, top-comment previews, pagination cursor details, source, and scrape timestamp. The Actor is usable through Apify API and Apify MCP.

Best fit and connected workflows

Use this Actor when your workflow begins with a public Facebook group and you want post-level records for review, enrichment, routing, or agent processing.

Good workflow matches include:

  • Monitoring a public group feed by URL or group ID
  • Collecting post text and engagement counts for analysis
  • Resuming a provider-backed crawl with a saved cursor from RUN_SUMMARY.nextCursors
  • Passing a returned post into Facebook Post Comments Scraper when you want comment expansion for a specific public post
  • Passing a returned post into Facebook Likes Scraper - Public Reactions & Profiles when the next step is reaction or profile detail around that post

What one record means

One dataset item represents one public Facebook group post saved from one requested group feed. The record is anchored to the group URL, includes the original source input, and may carry post, author, engagement, media, and pagination fields depending on what the configured data source returns.

Practical scenario

A social media manager has a public Facebook group URL for a community topic and wants a spreadsheet of recent posts. They enter the group URL, set maxPosts to 50, and keep sortBy on recent activity. The dataset returns rows with postUrl, text, authorName, publishedAt, reactionCount, commentCount, shareCount, and engagementCount. The manager uses those fields to review discussion themes and then opens the most relevant post in a follow-up workflow.

Input

FieldTypeDescription
groupUrlsarrayOne or more public Facebook group URLs, for example https://www.facebook.com/groups/homemakingtips/.
groupIdsarrayOptional numeric Facebook group IDs when you know the ID and want to start from that value.
maxPostsintegerMaximum number of group post records to save across all groups. Default 100, range 1 to 3000.
maxPagesPerGroupintegerMaximum provider pages per group. Provider APIs currently return up to 3 posts per request and paginate with a cursor. Default 5, range 1 to 200.
startCursorstringOptional provider pagination cursor. Use a cursor from RUN_SUMMARY.nextCursors to resume a group feed.
sortBystringProvider-side Facebook group post ordering. Values: RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL, CHRONOLOGICAL_LISTINGS.
dataSourcestringSelects auto, provider, or browser.
providerOrderstringChooses which managed provider API is tried first: the routing options listed in the input schema.
useBrowserFallbackbooleanEnables a Playwright browser scrape when provider APIs are unavailable, empty, or disabled.
maxBrowserScrollsintegerMaximum page scrolls in browser fallback mode. Default 8, range 0 to 50.
facebookCookiesstringOptional JSON cookie array or raw Cookie header for browser fallback.
proxyobjectProxy settings for browser fallback. Default uses Apify Proxy with the RESIDENTIAL group.
includeRawDatabooleanIncludes the raw source object in each dataset row for debugging and downstream parsing.

Example input

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

Output

Each dataset row is one scraped public Facebook group post.

FieldTypeDescription
groupUrlstringCanonical Facebook group URL used for the record.
groupIdstring or nullNumeric Facebook group ID when available.
groupSlugstring or nullGroup slug extracted from a Facebook group URL.
sourceInputstringOriginal input URL or group ID.
postIdstring or nullFacebook post identifier when available.
postUrlstring or nullDirect Facebook group post URL.
textstring or nullPost text or visible browser-extracted text.
authorNamestring or nullPublic post author display name when available.
authorIdstring or nullPublic author identifier when available.
authorUrlstring or nullPublic author profile URL when available.
publishedAtstring or nullISO timestamp or provider timestamp string.
publishTimeinteger or nullProvider Unix timestamp when available.
reactionCountinteger or nullTotal reaction count when available.
commentCountinteger or nullTotal comment count when available.
shareCountinteger or nullTotal share count when available.
videoViewCountinteger or nullVideo view count when available.
engagementCountinteger or nullSum of available reactions, comments, and shares.
imageUrlstring or nullPost image or video thumbnail URL when available.
videoUrlstring or nullDirect provider video URL when available.
videoDetailsobject or nullProvider video metadata when available.
topCommentsarray or nullProvider top-comment preview when available.
sortBystringSort mode requested for this record.
pageintegerProvider page or browser fallback page number.
cursorstring or nullCursor used to request this page when available.
sourcestringData source used for this record.
scrapedAtstringISO timestamp when this record was saved.
rawPostobject or nullRaw source object when includeRawData is enabled.

Example 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": "Sample public group post text.",
"authorName": "Sample Author",
"authorId": "100000000000000",
"authorUrl": "https://www.facebook.com/profile.php?id=100000000000000",
"publishedAt": "2026-01-01T12:00:00Z",
"reactionCount": 12,
"commentCount": 3,
"shareCount": 1,
"videoViewCount": 0,
"engagementCount": 16,
"imageUrl": "https://example.com/image.jpg",
"videoUrl": null,
"videoDetails": null,
"topComments": [
{
"authorName": "Commenter One",
"text": "Helpful reply."
}
],
"sortBy": "RECENT_ACTIVITY",
"page": 1,
"cursor": "CURSOR_TOKEN",
"source": "provider",
"scrapedAt": "2026-01-01T12:05:00Z",
"rawPost": null
}

How it works

This Actor follows a provider-first and browser-fallback design.

  1. It tries the configured managed provider chain first.
  2. The provider order can start with the primary or fallback data provider.
  3. If provider APIs are unavailable, empty, or disabled, the Actor can use a Playwright browser fallback.
  4. Browser fallback can use your authorized Facebook cookie session and Apify Proxy settings.
  5. Provider pagination uses cursors, and each request can return up to 3 posts.
  6. Saved rows are written to the default dataset.
  7. execution telemetry is written to the default key-value store as RUN_SUMMARY and OUTPUT.

The Actor manifest also shows the available environment variable secrets for provider access: the routing options listed in the input schema.

Pricing

This Actor uses Pay per event pricing with Apify platform usage included. The primary charged event is one Facebook group post scraped event for each public post saved to the dataset. The charged-events contract also includes a small Actor start event. For the live current price and any platform usage details, open the Pricing tab on the Actor page.

As an event-count example in words: saving twenty five posts creates twenty five primary post-scraped events.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a tool for retrieving structured public Facebook group post data.

Tool description: Scrape public Facebook group posts from a group URL or group ID and return dataset rows with text, author fields, engagement counts, media URLs, top comments, pagination cursor details, and scrape metadata.

Exact Actor identity: khadinakbar/facebook-groups-scraper

Find public posts for this Facebook group URL, keep the output limited to recent activity, and return a structured dataset I can pass to follow-up analysis. I need the post text, author, published time, engagement counts, media URLs, and cursor details if available.

The output is well suited for agent workflows because each row contains a single post record with provenance fields such as groupUrl, sourceInput, source, page, cursor, and scrapedAt. For pagination-aware workflows, the RUN_SUMMARY record includes post counts, groups processed, providers used, provider status codes, cursors, and stop reason. OUTPUT provides a compact summary that is easy to consume in agent pipelines.

When supported by the selected source, provider pagination returns a cursor that can be reused through startCursor. Provider requests currently return up to 3 posts per request, so maxPagesPerGroup is the main control for collecting additional pages. Event cost scales with saved posts.

Apify API example

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

Best results and outcome guidance

For focused runs, start with one group URL or one group ID per run, then raise maxPosts only as needed. Use RECENT_ACTIVITY when you want the newest public posts first, or TOP_POSTS when you want provider-side ordering from the source. If you plan to continue later, save the cursor from RUN_SUMMARY.nextCursors and reuse it with startCursor. If provider access is part of your setup, keep dataSource on auto and choose the provider order that matches your environment.

Continue the workflow

Design note

I found that the dataset contract always includes groupUrl, sourceInput, source, and scrapedAt as required fields. That makes every saved record traceable to both its requested input and the data source used.

FAQ

Can I start from a Facebook group URL or a numeric group ID?

Yes. The Actor accepts either groupUrls or groupIds.

Which fields make the output useful for follow-up workflows?

Common follow-up fields include postUrl, text, authorName, publishedAt, reactionCount, commentCount, shareCount, engagementCount, imageUrl, videoUrl, topComments, and cursor.

How do I continue a provider-backed run later?

Use the cursor from RUN_SUMMARY.nextCursors as startCursor in a later run.

How does this Actor connect to comment or reaction workflows?

Use Facebook Post Comments Scraper for comment expansion on a returned post, or Facebook Likes Scraper - Public Reactions & Profiles when the next step is reaction or profile detail.

What output should an agent read first?

Start with the OUTPUT key-value record for a compact summary, then read the dataset for post-level rows, and inspect RUN_SUMMARY for pagination and provider telemetry.

Responsible use

This Actor is designed for public Facebook group data. Use your own authorized Facebook session for browser fallback, and collect only content you are entitled to access under the applicable Facebook group settings and your own permissions.