# Facebook Group Posts Scraper - Public Groups (`swerve/fb-group-scraper`) Actor

Scrape Facebook group posts.

- **URL**: https://apify.com/swerve/fb-group-scraper.md
- **Developed by:** [Swerve](https://apify.com/swerve) (community)
- **Categories:** AI, Lead generation
- **Stats:** 6 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Facebook Group Posts Scraper

Extract posts from **public Facebook groups** — no login, no cookies, no API token needed. Just provide group URLs and get structured post data.

### What makes this scraper different?

| Feature | This Scraper | Other Scrapers |
|---|---|---|
| **Images** | All images per post (avg 4) | First image only or none |
| **Posts per group** | Up to 50 (cursor pagination) | 3-5 per group |
| **Speed** | Parallel scraping (3 groups at once) | Sequential |
| **Login required** | No | No |
| **Private groups** | Optional (with cookies) | Not supported |

### Use Cases

- **Real estate companies** harvesting apartment-for-rent posts from local FB housing groups to build listing feeds competitors don't have
- **Market researchers** tracking brand mentions, sentiment, and trending topics across niche hobbyist and industry communities
- **Recruiting teams** monitoring jobs-wanted and jobs-offered groups to source passive candidates in tech, design, and trades
- **E-commerce sellers** scanning buy/sell/swap groups for product demand signals, price benchmarks, and resale opportunities
- **Journalists and OSINT analysts** archiving public posts with full image sets for reporting, fact-checking, and event reconstruction
- **Community managers** benchmarking engagement (likes, comments, shares) on competing groups to sharpen their own content strategy

### What data can you extract?

| Field | Description |
|---|---|
| `text` | Full post text content |
| `url` | Direct permalink to the post |
| `time` | ISO 8601 timestamp |
| `user` | Author info: `{ id, name }` |
| `imageUrl` | First image URL (convenience) |
| `images` | All image URLs from the post |
| `likesCount` | Total reactions (likes, love, etc.) |
| `commentsCount` | Number of comments |
| `sharesCount` | Number of shares |
| `facebookUrl` | Source group URL |
| `groupTitle` | Group name |

### How to use

1. Create a free Apify account
2. Open this scraper
3. Add one or more public Facebook group URLs
4. Set how many posts you want per group (default: 10)
5. Click **Start** and wait for results
6. Download in JSON, CSV, Excel, or HTML

### Input example

```json
{
  "startUrls": [
    { "url": "https://www.facebook.com/groups/webscrapingandautomation" },
    { "url": "https://www.facebook.com/groups/selftaughtprogrammers" }
  ],
  "maxPostsPerGroup": 10,
  "resultsLimit": 100
}
````

### Output example

```json
{
  "text": "Looking for a 2-bedroom apartment in downtown...",
  "url": "https://www.facebook.com/groups/123456/posts/789012/",
  "time": "2026-04-19T13:24:48.000Z",
  "facebookUrl": "https://www.facebook.com/groups/123456",
  "groupTitle": "Apartments for Rent",
  "user": {
    "id": "1751460557",
    "name": "John Smith"
  },
  "imageUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/photo1.jpg",
  "images": [
    "https://scontent.xx.fbcdn.net/v/t39.30808-6/photo1.jpg",
    "https://scontent.xx.fbcdn.net/v/t39.30808-6/photo2.jpg",
    "https://scontent.xx.fbcdn.net/v/t39.30808-6/photo3.jpg"
  ],
  "likesCount": 5,
  "commentsCount": 12,
  "sharesCount": 2
}
```

### Input options

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | required | List of Facebook group URLs to scrape |
| `maxPostsPerGroup` | number | 10 | Max posts to extract per group (uses pagination) |
| `resultsLimit` | number | 100 | Total max posts across all groups |
| `cookies` | string | empty | Optional Facebook cookies for private group access |
| `proxyCountry` | string | US | Proxy country code (use group's country for best results) |

### How it works

This scraper uses Facebook's internal GraphQL API to extract structured post data. It:

1. Fetches the public group page to obtain CSRF tokens (no login needed)
2. Calls Facebook's GraphQL endpoint with cursor pagination
3. Parses the structured response to extract post data, images, and engagement metrics
4. Processes multiple groups in parallel for speed

All requests go through Apify residential proxies — no risk of IP blocking.

### Private groups

By default, this scraper works with **public groups only**. If you need to scrape private groups, you can provide Facebook session cookies in the `cookies` input field. Get them from your browser's DevTools (Application > Cookies > facebook.com).

### Pricing

This scraper uses Apify's pay-per-result pricing. You only pay for the posts you extract — no wasted compute on empty pages or failed requests.

### FAQ

**Q: Do I need a Facebook account?**
No. This scraper works without login for public groups.

**Q: How many posts can I get per group?**
Up to 50 per group using cursor pagination. Default is 10.

**Q: Can I scrape private groups?**
Yes, if you provide valid Facebook session cookies. Without cookies, only public groups are accessible.

**Q: Will my IP get blocked?**
No. All requests go through Apify's residential proxy network, which rotates IPs automatically.

**Q: What languages are supported?**
All languages. The scraper extracts raw text content regardless of language.

### Integrations

Export data via API, webhooks, or integrate with:

- Google Sheets, Slack, Zapier, Make
- Python & Node.js SDKs
- Any app via Apify API

### Keywords

Facebook group scraper, Facebook posts API, FB group data extractor, Facebook public groups scraper, social media monitoring, Facebook group posts, scrape Facebook without login, FB group content export, Facebook OSINT tool, social listening Facebook, Facebook group analytics, Facebook community data

# Actor input Schema

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

List of public Facebook group URLs to scrape (e.g. https://www.facebook.com/groups/123456789)

## `resultsLimit` (type: `integer`):

Maximum total posts to extract across all groups. Set 0 for unlimited.

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

Maximum posts to extract from each group. Uses cursor pagination to fetch more than the initial page.

## `cookies` (type: `string`):

Optional. Facebook session cookies for private group access. Leave empty for public groups (recommended).

## `proxyCountry` (type: `string`):

Country code for residential proxy. Use the country where the group is based for best results.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/groups/webscrapingandautomation"
    }
  ],
  "resultsLimit": 100,
  "maxPostsPerGroup": 10,
  "proxyCountry": "US"
}
```

# 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/webscrapingandautomation"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("swerve/fb-group-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/webscrapingandautomation" }] }

# Run the Actor and wait for it to finish
run = client.actor("swerve/fb-group-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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/webscrapingandautomation"
    }
  ]
}' |
apify call swerve/fb-group-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=swerve/fb-group-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Group Posts Scraper - Public Groups",
        "description": "Scrape Facebook group posts.",
        "version": "1.0",
        "x-build-id": "pxCwjYDAZoNeHgqFW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/swerve~fb-group-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-swerve-fb-group-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/swerve~fb-group-scraper/runs": {
            "post": {
                "operationId": "runs-sync-swerve-fb-group-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/swerve~fb-group-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-swerve-fb-group-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Group URLs",
                        "type": "array",
                        "description": "List of public Facebook group URLs to scrape (e.g. https://www.facebook.com/groups/123456789)",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "resultsLimit": {
                        "title": "Total Results Limit",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum total posts to extract across all groups. Set 0 for unlimited.",
                        "default": 100
                    },
                    "maxPostsPerGroup": {
                        "title": "Max Posts Per Group",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum posts to extract from each group. Uses cursor pagination to fetch more than the initial page.",
                        "default": 10
                    },
                    "cookies": {
                        "title": "Facebook Cookies (optional)",
                        "type": "string",
                        "description": "Optional. Facebook session cookies for private group access. Leave empty for public groups (recommended)."
                    },
                    "proxyCountry": {
                        "title": "Proxy Country",
                        "type": "string",
                        "description": "Country code for residential proxy. Use the country where the group is based for best results.",
                        "default": "US"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
