Facebook Group Posts & Comments Scraper avatar

Facebook Group Posts & Comments Scraper

Pricing

from $1.19 / 1,000 group posts

Go to Apify Store
Facebook Group Posts & Comments Scraper

Facebook Group Posts & Comments Scraper

Scrape public Facebook group posts with comments and replies: text, author, date, reactions, shares, photos, Marketplace listing price and location, plus price, beds and phone read from listing posts.

Pricing

from $1.19 / 1,000 group posts

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Facebook Group Posts & Comments Scraper

Facebook Group Posts & Comments Scraper extracts posts, comments and replies from public Facebook groups without a login: post text, author, date, reactions by type, comment and share counts, photos, Marketplace listing details, and price, bedrooms and phone numbers read from listing posts, as JSON, CSV or Excel.

Add public group links and get every post with its full comment threads (replies included), keyword and date-range filters, Marketplace listing location and coordinates, and an "only new posts" mode for scheduled monitoring.

ParseBird Facebook Suite Β Β β€’Β Β Pages, posts, groups, reviews & media
Facebook User Posts Scraper
Posts from profiles and Pages
Facebook Page Video Downloader
Every video on a Page, MP4 links
Facebook Media Downloader
HD/SD links for videos, reels, photos
Facebook Public Group Posts Scraper
Group posts, reactions, photos
Facebook Group Profile Scraper
Members, activity, admins, rules
Facebook Page Reviews Scraper
Recommendations, tags, comments
Facebook Group Posts & Comments Scraper
You are here

Copy to your AI assistant

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

Apify Actor: parsebird/facebook-group-posts-comments-scraper. Scrapes posts and comments from public Facebook groups without login. Call via ApifyClient: client.actor("parsebird/facebook-group-posts-comments-scraper").call(run_input={"startUrls": [{"url": "https://www.facebook.com/groups/874728723021553"}], "maxItems": 50, "onlyPostsNewerThan": "30 days", "fetchAllComments": true}). Inputs: startUrls (array of {url}, public facebook.com/groups/<id or username> links, max 100 groups, required), maxItems (integer, posts per group, default 100, 0 = all), viewOption (string: CHRONOLOGICAL | RECENT_ACTIVITY | TOP_POSTS | CHRONOLOGICAL_LISTINGS; logged-out visitors usually get the group's default order, CHRONOLOGICAL_LISTINGS returns only for-sale posts of buy/sell groups), search (string, keep posts whose text contains it, case-insensitive, matched on the feed), onlyPostsNewerThan / onlyPostsOlderThan (string, date 2026-04-20, date-time, or period like "30 days", "1 month"), includeComments (boolean, comments Facebook already includes in the feed, free, often empty), fetchAllComments (boolean, load each commented post's top-level comments), includeCommentReplies (boolean, also load replies; implies fetchAllComments), maxCommentsPerPost (integer, default 100), enrichMarketplaceListings (boolean, open each Marketplace listing for title, location, latitude/longitude), monitoringMode (boolean, return only posts not delivered in earlier runs), proxy (object, default Apify residential). Output per post: facebookUrl, inputUrl, facebookId, groupTitle, url, legacyId, id, text, attachedStoryText (reshares), time, timeSource, user {id, name, url, profilePicture}, feedbackId, reactionsCount, topReactionsCount, reactionLikeCount, reactionLoveCount, reactionCareCount, reactionHahaCount, reactionWowCount, reactionSadCount, reactionAngryCount, likesCount, commentsCount, sharesCount, attachments [{type, id, url, thumbnail, width, height, description, download_urls}], photoCount, additionalPhotoCount, topComments [{commentId, id, text, threadingDepth, parentCommentId, date, profileId, profileName, profilePicture, profileUrl, commentUrl, reactionsCount, repliesCount}], Marketplace posts only: isMarketplaceListing, marketplaceListingId, marketplaceUrl, marketplacePrice, marketplaceIsSold, marketplaceIsLive, marketplaceIsPending, marketplaceTitle, marketplaceLocation, marketplaceLatitude, marketplaceLongitude; listing-like text only: parsedPrice, parsedPriceText, parsedPricePeriod, parsedBedrooms, parsedBathrooms, parsedSquareFeet, parsedSquareMeters, parsedPhone, parsedPhones; scrapedAt. Pricing: pay per post (result) plus additional-data events per loaded comment/reply, enriched listing, or already-seen post in monitoring mode. Full API spec: https://apify.com/parsebird/facebook-group-posts-comments-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What is Facebook Group Posts & Comments Scraper?

Public Facebook groups hold a lot of useful conversation: buy/sell and rental listings, local news, product questions, job leads and community feedback. Facebook Group Posts & Comments Scraper turns those groups into a clean dataset. Paste one or more group links, press Start, and get each post with its author, date, reactions, photos and, when you turn it on, every comment and reply Facebook shows to visitors.

It works as a Facebook group API alternative: there is no Facebook login, no cookies and no Graph API app to set up. Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.

What can Facebook Group Posts & Comments Scraper do?

  • 🧾 Scrape group posts in bulk. Up to 100 public groups per run, using group links with a numeric ID or a username, including m.facebook.com and web.facebook.com links.
  • πŸ’¬ Full comment threads. Load each post's comments with author, date, link and reply count, and optionally the replies under every comment, nested with threadingDepth and parentCommentId.
  • πŸ”Ž Keyword filter. Keep only posts that mention a word or phrase, such as condo or for rent.
  • πŸ“… Date ranges. Keep posts newer than, older than or between two dates. Relative periods like 30 days or 1 month work too.
  • 🏷️ Marketplace listings. Posts that come from Facebook Marketplace get the listing price and status, and optionally the listing title, location and map coordinates.
  • 🏠 Listing details from the text. On posts that read like a listing, the price (with rent period), bedrooms, bathrooms, floor area and phone numbers are pulled out of the author's own words into parsed* fields.
  • πŸ” Only new posts. Monitoring mode remembers what earlier runs delivered and returns only new posts, so scheduled runs give you a clean feed of what's new.
  • πŸ“… Scheduling and integrations. Run every hour or day with Apify Schedules, and send posts to Google Sheets, Slack, Zapier, Make or a webhook with Apify integrations.
  • πŸ”Œ API access. Start runs and read results from your own code with the Apify API.

What data can you extract from Facebook groups?

FieldDescription
groupTitle / facebookId / facebookUrlGroup name, numeric group ID and group link
url / legacyId / idPost link, numeric post ID and Facebook's story ID
text / attachedStoryTextPost text; for reshares, attachedStoryText holds the original post's text
time / timeSourceWhen the post was published (UTC) and where that time came from
userAuthor ID, name and profile picture
reactionsCount and reaction*CountTotal reactions and the count per type: like, love, care, haha, wow, sad, angry
commentsCount / sharesCountComment total (Facebook counts replies too) and shares
attachments / photoCount / additionalPhotoCountPhotos and videos with download links, the total number of photos on the post, and how many of those were not included in attachments
topCommentsComments and replies: text, author, date, comment link, reactions, reply count, depth
marketplace*Marketplace listing ID, link, price and sold/live/pending status; title, location and coordinates with enrichment
parsed*Price, rent period, bedrooms, bathrooms, square feet or meters, and phone numbers stated in the post text

time is null when Facebook doesn't send a publish time for a post. timeSource is story when the time comes from the post's own timestamp, unverified when it was found elsewhere in the post data, and unknown when there is none.

How to scrape Facebook group posts and comments

  1. Open Facebook Group Posts & Comments Scraper and click Try for free.
  2. Paste one or more public Facebook group URLs, for example https://www.facebook.com/groups/874728723021553.
  3. Set Max posts per group.
  4. Optionally add a keyword or a date range.
  5. Turn on Add all comments (and Add comment replies if you need whole threads), or Add Marketplace listing location for buy/sell groups.
  6. Click Start, then download the posts from the Output tab as JSON, CSV, Excel or HTML.

How much does it cost to scrape Facebook groups?

This scraper uses pay-per-event pricing. You pay for each post saved, and a smaller amount for each extra item of data you ask for. Compute and residential proxy costs are included in these prices.

EventFreeBronzeSilverGold
Result: post saved (result)$1.49 / 1,000$1.39 / 1,000$1.29 / 1,000$1.19 / 1,000
Additional data (additional-data)$0.99 / 1,000$0.89 / 1,000$0.89 / 1,000$0.79 / 1,000

Additional data is charged for:

  • each comment or reply loaded with Add all comments or Add comment replies;
  • each Marketplace listing enriched with Add Marketplace listing location;
  • each already-delivered post read again in monitoring mode, which is billed at this lower rate instead of as a result.

Comments from Add comments shown in the feed are free.

For example, on the Free plan 1,000 posts cost $1.49. 1,000 posts plus 5,000 loaded comments cost $1.49 + $4.95 = $6.44. Posts skipped by your keyword or date filters are not charged. Apify's free plan includes monthly platform credit you can use to try the scraper. Set a maximum cost per run in the run options and the scraper stops when it reaches it, without loading data it can't charge for.

Input

Add group links and options in the Input tab, or send JSON through the API.

ParameterTypeRequiredDefaultDescription
startUrlsarrayYesβ€”Public Facebook group links (max 100)
maxItemsintegerNo100Posts per group; 0 = all Facebook shows
viewOptionstringNoCHRONOLOGICALCHRONOLOGICAL, RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL_LISTINGS
searchstringNoβ€”Keep posts whose text contains this phrase
onlyPostsNewerThanstringNoβ€”Date, date-time or period (30 days)
onlyPostsOlderThanstringNoβ€”Date, date-time or period
includeCommentsbooleanNofalseComments Facebook includes in the feed (free, often empty)
fetchAllCommentsbooleanNofalseLoad each post's top-level comments
includeCommentRepliesbooleanNofalseAlso load replies (turns comment loading on)
maxCommentsPerPostintegerNo100Comments and replies per post
enrichMarketplaceListingsbooleanNofalseAdd listing title, location and coordinates
monitoringModebooleanNofalseReturn only posts not delivered in earlier runs
proxyobjectNoApify residentialProxy settings

Example: last 30 days with comments

{
"startUrls": [{ "url": "https://www.facebook.com/groups/874728723021553" }],
"onlyPostsNewerThan": "30 days",
"fetchAllComments": true,
"maxItems": 50
}

Example: a closed date range

{
"startUrls": [{ "url": "https://www.facebook.com/groups/developerkaki" }],
"onlyPostsNewerThan": "2026-10-01",
"onlyPostsOlderThan": "2026-10-08",
"maxItems": 500
}

Example: rental listings with Marketplace location

{
"startUrls": [{ "url": "https://www.facebook.com/groups/302792601187841" }],
"search": "condo",
"enrichMarketplaceListings": true,
"maxItems": 50
}

Output example

A post with comments loaded (text shortened, image links cut):

{
"facebookUrl": "https://www.facebook.com/groups/797518550594060",
"inputUrl": "https://www.facebook.com/groups/developerkaki",
"facebookId": "797518550594060",
"groupTitle": "Developer Kaki",
"url": "https://www.facebook.com/groups/developerkaki/posts/3004054629940430/",
"legacyId": "3004054629940430",
"id": "UzpfSTEwMDAwMTUyMTQ0OTIxNTpWSzozMDA0MDU0NjI5OTQwNDMw",
"text": "(Quoted from an absolutely BASED guy on LinkedIn)\n\nWe could remove 90% of software out there...",
"time": "2026-10-13T12:47:27.000Z",
"timeSource": "story",
"user": {
"id": "100001521449215",
"name": "Wan Ardie",
"url": null,
"profilePicture": "https://scontent.fkul15-1.fna.fbcdn.net/v/t39.30808-1/475653..."
},
"feedbackId": "ZmVlZGJhY2s6MzAwNDA1NDYyOTk0MDQzMA==",
"reactionsCount": 0,
"topReactionsCount": 0,
"reactionLikeCount": 0,
"reactionLoveCount": 0,
"reactionCareCount": 0,
"reactionHahaCount": 0,
"reactionWowCount": 0,
"reactionSadCount": 0,
"reactionAngryCount": 0,
"likesCount": 0,
"commentsCount": 1,
"sharesCount": 0,
"attachments": [],
"photoCount": 0,
"additionalPhotoCount": 0,
"topComments": [
{
"commentId": "3004075089938384",
"id": "Y29tbWVudDozMDA0MDU0NjI5OTQwNDMwXzMwMDQwNzUwODk5MzgzODQ=",
"text": "what would more software engineers do with less software? An oxymoron don't you think?...",
"threadingDepth": 0,
"parentCommentId": null,
"date": "2026-10-13T13:09:03.000Z",
"profileId": "pfbid0314ufFKmWAW8r8iCW2bkGuKZieJZPq28gpfsqzAEeEW5h7JXiKkTEtD8WZVAToYwTl",
"profileName": "Daryl Phuah",
"profilePicture": "https://scontent.fkul10-2.fna.fbcdn.net/v/t1.6435-1/29425038...",
"profileUrl": null,
"commentUrl": "https://www.facebook.com/groups/developerkaki/permalink/3004054629940430/?comment_id=3004075089938384",
"reactionsCount": 0,
"repliesCount": 0
}
],
"scrapedAt": "2026-10-13T13:14:06.000Z"
}

A Marketplace listing post with enrichment adds fields like these:

{
"groupTitle": "CEBU HOMES AND CONDO RENTALS",
"legacyId": "1677490737051347",
"isMarketplaceListing": true,
"marketplaceListingId": "1128172069647463",
"marketplaceUrl": "https://www.facebook.com/marketplace/item/1128172069647463/",
"marketplacePrice": "PHP6,500,000",
"marketplaceIsSold": false,
"marketplaceIsLive": true,
"marketplaceIsPending": false,
"marketplaceTitle": "5 beds 4 bathrooms – Flat",
"marketplaceLocation": "Lapu-Lapu City, PH-07",
"marketplaceLatitude": 10.312487830756,
"marketplaceLongitude": 123.94856929779
}

And a listing-like post gets the details stated in its text (illustrative example):

{
"text": "3bd/2ba brick ranch for sale by owner. Asking $245,000 OBO. 1,450 sqft. Call or text (336) 555-0142",
"parsedPrice": 245000,
"parsedPriceText": "$245,000",
"parsedPricePeriod": null,
"parsedBedrooms": 3,
"parsedBathrooms": 2,
"parsedSquareFeet": 1450,
"parsedSquareMeters": null,
"parsedPhone": "+13365550142",
"parsedPhones": ["+13365550142"]
}

Marketplace fields appear only on posts that come from a Marketplace listing, and parsed* fields only when the text states at least one of them. The Posts, Comments and Listings views in the Output tab show the most-used columns.

Use the Facebook Group Posts & Comments Scraper API

With the Apify API client for Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/facebook-group-posts-comments-scraper").call(run_input={
"startUrls": [{"url": "https://www.facebook.com/groups/874728723021553"}],
"onlyPostsNewerThan": "7 days",
"fetchAllComments": True,
"maxItems": 100,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["time"], post["user"]["name"], post["commentsCount"], len(post["topComments"]))

With the Apify API client for JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/facebook-group-posts-comments-scraper').call({
startUrls: [{ url: 'https://www.facebook.com/groups/302792601187841' }],
search: 'for rent',
enrichMarketplaceListings: true,
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((p) => console.log(p.parsedPrice, p.parsedPricePeriod, p.marketplaceLocation, p.url));

See the API tab for HTTP endpoints, including a single call that runs the scraper and returns the dataset.

Use cases

  • Real estate and rentals. Collect rental and for-sale listings from local groups with price, bedrooms, phone numbers and Marketplace location.
  • Community and brand monitoring. Track what people say about a product, place or company in public groups, including the comment threads.
  • Lead generation. Find people asking for services or recommendations in niche groups.
  • Market and sentiment research. Analyse discussions, reactions and replies over a date range.
  • Scheduled feeds. Combine monitoring mode with a schedule to get only new posts each day, sent to Slack or a sheet.

How it works

  1. The scraper looks up each group and reads its post feed the way a logged-out visitor sees it, three posts per page, newest first in most groups.
  2. Each post is checked against your date range and keyword, and posts outside them are skipped without charge.
  3. With comments turned on, it loads the comments (10 per request) and, with replies on, the replies under each comment.
  4. With Marketplace enrichment on, it opens each listing page for its title, location and coordinates.
  5. It reads listing details from the post text, saves the post and charges for it.

FAQ

Do I need a Facebook account or cookies? No. The scraper reads public groups the way a logged-out visitor sees them. Private groups can't be scraped; they are reported as failed in the run log.

Why doesn't topComments contain every comment? commentsCount is Facebook's total and includes replies. Turn on Add comment replies to get replies as well. Facebook also hides some comments from logged-out visitors: in our tests a post showing 15 comments returned 14. Add comments shown in the feed is often empty, because Facebook rarely includes comments in the group feed; use Add all comments for reliable results.

Does the sort option change the order? Facebook usually serves logged-out visitors the group's default order whatever you choose. The exception is CHRONOLOGICAL_LISTINGS (Listings only), which returns just the for-sale posts of buy/sell groups. When Facebook's listings feed is unavailable, the scraper reads the regular feed and keeps only the Marketplace listing posts, so you still get listings only.

How far back can I go? Facebook shows logged-out visitors a limited recent window of each group. If onlyPostsOlderThan is further back than the feed reaches, the run stops after reading about 360 posts and asks you to use a more recent date.

How does the keyword filter work? Facebook's group search requires a login, so the scraper reads the feed and keeps posts whose text contains your phrase. A rare keyword in a busy group means many posts are read to find matches, which takes longer. Narrow the date range to speed it up.

How does monitoring mode work? The scraper stores the IDs of posts it delivered for each group (the last 5,000) in a named key-value store in your account. The next run returns only posts not in that list that are newer than the posts it already delivered, and stops once it reaches them. Older posts that an earlier run skipped because of its post limit are not treated as new. Already-delivered posts read again are billed as additional data, not as results.

Can I export the data? Yes. Download it as JSON, CSV, Excel, XML or HTML from the Output tab, or read it through the Apify API.

Something doesn't work. What should I do? Open an issue on the Issues tab with your input and the run link.

This scraper collects only posts and comments that Facebook shows publicly to logged-out visitors. It does not log in or access private groups. Posts and comments contain personal data such as names and profile pictures, so make sure you have a lawful basis under the GDPR, CCPA or other laws that apply to you before storing or using it, and respect Facebook's terms. Read more in Apify's blog post on the legality of web scraping.

Other Facebook scrapers