# Facebook Group Posts Scraper (`piotrv1001/facebook-group-posts-scraper`) Actor

Scrape posts from public Facebook groups without login: text, date, author, reactions by type, comment and share counts, photos, videos and shared links. Date filter, many groups per run. Export Facebook group posts to CSV, Excel or JSON for monitoring and leads.

- **URL**: https://apify.com/piotrv1001/facebook-group-posts-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.

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

### 👥 Facebook Group Scraper

Scrape **the posts of any public Facebook group**, newest first, with no login, no cookies and no Graph API token. The **Facebook Group Posts Scraper** returns each post's text, exact date, author, reactions (with the breakdown by type), comment and share counts, photos, videos and shared links, plus the group's name and ID. Paste many group URLs in one run and export the Facebook group posts to JSON, CSV or Excel. Use it as a Facebook group extractor for community monitoring, market research, lead generation and AI datasets.

### 🎯 Use Cases

- **Scrape Facebook groups for market research**: see what a niche community asks, recommends and complains about, week by week.
- **Facebook group monitoring**: run it daily with a "Posted after" date and get only the new posts of the groups you follow.
- **Lead generation**: find people asking for a product or service ("looking for a plumber in…", "any recommendations for…") in local and industry groups.
- **Brand and competitor mentions**: collect group posts that talk about your brand or your competitors and send them to a sentiment or AI pipeline.
- **Content research**: see which posts in a group get the most reactions and comments.

### ✨ Features

- **Group feed, newest first**: public posts of a group, page after page, months back.
- **Authors**: name, ID and profile link of each poster (the profile link is empty for anonymous posts and for people who hide it).
- **Engagement data**: reactions total and per type (Like, Love, Haha, Wow, Sad, Angry, Care), comments and shares.
- **Media**: photo URLs, video URLs with thumbnail and duration, every photo of an album post, and shared link cards.
- **Date filter**: only posts published after a date (`2026-10-01`) or in a relative window (`7 days`).
- **Bulk groups**: many groups per run, each with its own post limit; duplicate inputs are merged and every post is saved once.
- **Fair billing**: private groups and groups that don't exist are listed in the status message and not charged.

### 🛠️ How It Works

1. **Enter Facebook groups**: `https://www.facebook.com/groups/874728723021553/`, `facebook.com/groups/javascriptdevelopers` or just the ID, one per line.
2. **Set the limit**: 50 posts per group by default, and optionally a "Posted after" date.
3. **Run the scraper**: download the posts as JSON, CSV or Excel, or get them through the API.

### ⚙️ Input

| Field | What it does |
| --- | --- |
| **Facebook groups** | Public group URLs, slugs or numeric IDs, one per line. |
| **Max posts per group** | Stop after this many posts from each group (newest first). Default 50. |
| **Posted after** | Only posts published on or after this date, e.g. `2026-10-01` or `7 days`. Optional. |

```json
{
    "groups": ["https://www.facebook.com/groups/874728723021553/", "javascriptdevelopers"],
    "maxItems": 200,
    "postedAfter": "7 days"
}
```

### 💰 Pricing

You pay per post saved, with no monthly rental.

| Event | Price | What you get |
| --- | --- | --- |
| **Post** | $0.004 per post ($4 per 1,000) | One group post with all the fields below |
| **Actor start** | $0.00005 per run | Charged once when the run starts |

Examples: 100 posts cost $0.40 and 1,000 posts cost $4. Private groups, missing groups and posts outside the "Posted after" window are not charged.

### 📊 Sample Output Data

```json
{
    "id": "2644743309353410",
    "url": "https://www.facebook.com/groups/874728723021553/posts/2644743309353410/",
    "text": "Let's welcome our new members!\nอะไร หว่า,\nMwanaa Mwelu,\nIB Sana, …",
    "createdAt": "2026-10-20T19:53:22.000Z",
    "reactions": 3,
    "topReactions": [
        { "name": "Like", "count": 2 },
        { "name": "Love", "count": 1 }
    ],
    "comments": 1,
    "shares": 0,
    "videoViews": null,
    "mediaType": "Photo",
    "media": [
        {
            "type": "Photo",
            "id": "1582561890567005",
            "url": "https://www.facebook.com/photo.php?fbid=1582561890567005&set=gm.2644743309353410&type=3",
            "imageUrl": "https://scontent.fjai2-4.fna.fbcdn.net/v/t39.30808-6/859781770_1582561897233671_3067528044177873425_n.jpg?…",
            "videoUrl": null,
            "durationMs": null
        }
    ],
    "link": null,
    "author": { "name": "AllMath", "id": "100064396285921", "url": "https://www.facebook.com/AllMathSocial" },
    "groupId": "874728723021553",
    "groupName": "Maths Formulas",
    "groupUrl": "https://www.facebook.com/groups/874728723021553/",
    "inputGroup": "874728723021553",
    "scrapedAt": "2026-10-21T14:25:58.449Z"
}
```

`mediaType` is `Photo`, `Video`, `Link`, `Text` or `Other`. A shared article fills `link` (URL, title, description, source, image) instead of `media`. `inputGroup` is the group you entered, so rows from several groups are easy to split.

### ⏰ Schedule and Integrate

For group monitoring, run it once a day with "Posted after" set to `1 day` (or `7 days` weekly) and you get only the new posts. Set it up with Apify **Schedules**, and send the results to Google Sheets, Zapier, Make, n8n or your own webhook through the Apify integrations.

### 🤖 Use with AI Agents (MCP)

The scraper works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{ "groups": ["https://www.facebook.com/groups/874728723021553/"], "maxItems": 30, "postedAfter": "7 days" }
```

### ❓ FAQ

**Does Facebook have an official API for group posts?** Not for groups you don't run. Meta deprecated the Groups API in 2024, and it only ever covered groups where the app was installed by an admin. This scraper reads the posts any logged-out visitor sees in a public group, with no key, app review or token.

**Do I need to join the group or log in?** No. It works on public groups only. Private groups show their posts to members only, so they are reported as "private group" and not charged.

**How far back does it go?** Months: in our tests we read 300 posts of a 5.5M-member group, back seven months, without reaching the end of the feed. Set "Max posts per group" high and use "Posted after" to stop at a date. Deep runs take a while (about a minute per 50 posts).

**Can I export Facebook group posts to Excel or CSV?** Yes. Every run's dataset downloads as CSV, Excel, JSON or XML, or through the Apify API.

**Are comments included?** The comment count is. For the comment text, feed the post URLs into the [Facebook Comments Scraper](https://apify.com/piotrv1001/facebook-comments-scraper).

**Why is `author.url` empty on some posts?** Anonymous posts and members who hide their profile have no public link; the name is still there ("Anonymous participant" for anonymous posts).

**How long do the image and video links work?** Facebook's media links expire after a few days, so download the files you need soon after the run.

### 🔗 More Facebook Actors

- [Facebook Comments Scraper](https://apify.com/piotrv1001/facebook-comments-scraper): the comments and replies of any public post, including group posts.
- [Facebook Posts Scraper](https://apify.com/piotrv1001/facebook-posts-scraper): the posts of public pages with engagement counts.
- [Facebook Pages Scraper](https://apify.com/piotrv1001/facebook-pages-scraper): page profile, followers, contact details and rating.
- [Facebook Ads Library Scraper](https://apify.com/piotrv1001/facebook-ads-library-scraper): ads from Meta's Ad Library by keyword.

# Actor input Schema

## `groups` (type: `array`):

Public Facebook group URLs or IDs, one per line, e.g. `https://www.facebook.com/groups/874728723021553/` or `javascriptdevelopers`. Public groups only; private groups need a membership and are skipped (not charged).

## `maxItems` (type: `integer`):

Stop after this many posts from each group (newest first).

## `postedAfter` (type: `string`):

Only posts published on or after this date, e.g. `2026-10-01` or `30 days`. Leave empty for the newest posts up to the limit.

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

Connection settings. Keep the default.

## Actor input object example

```json
{
  "groups": [
    "https://www.facebook.com/groups/874728723021553/",
    "javascriptdevelopers"
  ],
  "maxItems": 50,
  "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 = {
    "groups": [
        "https://www.facebook.com/groups/874728723021553/"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/facebook-group-posts-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 = {
    "groups": ["https://www.facebook.com/groups/874728723021553/"],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/facebook-group-posts-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 '{
  "groups": [
    "https://www.facebook.com/groups/874728723021553/"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/facebook-group-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/facebook-group-posts-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/1ea6exk3gF3RcF3Z3/builds/YSBFwdRjdmkK0Vgh1/openapi.json
