# Facebook Group Profile Scraper (`parsebird/facebook-group-profile-scraper`) Actor

Scrape public Facebook group profiles from group URLs, usernames or IDs: name, description, member count and growth, posts per day and month, privacy, creation date, admins, moderators and rules. No login. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/facebook-group-profile-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 3 total users, 1 monthly users, 87.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.89 / 1,000 group profiles

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

### Facebook Group Profile Scraper

Facebook Group Profile Scraper reads the public profile of [Facebook](https://www.facebook.com) groups from their URL, username, or ID and returns the group's name, description, member count and recent growth, posts per day and month, privacy and visibility, creation date and history, admins, moderators, and rules.

<table><tr>
<td style="border-left:4px solid #1877F2;padding:12px 16px;font-weight:600">
Check hundreds of public or private Facebook groups by link, username, or ID and get one clean row per group with members, posting activity, admins, rules, tags, and location, ready for community research or lead lists, with no Facebook login.
</td>
</tr></table>

<br>

<table>
<tr>
<td colspan="3" style="padding:10px 14px;background:#1877F2;border:none;border-radius:4px 4px 0 0">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">ParseBird Facebook Suite</span>
<span style="color:#D8E6FD;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Pages, posts, groups, reviews &amp; media</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-user-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook User Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Posts from profiles and Pages</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-page-video-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Video Downloader</a><br>
<span style="color:#78716C;font-size:11px">Every video on a Page, MP4 links</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-media-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Media Downloader</a><br>
<span style="color:#78716C;font-size:11px">HD/SD links for videos, reels, photos</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Public Group Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Posts from public groups</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#E7F0FE">
<a href="https://apify.com/parsebird/facebook-group-profile-scraper" style="color:#1877F2;text-decoration:none;font-weight:700;font-size:13px">Facebook Group Profile Scraper</a><br>
<span style="color:#1877F2;font-size:11px;font-weight:600">You are here</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Reviews Scraper</a><br>
<span style="color:#78716C;font-size:11px">Recommendations, tags, comments</span>
</td>
</tr>
</table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```text
Use Apify Actor parsebird/facebook-group-profile-scraper to get the public profile of Facebook groups. Example with ApifyClient (Python): client.actor("parsebird/facebook-group-profile-scraper").call(run_input={"findGroupsBy":"url","groupUrls":[{"url":"https://www.facebook.com/groups/1010440649638729"}]}). Inputs: findGroupsBy string url | username | id (default url; picks which list is used, the others are ignored); groupUrls array of {url} objects (facebook.com/groups/... links, including About, members, and post pages, m.facebook.com links, and /share/g/ links); groupUsernames array of strings (group usernames without @); groupIds array of strings (numeric group IDs). Up to 500 groups per run; the same group entered twice is saved once. Output: one row per group: input, identity {groupId, name, url, username}, description, history {createdAt YYYY-MM-DD, summary}, postingActivity {postsPerDay, postsPerDayDisplay, postsPerMonth, postsPerMonthDisplay}, membership {memberCount, memberCountDisplay, recentMemberGrowth {count, period, display}}, visibility {privacy, privacyDescription, discoverability, discoverabilityDescription}, administrators [{name, profileUrl}], administratorCount, moderators [{name, profileUrl}], moderatorCount, rules [{title, text}], tags [string], locations [string]. Values Facebook doesn't show are left out. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.
```

### What is Facebook Group Profile Scraper?

**Facebook Group Profile Scraper** is a **Facebook groups scraper** that reads the public **About** section of a group, the same information anyone sees before joining. For each group you get the **name, username, and ID**, the **description**, **total members** and **new members in the last week**, **posts per day and per month**, whether the group is **public or private** and **visible or hidden**, the **creation date** and **name-change history**, the **admins and moderators** Facebook lists, the **group rules**, and the group's **tags and location**.

It works for **public and private groups**, because Facebook shows this profile to people who aren't members. You don't need a Facebook account, cookies, or an API key. The easiest way to try it is to open the actor, keep the prefilled group link, and click **Start**.

The actor reads group profiles only. It does not search for groups by keyword or collect posts, comments, or member lists.

### What can Facebook Group Profile Scraper do?

- 👥 **Check member counts and growth**: exact total members plus Facebook's "new members in the last week" figure.
- 📈 **Measure activity**: the number of posts in the last day and the last month.
- 🔒 **See privacy and visibility**: public or private, visible or hidden, with Facebook's explanation.
- 🛡️ **List admins and moderators** that Facebook shows on the About page, with profile links, plus the total counts.
- 📜 **Get the group rules** with titles and full text.
- 🗓️ **Get the group's history**: creation date and name changes.
- 🔗 **Use links, usernames, or IDs**: About, members, and post page links, `m.facebook.com` links, `/share/g/` links, usernames, and numeric IDs.
- ⏱️ **Automate** with [Apify schedules](https://docs.apify.com/platform/schedules), the [Apify API](https://docs.apify.com/api/v2), webhooks, and [integrations](https://apify.com/integrations) such as Google Sheets, Make, Zapier, and Slack.
- 📁 **Export** results as JSON, CSV, Excel, HTML, or XML.

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

| Field | Description |
|-------|-------------|
| `identity` | `groupId`, `name`, `url`, and `username` |
| `description` | The group's About text |
| `membership` | `memberCount`, `memberCountDisplay`, and `recentMemberGrowth` (`count`, `period`, `display`) |
| `postingActivity` | `postsPerDay` and `postsPerMonth`, plus the values as Facebook shows them |
| `visibility` | `privacy` (for example "Public group"), `discoverability` (for example "Visible"), and Facebook's descriptions |
| `history` | `createdAt` (YYYY-MM-DD) and the history `summary` |
| `administrators`, `moderators` | Names and profile links shown on the About page |
| `administratorCount`, `moderatorCount` | Total admins and moderators |
| `rules` | Rule `title` and `text` |
| `tags`, `locations` | Topic tags and locations set by the admins |
| `input` | The URL, username, or ID you entered |

### How to scrape Facebook group profiles

1. Open [Facebook Group Profile Scraper](https://apify.com/parsebird/facebook-group-profile-scraper) and click **Try for free** or **Start**.
2. In **Find groups by**, choose **Group URL**, **Group username**, or **Numeric group ID**.
3. Fill the matching list: **Group URLs**, **Group usernames**, or **Group IDs**. The other lists are ignored.
4. Click **Start**.
5. Open the **Output** tab, or export the results as JSON, CSV, or Excel.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `findGroupsBy` | string | **Yes** | `url` | `url`, `username`, or `id`; chooses which list is used |
| `groupUrls` | array of `{url}` objects | When `url` | — | Public group links |
| `groupUsernames` | array of strings | When `username` | — | Group usernames without @ |
| `groupIds` | array of strings | When `id` | — | Numeric group IDs, as full numbers |
| `proxyConfiguration` | object | No | — | Optional. The actor picks its own network route |

### Input / Output

**Example input**

```json
{
    "findGroupsBy": "username",
    "groupUsernames": ["developerkaki", "OFFROCASA"]
}
```

**Example output** (a real row; the description is shortened)

```json
{
  "input": "developerkaki",
  "identity": {
    "groupId": "797518550594060",
    "name": "Developer Kaki",
    "url": "https://www.facebook.com/groups/developerkaki/",
    "username": "developerkaki"
  },
  "description": "Developer Kaki's Mission:\n- To provide a space to share and discuss all things related to tech, development, freelance opportunities for developers of all levels ...",
  "history": {
    "createdAt": "2019-02-08",
    "summary": "Group created on February 8, 2019. Name last changed on February 8, 2019."
  },
  "postingActivity": {
    "postsPerDay": 4,
    "postsPerDayDisplay": "4",
    "postsPerMonth": 300,
    "postsPerMonthDisplay": "300"
  },
  "membership": {
    "memberCountDisplay": "80,334 total members",
    "memberCount": 80334,
    "recentMemberGrowth": {
      "display": "No new members in the last week",
      "period": "last week",
      "count": 0
    }
  },
  "visibility": {
    "privacy": "Public group",
    "privacyDescription": "Anyone can see who's in the group and what they post.",
    "discoverability": "Visible",
    "discoverabilityDescription": "Anyone can find this group."
  },
  "administrators": [
    { "name": "Developer Kaki", "profileUrl": "https://www.facebook.com/profile.php?id=100069516887271" },
    { "name": "Daren Tan", "profileUrl": "https://www.facebook.com/profile.php?id=1058493564" }
  ],
  "administratorCount": 6,
  "moderators": [
    { "name": "Dafuallah Esameldien", "profileUrl": "https://www.facebook.com/profile.php?id=100004017896324" }
  ],
  "moderatorCount": 4,
  "rules": [
    { "title": "No promotions or spam", "text": "Give more to this group than you take. Self-promotion, spam and irrelevant links aren't allowed." },
    { "title": "Include salary in job posting" }
  ],
  "tags": [],
  "locations": ["Kuala Lumpur, Malaysia"]
}
```

Download results from the **Output** tab in JSON, CSV, Excel, HTML, or XML.

### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("parsebird/facebook-group-profile-scraper").call(
    run_input={
        "findGroupsBy": "url",
        "groupUrls": [
            {"url": "https://www.facebook.com/groups/developerkaki"},
            {"url": "https://www.facebook.com/groups/1010440649638729"},
        ],
    }
)

for group in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(group["identity"]["name"], group.get("membership", {}).get("memberCount"), group.get("visibility", {}).get("privacy"))
```

### JavaScript API example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const run = await client.actor('parsebird/facebook-group-profile-scraper').call({
    findGroupsBy: 'id',
    groupIds: ['797518550594060', '506273379443089'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((g) => console.log(g.identity.name, g.membership?.memberCount, g.postingActivity?.postsPerMonth));
```

See the [Python client docs](https://docs.apify.com/api/client/python/) and [JavaScript client docs](https://docs.apify.com/api/client/js/) for more options.

### Use cases

- **Community research**: compare groups in a niche by size, growth, and posting activity before you join or advertise.
- **Marketing and partnerships**: find the admins of active groups to reach out about collaborations.
- **Lead lists**: enrich a list of group links with members, privacy, location, and tags.
- **Monitoring**: schedule weekly runs to track member growth and activity over time.
- **Moderation and compliance**: archive group rules and admin lists.

### How it works

1. The actor turns each input into a group address and opens the group's About page as a logged-out visitor.
2. It reads the profile data Facebook shows there and builds one row per group. Numbers such as "43,351 total members" are also returned as plain numbers.
3. The same group entered as a link and as an ID is saved once. Groups that can't be found are logged and skipped.

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

**What is the price per Facebook group?**

The actor uses pay-per-event pricing: you pay per group profile saved, and platform usage is included.

| Event | Free plan | Bronze | Silver | Gold |
|-------|-----------|--------|--------|------|
| `group-scraped` | $0.00249 (**$2.49 / 1,000**) | $0.00229 (**$2.29 / 1,000**) | $0.00209 (**$2.09 / 1,000**) | $0.00189 (**$1.89 / 1,000**) |

One `group-scraped` event is one group row in the dataset. Groups that fail are not charged, and a group entered twice is charged once. The prefilled one-group run costs about $0.0025 on the Free plan, and 1,000 groups cost $2.49. Apify's free plan includes monthly platform credits you can use to try the actor.

### Is it legal to scrape Facebook groups?

**Is scraping Facebook group profiles legal?**

The actor only reads the group profile that Facebook shows to anyone without logging in. Scraping public data is generally legal in many jurisdictions, but admin and moderator names are personal data covered by laws such as GDPR and CCPA. Have a legitimate reason to collect the data, respect [Facebook's Terms](https://www.facebook.com/terms.php), and consult your lawyer if unsure. Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other Facebook scrapers and related Actors

| Actor | Best for |
|-------|----------|
| [Facebook User Posts Scraper](https://apify.com/parsebird/facebook-user-posts-scraper) | Posts from Facebook profiles and Pages |
| [Facebook Page Video Downloader](https://apify.com/parsebird/facebook-page-video-downloader) | Every video from a Page with MP4 links |
| [Facebook Media Downloader](https://apify.com/parsebird/facebook-media-downloader) | HD and SD links for videos, reels, and photos |
| [Reddit Subreddit Posts Scraper](https://apify.com/parsebird/reddit-subreddit-posts-scraper) | Posts and comments from Reddit communities |
| [Threads Search Scraper](https://apify.com/parsebird/threads-search-scraper) | Threads posts by keyword |

### FAQ

**Does it work for private groups?**
Yes. Facebook shows the About page of private groups to non-members, so you get the name, description, members, activity, privacy, history, and any admins and rules that Facebook lists there. Groups that Facebook doesn't show to logged-out visitors, and groups that don't exist or were removed, fail with "isn't available" and aren't charged.

**Why are only some admins listed?**
Facebook shows a short list of admins and moderators on the About page. `administrators` and `moderators` contain that list, and `administratorCount` and `moderatorCount` give the totals.

**Why do some admins have no `profileUrl`?**
For some people Facebook only exposes a scrambled ID instead of a profile number or link. The name is still included, and `profileUrl` is left out.

**How exact are the numbers?**
`memberCount` comes from Facebook's exact "total members" text, and the posting numbers are the counts Facebook shows for the last day and month. Each number also has a `...Display` field with Facebook's original text.

**Which inputs work?**
In URL mode: `facebook.com/groups/<username or ID>` links, including links that end in `/about`, `/members`, or a post, `m.facebook.com` links, and `/share/g/` links. Usernames work with or without @. IDs must be the full number. Values that don't match the selected mode are skipped with a message in the log.

**Can it find groups by keyword or scrape group posts?**
No. This actor reads group profiles from links, usernames, or IDs you provide.

**Can I run it on a schedule or from my app?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules), call it from the [API tab](https://apify.com/parsebird/facebook-group-profile-scraper/api), or connect it to Make, Zapier, Google Sheets, or Slack through [integrations](https://apify.com/integrations).

**Where can I report issues?**
Open the **Issues** tab on the actor page with your input and run ID.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/facebook-group-profile-scraper/changelog.md

# Actor input Schema

## `findGroupsBy` (type: `string`):

Choose which list to use: group URLs, group usernames, or numeric group IDs. The other lists are ignored.

## `groupUrls` (type: `array`):

Add public group links such as https://www.facebook.com/groups/OFFROCASA or https://www.facebook.com/groups/1010440649638729. Links to a group's About, members, or post pages and /share/g/ links also work. Used when 'Find groups by' is 'Group URL'.

## `groupUsernames` (type: `array`):

Add group usernames without @, for example OFFROCASA. Used when 'Find groups by' is 'Group username'.

## `groupIds` (type: `array`):

Add numeric group IDs as full numbers, for example 506273379443089. Used when 'Find groups by' is 'Numeric group ID'.

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

No proxy setup is needed. The actor picks its own network route and switches to Apify Proxy when Facebook limits requests.

## Actor input object example

```json
{
  "findGroupsBy": "url",
  "groupUrls": [
    {
      "url": "https://www.facebook.com/groups/1010440649638729"
    }
  ]
}
```

# Actor output Schema

## `dataset` (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 = {
    "findGroupsBy": "url",
    "groupUrls": [
        {
            "url": "https://www.facebook.com/groups/1010440649638729"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/facebook-group-profile-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 = {
    "findGroupsBy": "url",
    "groupUrls": [{ "url": "https://www.facebook.com/groups/1010440649638729" }],
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/facebook-group-profile-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 '{
  "findGroupsBy": "url",
  "groupUrls": [
    {
      "url": "https://www.facebook.com/groups/1010440649638729"
    }
  ]
}' |
apify call parsebird/facebook-group-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/facebook-group-profile-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/FEaomALDN2ZClcIG8/builds/GjmgKNsGJGpwhcY8Q/openapi.json
