Apify actor · whoareyouanas/facebook-group-scraper

Facebook Group & Page Scraper - Posts, Comments & Reactions

Export posts from Facebook groups and Pages with text, reactions, supported comments, media references, author information, and optional entity metadata. A run can mix several group and Page sources.

Documentation checked 2026-10-29 · deployed build 0.1.16 · run through your Apify account

01 / Overview

Match the actor to the job.

Groups and Pages

Use one startUrls list for public groups, brand Pages, creator Pages, and other supported feeds.

More post context

Include comments, media, and group or Page details when the source exposes them.

Repeatable collection

Control run size, date cutoff, concurrency, and request timeouts for saved tasks or API calls.

02 / Input

Start with a clear, bounded input.

startUrls is required. Set maxPosts deliberately and choose whether comments, media, and entity information are needed. Private-group workflows require valid user-supplied cookies and existing access.

input.json · example based on the deployed schema
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/groups/1280379818654162"
    }
  ],
  "maxPosts": 10,
  "includeComments": true,
  "includeGroupInfo": true
}

Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.

Deployed actor input fields, types, defaults, and descriptions
FieldType / requiredDefaultPurpose
startUrlsarrayRequiredNot specifiedURLs of Facebook groups OR Pages to scrape. Group example: https://www.facebook.com/groups/123456789 — Page example: https://www.facebook.com/ohpollyfashion. You can mix groups and Pages in the same run.
maxPostsinteger100Maximum number of posts to scrape per group or Page. The scraper will stop scrolling once this limit is reached. Set to a lower value for faster runs.

Minimum: 1 · Maximum: 10000

viewOptionstring"RECENT_ACTIVITY"How posts should be sorted when scraping the feed.

Options: RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL

onlyPostsNewerThanstringNot specifiedOnly scrape posts published after this date. Use ISO 8601 format (e.g. 2024-01-01 or 2024-06-15T00:00:00Z). Leave empty to scrape all posts up to maxPosts limit.
includeCommentsbooleanfalseWhether to scrape top-level comments for each post. Disabled by default to keep runs faster and cheaper; enable it when you need richer data.
includeGroupInfobooleantrueWhether to scrape entity metadata. For groups: name, description, member count, privacy status, admins, rules. For Pages: name, description, follower count, like count, page category, verified status, cover photo.
All other input controls (7)
Deployed actor input fields, types, defaults, and descriptions
FieldType / requiredDefaultPurpose
includeMediabooleanfalseWhether to include image/video URLs in output and allow browser media downloads while scraping. Disable this to reduce residential proxy bandwidth usage; text, post metadata, reactions, and counts will still be scraped where available.
cookiesarrayNot specifiedPaste your Facebook cookies as a JSON array to access private/closed groups or login-walled Pages. Export the full facebook.com cookie set from your logged-in browser for best reliability. At minimum, include 'c_user' and 'xs'; companion cookies such as 'fr', 'datr', 'sb', and 'wd' are recommended.
maxConcurrencyinteger1Number of browser tabs to run in parallel. Keep at 1 for stability. Increase to 2-3 only if you need faster scraping and have sufficient memory. Higher values increase memory usage.

Minimum: 1 · Maximum: 5

requestHandlerTimeoutSecsinteger600Maximum time in seconds to spend scraping a single group or Page. Targets with many posts need longer timeouts. Default of 600 seconds (10 minutes) handles most cases.

Minimum: 60 · Maximum: 1200

minResultsPerMinuteinteger20Stops slow targets after the grace period when result velocity is below this value. This protects pay-per-result margins on blocked or low-yield pages. Set to 0 to disable.

Minimum: 0 · Maximum: 1000

costGuardGracePeriodSecsinteger120How long each target can run before the minimum-results-per-minute guard is enforced.

Minimum: 30 · Maximum: 1200

proxyUrlstringNot specifiedAdd your Apify Proxy URL for reliable scraping. Format: http://groups-RESIDENTIAL:[email protected]:8000. Get your token from Apify Console. External proxies (BrightData, Oxylabs) also work.

03 / Output

Know what each returned row represents.

Illustrative output shape · not a live run
{
  "postId": "1234567890",
  "postUrl": "https://www.facebook.com/ohpollyfashion/posts/1234567890",
  "groupName": "Oh Polly",
  "groupUrl": "https://www.facebook.com/ohpollyfashion",
  "pageName": "Oh Polly",
  "pageUrl": "https://www.facebook.com/ohpollyfashion",
  "authorName": "Oh Polly",
  "authorProfileUrl": "https://www.facebook.com/ohpollyfashion",
  "authorId": "100044215834928",
  "text": "New collection drops Friday. Tap for the lookbook.",
  "postType": "photo",
  "timestamp": "2026-03-28T14:30:00.000Z",
  "formattedDate": "2h",
  "likesCount": 980,
  "lovesCount": 220,
  "hahaCount": 12,
  "wowCount": 18,
  "sadCount": 2,
  "angryCount": 0,
  "totalReactions": 1232,
  "commentsCount": 56,
  "sharesCount": 12,
  "images": [
    "https://scontent.fbcdn.net/.../dress_1.jpg",
    "https://scontent.fbcdn.net/.../dress_2.jpg"
  ],
  "videos": [],
  "topComments": [
    {
      "authorName": "Jane Smith",
      "authorProfileUrl": "https://www.facebook.com/janesmith",
      "text": "Need this immediately!",
      "timestamp": "2026-03-28T14:42:00.000Z",
      "likesCount": 4
    }
  ],
  "source": "facebook_page",
  "scrapeDate": "2026-03-28T16:00:00.000Z"
}

Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.

Fields in the documented output view

postId

Post ID

postUrl

Post URL

groupName

Group / Page Name

groupUrl

Group / Page URL

authorName

Author Name

authorProfileUrl

Author Profile URL

authorId

Author ID

text

Text

postType

Post Type

timestamp

Timestamp

formattedDate

Formatted Date

likesCount

Likes

lovesCount

Loves

hahaCount

Haha

wowCount

Wow

sadCount

Sad

angryCount

Angry

totalReactions

Total Reactions

commentsCount

Comments

sharesCount

Shares

images

Images

videos

Videos

topComments

Top Comments

source

Source

scrapeDate

Scrape Date

Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.

Dataset links and run artifacts (2)
Overview
Overview of all scraped posts with key metrics and details
All Posts (Full Data)
Complete dataset with all fields including metadata, comments, and optional media URLs

04 / Pricing

Understand the billable unit.

These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.

Actor event prices and billing units
Billable eventRate (USD)When it applies

Post Scraped

apify-default-dataset-item

$0.01 / event

One scraped Facebook group post with text, reactions, comments, and metadata

$10.00 per 1,000 of this event. Other events and separate services are additional.

Actor Start

apify-actor-start

$0.00005 / event

Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).

Start units depend on allocated memory: one event per GB, with at least one event.

  • Each configured dataset-item event is billed at the live rate below, with an additional memory-based start event.
  • Limit the post count and review a small sample before scaling across several feeds.

A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.

05 / API & automation

Use the same input from your workflow.

Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.

cURL · start an asynchronous actor run
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
  'https://api.apify.com/v2/acts/whoareyouanas~facebook-group-scraper/runs' \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header 'Content-Type: application/json' \
  --data @input.json

The response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.

Coverage & interpretation

Check the result before relying on it.

Questions

Before you build an integration.

What do I need to provide?

startUrls is required. Set maxPosts deliberately and choose whether comments, media, and entity information are needed. Private-group workflows require valid user-supplied cookies and existing access.

What should I check in the output?
  • Post rows contain source links, text, author data, timestamps, reactions, and supported comments.
  • Optional group or Page metadata is also documented in key-value storage. A displayed comment count does not prove every comment body was retrieved.
How do I budget the run?
  • Each configured dataset-item event is billed at the live rate below, with an additional memory-based start event.
  • Limit the post count and review a small sample before scaling across several feeds.

Keep exploring

Practical guides for the next step.