# Facebook Groups Scraper - Public Group Posts & Reactions (`socialscrapers/facebook-groups-scraper`) Actor

Facebook groups scraper: posts from public Facebook groups with text, date, author, reactions, comments and shares counts, photos, videos, links, group name and member count. Whole feeds or a date range; export to JSON, CSV, Excel or via API. No login, no cookies. $0.60 per 1,000 posts.

- **URL**: https://apify.com/socialscrapers/facebook-groups-scraper.md
- **Developed by:** [Social Scrapers](https://apify.com/socialscrapers) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 90.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 1,000 posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

This **Facebook Groups Scraper** extracts posts from public Facebook groups: the text, when it was posted, the author, reactions, comments and shares counts, photos, videos and shared links, plus the group's name and member count. Read the newest posts or a group's whole feed, keep only posts newer than a date, and download clean data as JSON, CSV or Excel. **No Facebook account, no login, no cookies.** It costs **$0.60 per 1,000 posts**.

### What does Facebook Groups Scraper do?

- 👥 **Public group feeds, newest first**: give it group URLs and it reads each group's posts from the most recent backwards.
- ♾️ **As deep as you need**: a set number of posts per group, or every post the feed lists (`maxPostsPerGroup: 0`).
- 📅 **Date filter**: keep only posts newer than a date (`2026-01-31`, `31/01/2026`, `Jan 31 2026`) or an age (`7 days`, `2w`, `3 months`, `yesterday`); reading stops once the feed goes past it.
- 📊 **Engagement and media**: reactions, comments and shares counts, photos and videos with Facebook's own alt text, shared links and re-shared posts.
- 🏷️ **Group details on every post**: group id, name, link and member count.
- 🔗 **Any group reference**: a full group URL, a link to any post inside the group, or (through the API) just the group's numeric id or vanity name.
- 🔒 **Private groups are skipped**: they are reported in the log, produce no output and cost nothing.
- 💸 **Pay only for posts delivered**: the run stops cleanly at the spending limit you set.

Because it runs on the Apify platform, you also get the API, scheduling, integrations, monitoring and proxy rotation without writing any code.

### What data can you extract from Facebook groups?

One dataset item per post. Every field is always present: `null` (or an empty list) means Facebook shows nothing for it.

| Field | Type | Description |
|---|---|---|
| `postId` | string | Numeric post id. |
| `url` | string | Permalink of the post. |
| `text` | string | Post text; empty for a photo or link shared without a caption. |
| `time` | string or null | When it was posted, ISO 8601 in UTC. |
| `author` | object or null | `id`, `name`, `url` (profile link, when Facebook shows one) and `isAnonymous` (posted as "Anonymous participant"). |
| `group` | object | `id`, `name`, `url` and `membersCount` of the group. |
| `likesCount` | integer | All reactions (Like, Love, Haha, ...). |
| `commentsCount` | integer | Number of comments. |
| `sharesCount` | integer | Number of shares. |
| `media` | array | Attached photos, videos and link previews: `type` (`photo`, `video`, `link`, ...), `url`, `imageUrl` and `altText` (Facebook's automatic image description). |
| `linkTitle` | string or null | Title of the shared link, if the post shares one. |
| `sharedPost` | object or null | When the post shares another post: its `text`, `url` and `author`. |
| `inputUrl` | string | The `startUrls` entry this post came from. |

### How to scrape Facebook groups

1. Click **Try for free** (or **Start**) on this page.
2. In **Facebook group URLs**, add public groups such as `https://www.facebook.com/groups/1006060197306320/`, one per line.
3. Set **Max posts per group** (for example `200`, or `0` for the whole feed) and, if you like, **Only posts newer than** (for example `30 days`).
4. Click **Start**. Groups are read side by side; 150 posts of a group take about 2 minutes.
5. Download the posts from the **Output** tab as JSON, CSV, Excel or HTML, or read them through the API.

### How much does it cost to scrape Facebook groups?

**$0.60 per 1,000 posts**, platform usage and proxies included. You pay one `post` event for each post saved, nothing else:

| Your Apify plan | Price per 1,000 posts |
|---|---|
| Free and Starter (Bronze) | $0.60 |
| Scale (Silver) | $0.54 (−10%) |
| Business (Gold) | $0.48 (−20%) |

Two examples:

- **The latest 100 posts of 20 groups** = 2,000 posts = **$1.20**.
- **One busy group's last 10,000 posts** = **$6.00**.

Private, missing or unreadable groups produce no posts and cost nothing. To cap a run's cost, set **Maximum cost per run** in the run options: the scraper stops cleanly once it is reached and keeps everything scraped so far. Apify's free plan comes with monthly usage credit, enough to try this scraper on thousands of posts.

### Input example

```json
{
  "startUrls": [
    { "url": "https://www.facebook.com/groups/1006060197306320/" },
    { "url": "https://www.facebook.com/groups/285178551618642/" }
  ],
  "maxPostsPerGroup": 200,
  "onlyPostsNewerThan": "30 days",
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

| Field | Type | Description |
|---|---|---|
| `startUrls` | array, required | Public groups: `https://www.facebook.com/groups/<name-or-id>`, a link to a post in the group, or a share link from the Facebook app (`https://www.facebook.com/share/g/…`, `fb.me/…`). Through the API, plain strings, numeric group ids and vanity names work too. |
| `maxPostsPerGroup` | integer, default `100` | How many posts to read from each group, newest first. `0` = every post the feed lists. |
| `onlyPostsNewerThan` | string, optional | Skip older posts. A date (`2026-01-31`, `2026-1-31`, `31/01/2026`, `Jan 31 2026`; midnight UTC), an ISO date-time (`2026-01-31T18:00:00Z`), or an age: `7 days`, `2w`, `3 months`, `1 year`, `yesterday`. With both day and month 12 or less (`01/02/2026`) the date is read month/day/year. |
| `proxyConfiguration` | object, default Apify Proxy `RESIDENTIAL` | Proxy settings. Keep the residential default. |

### Output example

A real post from the public Hardy Geraniums group, with the author's name and ids replaced by placeholders and image links shortened:

```json
{
  "postId": "4093813627421763",
  "url": "https://www.facebook.com/groups/285178551618642/permalink/4093813627421763/",
  "text": "Amazing to still see geraniums flowering in early November. I guess that will all change when we get some frost but there has been non here yet. Have you had any in your area?",
  "time": "2026-11-06T21:10:01.000Z",
  "author": {
    "id": "<author-id>",
    "name": "<author name>",
    "url": "https://www.facebook.com/<author-profile>",
    "isAnonymous": false
  },
  "group": {
    "id": "285178551618642",
    "name": "Hardy Geraniums",
    "url": "https://www.facebook.com/groups/285178551618642/",
    "membersCount": 18200
  },
  "likesCount": 90,
  "commentsCount": 13,
  "sharesCount": 1,
  "media": [
    {
      "type": "photo",
      "url": null,
      "imageUrl": "https://scontent.xx.fbcdn.net/v/…/887946124_1573089684854073_5393627511227627996_n.jpg",
      "altText": "No photo description available."
    },
    {
      "type": "photo",
      "url": null,
      "imageUrl": "https://scontent.xx.fbcdn.net/v/…/895065021_1573089721520736_6630069767649236959_n.jpg",
      "altText": "May be an image of Lewisia and geranium"
    }
  ],
  "linkTitle": null,
  "sharedPost": null,
  "inputUrl": "https://www.facebook.com/groups/285178551618642/"
}
```

### Use cases

- **Community research**: see what members of a niche ask about, recommend and complain about.
- **Brand and product monitoring**: track mentions of products, services or topics in public groups.
- **Lead and market research**: find the questions and needs people post in industry, local and hobby groups.
- **Trend tracking**: follow how often a topic comes up over weeks or months, with exact post times.
- **Engagement analysis**: compare which posts draw the most reactions, comments and shares.
- **Text datasets**: collect real-world posts for sentiment analysis, topic modelling or classification.

### Use Facebook Groups Scraper via API, Python, JavaScript and integrations

Run the scraper from your own code with the [Apify API](https://docs.apify.com/api/v2) or an Apify client:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY-APIFY-TOKEN' });
const run = await client.actor('socialscrapers/facebook-groups-scraper').call({
    startUrls: [{ url: 'https://www.facebook.com/groups/1006060197306320/' }],
    maxPostsPerGroup: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

```python
from apify_client import ApifyClient

client = ApifyClient("MY-APIFY-TOKEN")
run = client.actor("socialscrapers/facebook-groups-scraper").call(
    run_input={"startUrls": [{"url": "https://www.facebook.com/groups/1006060197306320/"}], "maxPostsPerGroup": 200}
)
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["time"], post["likesCount"], post["text"][:80])
```

- **Schedules**: collect new posts every day with an Apify schedule and `onlyPostsNewerThan: "1 day"`.
- **Integrations**: send the posts to Google Sheets, Slack, Airtable, Make, Zapier or n8n, or trigger your own webhook when a run finishes.
- **AI agents**: call the scraper as a tool through the Apify MCP server.

### Limits

- **Public groups only.** Private groups are skipped (and not charged). The scraper never logs in.
- **What a logged-out visitor sees.** Some authors show without a numeric id or profile link; their `id` is then an opaque id that can change over time.
- **No comment texts.** You get each post's comment count, not the comments themselves. No member lists either.
- **You choose the groups.** The scraper does not search for or discover groups. Share links from the Facebook app (`https://www.facebook.com/share/g/…`, `fb.me/…`, a shared group post) are followed to their group, at no charge.
- **Residential proxy required.** Facebook rarely shows group pages to data-center IP addresses, so keep the default Apify Proxy `RESIDENTIAL` setting.
- **Image links expire.** `imageUrl` points to Facebook's CDN, which expires links after a while; download images promptly if you need them.

### FAQ

#### Is it legal to scrape Facebook groups?

This scraper only reads public groups, the way Facebook shows them to anyone who isn't logged in. Posts can still contain personal data, which laws such as the GDPR protect, so collect only what you need for a legitimate purpose. Apify explains the basics in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

#### Do I need a Facebook account or cookies?

No. Facebook Groups Scraper reads only what Facebook shows to visitors who are not logged in, so no account of yours is ever at risk.

#### Can it scrape private groups?

No. Private groups are detected, logged and skipped, with no output and no charge.

#### Why did my run finish with no posts?

Facebook showed nothing public for that group: it is private, shows its posts only to logged-in visitors, or no longer exists; or Facebook refused the requests even after 5 attempts on fresh IPs. The run still ends **Succeeded**, its status message says which, and nothing is charged. Only a run of 3 or more groups that Facebook refused entirely ends **Failed**, because that means the scraper itself is being blocked.

#### How many posts can I scrape from one group?

As many as its feed lists: set `maxPostsPerGroup` to `0`. The newest 29 posts arrive in one request and older ones 3 at a time, so a whole feed takes longer than recent posts.

#### Why did I get fewer posts than `maxPostsPerGroup`?

The group has fewer posts, the date limit in `onlyPostsNewerThan` was reached, or the run hit its maximum total charge. The run log says which, for each group.

#### Does `likesCount` count only Likes?

It counts all reactions (Like, Love, Care, Haha, Wow, Sad, Angry), the number Facebook shows under the post.

#### Can I run it on a schedule or from my own code?

Yes. Use Apify schedules, the Apify API and client libraries, webhooks, or integrations such as Make, Zapier or n8n.

### Other scrapers by Social Scrapers

| Scraper | What it gets |
|---|---|
| [Facebook Posts Scraper](https://apify.com/socialscrapers/facebook-profile-posts-scraper) | Posts from Facebook profiles and Pages |
| [Facebook Pages Scraper](https://apify.com/socialscrapers/facebook-profile-scraper) | Public details of Facebook Pages and profiles: contact info, address, rating |
| [Facebook Ads Library Scraper](https://apify.com/socialscrapers/facebook-ads-library-scraper) | Ads from Meta's public Ad Library |
| [Instagram Profile Scraper](https://apify.com/socialscrapers/instagram-profile-scraper) | Instagram profiles and their latest posts |
| [Instagram Post Scraper](https://apify.com/socialscrapers/instagram-post-scraper) | Instagram posts, reels and comments |
| [Threads Scraper](https://apify.com/socialscrapers/threads-scraper) | Threads profiles, posts and replies |
| [X (Twitter) Profile Scraper](https://apify.com/socialscrapers/x-profile-scraper) | X profiles: bio, followers, counts |
| [Reddit Scraper](https://apify.com/socialscrapers/reddit-scraper) | Reddit posts, comments, users and search |
| [Quora Scraper](https://apify.com/socialscrapers/quora-scraper) | Quora questions, answers and profiles |
| [YouTube Scraper](https://apify.com/socialscrapers/youtube-scraper) | YouTube videos, channels, search and comments |
| [YouTube Transcript Scraper](https://apify.com/socialscrapers/youtube-transcript-scraper) | Transcripts and captions of YouTube videos |
| [LinkedIn Jobs Scraper](https://apify.com/socialscrapers/linkedin-jobs-scraper) | LinkedIn job listings |

# Actor input Schema

## `startUrls` (type: `array`):

Public groups to scrape, e.g. <code>https://www.facebook.com/groups/\<name-or-id></code>. Links to a post inside a group work too, and so do share links from the Facebook app (<code>https://www.facebook.com/share/g/…</code>, <code>fb.me/…</code>). Through the API you can also pass just the group's numeric id or vanity name. Private groups are detected, skipped and never charged.

## `maxPostsPerGroup` (type: `integer`):

How many posts to read from each group, newest first, for example 200. 0 = every post the group's feed lists. A group stops earlier if its feed ends or the date limit below is reached.

## `onlyPostsNewerThan` (type: `string`):

Skip posts older than this. Pick a date or an age, or type one: a date (<code>2026-01-31</code>, <code>31/01/2026</code>, <code>Jan 31 2026</code>; a UTC day), an ISO date-time through the API (<code>2026-01-31T18:00:00Z</code>), or an age such as <code>7 days</code>, <code>2w</code>, <code>3 months</code> or <code>yesterday</code>. Leave empty for no limit.

## `proxyConfiguration` (type: `object`):

Apify Proxy RESIDENTIAL (the default) is strongly recommended: Facebook rarely shows group pages to data-center IP addresses. Apify Proxy without the RESIDENTIAL group is switched to RESIDENTIAL (your country is kept), because Facebook turns datacenter IPs away; residential traffic is included in the price.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/groups/1006060197306320/"
    }
  ],
  "maxPostsPerGroup": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.facebook.com/groups/1006060197306320/"
        }
    ],
    "maxPostsPerGroup": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialscrapers/facebook-groups-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.facebook.com/groups/1006060197306320/" }],
    "maxPostsPerGroup": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("socialscrapers/facebook-groups-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.facebook.com/groups/1006060197306320/"
    }
  ],
  "maxPostsPerGroup": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call socialscrapers/facebook-groups-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialscrapers/facebook-groups-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aY1qPedGdiHJQCDVN/builds/dlFGsY1Zt08f5OiWZ/openapi.json
