Facebook Groups Scraper avatar

Facebook Groups Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Facebook Groups Scraper

Facebook Groups Scraper

Facebook Groups Scraper extracts public Facebook group data, including group names, descriptions, categories, member counts, URLs, locations, and other available details. Automate group research, community discovery, competitor analysis, audience research, and lead generation.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Share

Facebook Groups Scraper β€” Public Group Posts, Reactions, Top Comments & Media

Extract posts from public Facebook groups with the detail that matters: full post text, author, permalink, timestamp, a reaction breakdown (likes vs loves vs total), share and comment counts, photo attachments with OCR-style captions, and the top comments on each post.

Four sorting strategies, a date cut-off, keyword and year filters, and optional cookie login for content behind a login wall.


What is Facebook Groups Scraper?

This Actor reads a public Facebook group's feed through Facebook's own GraphQL interface and turns it into structured rows.

Where a basic group scraper gives you text and a like count, this one preserves the things that make community data actually analysable: separate reaction types, share counts, the top comments on each post with their authors and like counts, and image attachments with Facebook's accessibility caption (which frequently describes what is in the picture).

It runs anonymously by default. A cookie string is accepted for cases where Facebook gates content behind a login wall, but it is entirely optional.


What data can you extract?

GroupFields
πŸ“ Postid, legacyId, url, text, time, inputUrl
πŸ‘€ Authoruser.id, user.name
❀️ ReactionslikesCount (total), reactionLikeCount (πŸ‘), reactionLoveCount (❀️), topReactionsCount
πŸ’¬ EngagementcommentsCount, sharesCount, feedbackId
🧡 Top commentstopComments[] β€” text, likesCount, threadingDepth
πŸ–ΌοΈ Attachmentsattachments[] β€” image.uri, image.width, image.height, id, thumbnail, ocrText, owner and album/media-set links
🏷️ GroupgroupTitle, facebookId, facebookUrl, pageAdLibrary

Why teams scrape Facebook groups

For product and market research

Community posts describe problems before they reach a support ticket or a review. Because reaction types are separated, you can tell polite acknowledgement (πŸ‘) from genuine enthusiasm (❀️) β€” a distinction that a single "likes" number hides completely.

For lead generation

Posts asking for recommendations are buying intent in plain language. Every row carries the author's name and ID plus a working permalink, so an intent search converts directly into a follow-up list.

For buy/sell and marketplace-style groups

The CHRONOLOGICAL_LISTINGS sort exists specifically for groups where people post listings rather than discussion. Combined with a short date cut-off, it becomes a live feed of new offers in a local community.

For brand and competitor monitoring

Seeing your product mentioned inside a community is the highest-signal social listening there is β€” these are unprompted opinions, not survey answers. topComments shows how the group reacted.

For content strategy and SEO

TOP_POSTS sorting ranks a community's content by what actually landed. The phrasing people use in high-engagement posts is the phrasing to use in your own content.


How to scrape a Facebook group step by step

  1. Open a public Facebook group and copy its URL.
  2. Paste it into Facebook Group URLs β€” one per line for several groups.
  3. Set Number of Posts to Scrape, or leave it empty to collect everything available.
  4. Pick a Post Sorting Strategy β€” CHRONOLOGICAL for monitoring, TOP_POSTS for the best content.
  5. Optionally set Posts Newer Than to bound the run by date.
  6. Click Start, then export the Output tab as JSON (recommended) or CSV.

⬇️ Input

Example input

{
"startUrls": ["https://www.facebook.com/groups/cheapmealideas/"],
"resultsLimit": 100,
"viewOption": "CHRONOLOGICAL",
"onlyPostsNewerThan": "30 days"
}

Input reference

FieldTypeDefaultDescription
startUrlsarrayβ€” (required)Public Facebook group URLs. Private groups require authentication and are not supported anonymously.
resultsLimitinteger10Maximum posts per group. Leave empty to collect all available posts.
viewOptionstringCHRONOLOGICALCHRONOLOGICAL (newest first), RECENT_ACTIVITY (most actively discussed), TOP_POSTS (highest engagement), CHRONOLOGICAL_LISTINGS (buy/sell groups).
onlyPostsNewerThanstringβ€”Stop when posts are older than this. Absolute (2026-01-15) or relative (7 days, 2 weeks, 1 month).
searchGroupKeywordstringβ€”Keyword filter inside the group. See the note below.
searchGroupYearstringβ€”Restrict to a year (e.g. 2026). Works best combined with a keyword.
proxyConfigurationobjectApify ResidentialResidential rotation with automatic retry. Recommended for anything at scale.
cookieStringstringβ€”Optional. A Facebook cookie header including at least c_user and xs, for content behind a login wall. Use a dedicated secondary account.

Be realistic about in-group search. Facebook's logged-out group search is heavily restricted, and full words frequently return nothing. The pattern that works is 1–2 letters plus a year filter. For precise topic filtering, it is almost always better to scrape broadly and filter the text column afterwards in your spreadsheet or code.

Sorting note: the post limit behaves most predictably with the chronological ("new posts") ordering.


⬆️ Output

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.

Field notes

  • likesCount is the total reaction count, while reactionLikeCount and reactionLoveCount break out the two most common types.
  • ocrText is Facebook's accessibility caption for an image β€” often a usable description of the picture's contents, which makes image posts searchable.
  • topComments returns up to 2 comments per post. It is context, not a full comment export.

Usage recipes

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 between runs.

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, then read the top 20 posts β€” that is your content brief.

Local buy/sell listings feed

{
"startUrls": ["https://www.facebook.com/groups/localbuysell/"],
"viewOption": "CHRONOLOGICAL_LISTINGS",
"onlyPostsNewerThan": "7 days",
"resultsLimit": 1000
}

Historical pull for one year

{
"startUrls": ["https://www.facebook.com/groups/yourniche/"],
"searchGroupKeyword": "a",
"searchGroupYear": "2025",
"resultsLimit": 500
}

Multi-group sweep

{
"startUrls": [
"https://www.facebook.com/groups/groupone/",
"https://www.facebook.com/groups/grouptwo/",
"https://www.facebook.com/groups/groupthree/"
],
"resultsLimit": 200,
"viewOption": "RECENT_ACTIVITY"
}

How does this compare to Facebook's Graph API?

The Graph API can read group content only for groups where an admin has installed your reviewed app. There is no approved route to reading an arbitrary public group you do not administer, and Facebook has narrowed those permissions repeatedly.

This Actor works from the public group feed that a logged-out visitor can read, which is why it needs no app, no review and no admin cooperation. In exchange it is bound by what Facebook renders publicly and by anti-automation defences β€” hence residential proxies and realistic expectations about depth.


Integrate and automate

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperforge/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"][:70])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperforge/facebook-groups-scraper').call({
startUrls: ['https://www.facebook.com/groups/cheapmealideas/'],
resultsLimit: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

REST API

curl -X POST "https://api.apify.com/v2/acts/scraperforge~facebook-groups-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls":["https://www.facebook.com/groups/cheapmealideas/"],"resultsLimit":100}'

n8n, Make, Zapier and AI agents

Call the Actor from n8n, Make, Zapier or an MCP-capable agent through Apify's integrations β€” for instance, an agent that reads new community posts each morning and summarises emerging themes.

Schedules and webhooks

Combine a Schedule with onlyPostsNewerThan for a continuous monitoring loop, and use webhooks or the Google Sheets / Airtable / Slack / Google Drive integrations to move results where your team works.


Pricing and what you are charged for

Pay-per-event: a small Actor-start charge plus a charge per post row delivered to your dataset. Comments and reactions ride inside the post row, so they do not add to the billed count.

Cost control: pair onlyPostsNewerThan with a schedule so recurring runs only pay for genuinely new posts.

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 without cookies. Private and closed groups require membership, and this Actor does not attempt to bypass that.
  • In-group keyword search is weak for logged-out sessions. Prefer scraping broadly and filtering text, or use the 1–2 letter plus year approach.
  • resultsLimit is per group, so five groups at 200 posts can produce 1,000 rows.
  • Facebook caps how far back a public feed can be paged. Very old posts may be unreachable regardless of your limit.
  • topComments returns up to 2 comments per post β€” use the dedicated comments Actor when you need full threads.
  • Media URIs expire. They point at Facebook's CDN; download assets promptly if you need the files.
  • If you supply 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.

This Actor collects publicly visible content from public Facebook groups β€” the same posts any logged-out visitor can read. It does not join groups, bypass privacy settings, or access private data.

Posts, comments and author names are personal data about identifiable people, and community discussions often touch on health, finances or family life. If you process this data, ensure you have a lawful basis under GDPR and comparable regimes, store only what you need, keep it secure, honour deletion requests, and do not reuse community conversations for unsolicited marketing. If you supply cookies, you are responsible for that account's use under Facebook's terms.


❓ Frequently asked questions

Do I need to log in?

No. The Actor runs anonymously on public groups. cookieString is optional and only helps when Facebook puts content behind a login wall.

Can it scrape private or closed groups?

Not anonymously. Only public group content is accessible without membership.

Does it return comments?

It returns up to two top comments per post with author, text, like count and threading depth, plus the total commentsCount. For complete comment threads and nested replies, use the dedicated comments Actor linked below.

What is CHRONOLOGICAL_LISTINGS for?

Buy/sell groups, where Facebook renders listings differently from ordinary discussion posts.

Why does keyword search return nothing?

Facebook's logged-out in-group search barely works with full words. Use one or two letters plus a year, or filter the exported text column instead.

What is the difference between likesCount and reactionLikeCount?

likesCount is the total across all reaction types; reactionLikeCount is only πŸ‘ and reactionLoveCount is only ❀️.

What is ocrText?

Facebook's accessibility caption for an attached image. It often describes the image contents, which makes image-heavy posts searchable by text.

How do I get only new posts each day?

Set onlyPostsNewerThan to 1 day and schedule the run.

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 format should I use?

JSON keeps user, topComments and attachments nested. CSV works if you only need text and engagement counts.


Browse the full collection on the ScraperForge profile.


πŸ’¬ Feedback

Need full comment threads, reaction-type breakdowns beyond like and love, or a custom monitoring pipeline? Open an issue on the Issues tab of this Actor.