Facebook Groups Scraper: Posts of Public Groups
Pricing
from $0.67 / 1,000 posts
Facebook Groups Scraper: Posts of Public Groups
Facebook groups scraper, no login: a public group's feed by New posts, Newest activity, Most relevant or Buy and sell, with keyword and date filters. Rows hold author, reactions by type, top comments, photos, listing price and place, plus a group row with members. CSV, Excel, API; pay per post.
Pricing
from $0.67 / 1,000 posts
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Facebook Groups Scraper: Posts of Public Groups
Facebook groups scraper for public groups, with no login, no cookies and no Facebook account: give group URLs, group ids or group names and get each group's posts newest first (or by newest activity, most relevant, or buy and sell listings only), as many as you ask for, inside a date window you choose. Every row carries the post's text, author name, time, reactions by type, comment and share counts, photos and videos with their links, link previews, a buy and sell post's price and place, and the comments Facebook shows with the post. Pay per post and per group read, posts from $0.67 per 1,000.
Built for community and brand monitoring, lead and deal finding in buy and sell groups, market research, social listening and AI data sets, and for scheduled runs in n8n, Make or Zapier. Name a memory and schedule the run: each run then delivers and bills only the posts it has not delivered before, and a group with nothing new is checked with one page of its newest posts and costs only its Group event. Rows carry what Facebook shows a visitor who is not logged in; use them under the rules that apply to you.
At a glance
- Four feed orders: New posts (strictly newest first, back through the group's history), Newest activity, Most relevant (Facebook's ranking) and Buy and sell listings.
- Date window and keywords: posts on or after and on or before a date (to the minute, UTC, or "7 days", "24 hours"), words to keep and words to leave out, matched as whole words in any language.
- Buy and sell posts: the listing Facebook attaches (title, price as shown, amount and currency, place, sold flag), and the price, rent period, bedrooms, bathrooms and floor area the seller wrote in the text (common English phrasing).
- A group row per group: name, id, link, privacy, the member count Facebook shows, description and places.
- Each post billed once per run, and once per memory name across runs. A group that does not exist or is private is a free status row that keeps your input, and every group gets a free coverage row with a cursor to go on from.
- Personal data off by default: people's profile ids and links and the
phonesandemailslists stay empty unless you turn them on. Every text (posts, comments, descriptions) is delivered exactly as Facebook serves it.
Quick start
- Open the Actor and paste group URLs (
https://www.facebook.com/groups/selftaughtprogrammers/), group ids (387875758242831) or group names (selftaughtprogrammers) into Facebook groups, one per line, up to 200 a run. - Set Posts per group (the form starts at 10; 20 when the field is left out; up to 100,000) and pick an Order. Add a date window or keywords if you like.
- Run, then download the rows from the Output tab (views Posts, Groups and Comments) as JSON, CSV or Excel, or read them through the API.
- For a monitor: give a Memory name and schedule the run (see "Monitor groups for new posts" below).
An input without any group ({}) runs a sample: the 10 newest posts of the Self-Taught Programmers group (or as many as its post count says). Its other values are checked like any input, and it is a paid run like any other.
What you get
One post row per post (type: "post"). The fill rates count 884 distinct posts of 30 public groups (programming, cooking, cars, plants, sports fans, deals, rentals and buy and sell groups in several languages) read in the 29 test runs of 2026-10-14 that delivered posts with personal data off (23 runs of matrix r1 on build 0.1.2, 6 of matrix r2 on build 0.1.3); the one run with personal data on is left out.
| Field | What it holds | Filled |
|---|---|---|
postId, url, createdAt, createdAtUnix | The post's id, its link in the group and its creation time (UTC) | 100% |
groupId, groupName, groupUrl | The group on every row | 100% |
text | The post's text in full, exactly as Facebook serves it, line breaks kept | 66.4% of all posts, 91.8% of posts that are not shares (most shares carry no words of their own) |
postType | photo, album, video, reel, link, event, share, listing, text or unavailable_attachment | 100% |
authorName, authorType | The author's display name and kind (person, page or anonymous for a group's anonymous participants) | 100% (21 anonymous) |
authorId, authorUrl | A person's profile id and link (personal data on), a page's always | empty for persons with personal data off |
reactionCount, reactions | All reactions, and each type (like, love, care, haha, wow, sad, angry); the types add up to the total on every post measured | 100%; the breakdown on 370 of 370 posts with a reaction |
commentCount, shareCount | Comments and shares as Facebook counts them | 100% |
topComments | The one or two comments Facebook shows with the post: commentId, text, createdAt, authorName, reactionCount, replyCount, commentUrl | 217 of 237 posts with comments (91.6%) |
media, mediaCount, mediaListed, additionalMediaCount | Photos and videos: imageUrl, videoUrl (HD) and videoUrlSd, width, height, durationSeconds, altText (Facebook's own picture description); how many items the post holds and how many the feed lists | 441 of 441 photo, album and video posts; imageUrl, size and altText on 1,558 of 1,558 photos; 122 of 235 albums hold more items than the feed lists |
videoViewCount, videoDurationSeconds | On videos | 15 of 15 videos |
link | A link preview: url, title, description, domain, imageUrl | 10 of 10 link posts |
sharedPost | A share's original post: postId, url, authorName, createdAt (text is empty: the group's feed does not show it to a visitor) | 264 of 264 shares (createdAt read from the share since the fourth test build) |
listing | A buy and sell post's listing: listingId, title, priceText, price, currency, isSold, isOnMarketplace, locationText, marketplaceUrl | 99 of 99 listing posts; price and currency on 96 (a price Facebook writes as text only stays in priceText) |
listingFactsFromText | What a seller or landlord wrote, in common English phrasing: price, priceText, currency, pricePeriod, bedrooms, bathrooms, squareFeet, squareMeters (null when the text states none) | 181 posts (20.5%), a price on 110 |
hashtags, mentions, taggedPeopleCount, isTaggedPost | Hashtags in the text; tagged pages and people (a person's id and link with personal data on); how many people the post tags | hashtags 9.6%, mentions 0.8% (where the text has them) |
event | An event post's event: name, when, place, url, canceled | where present (none among the posts measured) |
listingDetails, transcript, albumComplete, albumExpanded | The add-ons below; albumComplete says whether media holds every item of the post | add-ons only |
phones, emails | Phone numbers and e-mail addresses written in the post, as lists (personal data on) | empty with personal data off; 161 posts had a phone number in their text, 9 an e-mail address |
sortOrder, storyId, feedbackId, input, scrapedAt | The order the post was read in, Facebook's own story and feedback ids, the input value that led to the row, the time of the run | 100% |
The group row
One group row per group read in a run (type: "group", the Group event), measured on 30 groups: groupId, name, url, privacy ("Public group"), privacySentence, membersText ("373.8K members") and membersRounded (373800) on 30 of 30; description on 27; locations (the places the group names) on 13; vanity (the group's name in its link) when you gave the group by that name. The same group given twice in one run (an id and a name) is read once; the second form gets a coverage row with stopReason: "already_read".
Comment rows (add-on)
With All comments on, one comment row per comment (type: "comment", the Comment event), oldest first, replies too with Replies too: commentId, postId, postUrl, groupId, groupName, parentCommentId, threadCommentId, depth, text, language, createdAt, authorName, authorIsPostAuthor, authorBadges, reactionCount, reactions, replyCount, attachments (photos, videos, GIFs, stickers, links), isEdited, mentions, commentUrl. Up to 50 per post when Comments per post is left out.
Coverage, status and summary rows (free)
- Coverage (
type: "coverage"), one per group:postsRead,postsDelivered,postsCharged,known(already in your memory or your list of ids),filtered,outsideWindow,repeated,newestPostAt,oldestPostAt,reachedEndOfFeed,orderServed,stopReason(max_posts_per_group,end_of_feed,window_start_reached,rest_already_handled,group_not_found,group_private,max_posts,charge_limit,work_allowance,rate_limitedand others),complete,nextCursor(the cursor Go on from a cursor takes: it starts at the page of the first post read and not delivered) andresumeFromStart(true when that page is the group's first page: run the group again without a cursor). - Status (
type: "status"):group_not_found,group_private,lookup_failed(a call Facebook did not answer; run it again later),post_link_not_readandnot_a_group(links to one post, a page, a profile, an event or Marketplace),invalid,skipped(groups not started because the run stopped),memory_free,memory_full,addon_unavailable,comments_incomplete(the posts whose comments could not all be read). A group link Facebook would not read as typed (a port, a "." or ".." segment, an escaped character, an unknown or repeated parameter) refuses the input, free, with oneinvalidrow. - Summary (
type: "summary"), the last row: every counter, the requests made, the work allowance, the memory and the billing the platform confirmed.
Example post row
A buy and sell post of a rentals group (the author's name replaced here; four of the five listed photos, the empty video, link, event and shared post fields and the story ids left out; the image link shortened):
{"type": "post","postId": "1678467010287053","url": "https://www.facebook.com/groups/302792601187841/posts/1678467010287053/","groupId": "302792601187841","groupName": "CEBU HOMES AND CONDO RENTALS","groupUrl": "https://www.facebook.com/groups/302792601187841/","createdAt": "2026-10-14T12:07:06.000Z","createdAtUnix": 1791979626,"text": "For rent❗️👍\n1 Bedroom Unit, Fully furnished\nAvida Towers, Tower 1, 17th Floor\nAcross Sugbo Mercado, IT Park Lahug\n30k/month inclusive of condo dues\n\nPlease message me for viewing","hashtags": [],"mentions": [],"taggedPeopleCount": 0,"isTaggedPost": false,"postType": "listing","authorName": "Member Name","authorId": null,"authorUrl": null,"authorType": "person","reactionCount": 0,"reactions": null,"commentCount": 0,"shareCount": 0,"media": [{"type": "photo","id": "122128463031282049","url": "https://www.facebook.com/photo.php?fbid=122128463031282049&set=gm.1678467000287054&type=3","imageUrl": "https://scontent-phl2-1.xx.fbcdn.net/v/t39.30808-6/846705019_..._n.jpg?...","width": 1350,"height": 1800,"altText": "May be an image of indoors and bedroom"}],"mediaCount": 8,"mediaListed": 5,"additionalMediaCount": 3,"listing": {"listingId": "1134937465643000","title": "Avida Towers It Park 1bedroom condo for rent","priceText": "PHP30,000","price": 30000,"currency": "PHP","isSold": false,"isOnMarketplace": false,"locationText": "Mandaue City, PH-07","marketplaceUrl": null,"sellerName": null,"sellerId": null},"listingFactsFromText": { "price": null, "priceText": null, "currency": null, "pricePeriod": null, "bedrooms": 1, "bathrooms": null, "squareFeet": null, "squareMeters": null },"phones": null,"emails": null,"topComments": [],"sortOrder": "newest","input": "https://www.facebook.com/groups/302792601187841/","scrapedAt": "2026-10-14T12:12:37.240Z"}
How fast and how deep
Measured on Apify runs of 2026-10-17 on the released build: 300 posts of one group in 142 seconds, each delivered once; 268 posts of a rentals group inside a two day window in 88 seconds; 100 posts of one group in 40 seconds; 30 groups read for their newest post each in 78 seconds, a monitor of 30 groups with nothing new in 95 seconds (57 seconds with 5 groups at once); 10 groups of 10 posts in 45 seconds with 3 groups at once; the prefill in 9 seconds. Groups are read through Apify residential exits, one after another or up to 5 at once (maxConcurrency), in 256 MB of memory (peak 76 MB).
How much does it cost to scrape Facebook groups?
Pay per event: you pay for the posts and groups delivered, never for a group that does not exist or is private, a call that failed, a repeat or a post your memory already holds.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Post (post), per 1,000 posts | $0.94 | $0.86 | $0.78 | $0.67 |
Group (group), per 1,000 groups | $4.90 | $4.50 | $4.10 | $3.50 |
Listing post (listing_post), per 1,000, added to a buy and sell post | $1.26 | $1.15 | $1.04 | $0.90 |
Tagged post (tagged_post), per 1,000, added to a post that tags 50 or more people | $4.90 | $4.50 | $4.00 | $3.50 |
Filtered post (filtered_post), per 1,000, a post read and left out by your filters | $1.26 | $1.15 | $1.04 | $0.90 |
Comment (comment), per 1,000 comments, add-on | $0.27 | $0.24 | $0.22 | $0.19 |
Listing detail (listing_details), per 1,000, add-on | $2.00 | $1.80 | $1.60 | $1.40 |
Transcript (transcript), per 1,000, add-on | $1.40 | $1.30 | $1.10 | $1.00 |
Complete album (complete_album), per 1,000, add-on | $0.42 | $0.38 | $0.35 | $0.30 |
Actor start (apify-actor-start), once per run | $0.013 | $0.013 | $0.013 | $0.013 |
Platinum and Diamond plans pay the Gold price. There is no discount on the Actor start event. The Store pricing card shows these same prices per 1,000 events: "$0.67 / 1,000" on the Post row means one post costs about seven hundredths of a cent on the Gold plan, and "$3.50 / 1,000" on the Group row means one group read costs about a third of a cent.
- Group is charged once per group per run, new posts or not (a monitor run pays it for every group it checks). A group that does not exist or is private, and a group whose walk failed before any post was delivered, are not charged.
- Listing post and Tagged post ride on the Post event of the same post: a buy and sell post weighs about two and a half times a plain post on the wire, and a post that tags 50 or more people about eight times.
- Filtered post is charged only when you set a filter (keywords, words to leave out, a date window): each post read and left out by it costs one, once per post (once per memory name across runs), and no row is delivered for it. That covers posts without your words, posts with words you leave out, and posts newer than Posted before that the walk reads past. Posts your memory knows, repeats and the older post that ends a New posts walk at the window's start are free; under the other orders the window's start only filters, so older posts read past it are Filtered posts too.
- The add-on events are charged only when you turn the add-on on and it adds something: a Listing detail only when Facebook shows the listing's details, a Transcript only for a video with captions, a Complete album only when the post's photo set adds items.
Worked examples, start fee included: the prefill (10 posts of one group) costs $0.013 + $0.0049 + 10 x $0.00094 = $0.0273 on the Free plan and $0.0232 on the Gold plan; 1,000 plain posts of one group cost $0.013 + $0.0049 + $0.94 = $0.9579 on the Free plan and $0.013 + $0.0035 + $0.67 = $0.6865 on the Gold plan; a scheduled monitor of 20 groups with nothing new costs $0.013 + 20 x $0.0049 = $0.111 on the Free plan and $0.013 + 20 x $0.0035 = $0.083 on the Gold plan; 100 buy and sell posts of one group cost $0.013 + $0.0035 + 100 x ($0.00067 + $0.0009) = $0.1735 on the Gold plan.
The work allowance
Work that earns nothing (groups that do not exist, refused calls, long stretches of known, left out or older posts before a new one) is bounded by an allowance in real cost that grows with every event the run bills. A run of many groups that do not exist stops after a handful of them, with a free skipped row for the rest. A walk that reads many posts in a row that bill little or nothing can stop with work_allowance in its coverage row, after the rows already delivered, each charged once, and nothing else; start the next run from that group, or narrow its window. In a run of several groups, a group whose reading earns nothing (posts your memory already knows, refused calls) stops at its share with group_share_of_allowance, so the other groups are always read; a later run reads on. The add-ons (listing details, transcripts, complete albums) read from a small allowance of their own that grows with the add-on events billed: add-on reads that fail never stop the walk of posts, and when that allowance is spent the add-on stops for the rest of the run with a free addon_unavailable row while the posts keep coming.
Input
| Field | What it does | Default |
|---|---|---|
groups | Group URLs, group ids or group names, one per line, up to 200. A link with ?sorting_setting= keeps that order for its group; a group's own search link (facebook.com/groups/<group>/search/?q=word) keeps only the posts with that word. Also read: startUrls (with { "url": ... } objects), groupUrls, urls, groupIds. | none (the form starts with one group) |
sortOrder | newest, recent_activity, relevant or buy_and_sell. Also read: viewOption, sortingOrder, sortType, with Facebook's own names (CHRONOLOGICAL, RECENT_ACTIVITY, TOP_POSTS, CHRONOLOGICAL_LISTINGS). | newest |
maxPostsPerGroup | How many posts of each group are read in the chosen order, up to 100,000. Known and left out posts count toward it. Also read: resultsLimit, postsPerGroup. | 20 (the form starts at 10) |
maxPosts | A cap of post rows for the whole run, across every group. Also read: maxItems, maxResults. | no cap |
postedAfter, postedBefore | The date window, UTC: YYYY-MM-DD, YYYY-MM-DDTHH:MM, today, yesterday, "7 days", "2 weeks", "3 months", "24 hours". With New posts the walk of a group ends at the first post older than the window. Also read: onlyPostsNewerThan, onlyPostsOlderThan, since, until and more (see the input form). | no window |
keywords, excludeKeywords | Words or phrases to keep and to leave out, matched as whole words without regard to case in the post's text, a shared post's text and its listing, link or event title. Also read: search, keyword, searchTerms, excludedKeywords. | none |
knownPostIds | Post ids you already have (up to 20,000), skipped free. | none |
memoryName, onlyNewPosts, resetMemory | A memory for monitors (below). onlyNewPosts: true uses the fixed name only-new-posts; resetMemory: true forgets the memory before the run. Also read: monitorStoreName, monitoringMode. | off |
resumeCursor | The nextCursor of a coverage row: the walk of one group goes on from there, in the order it was made under. | none |
includeTopComments | The comments Facebook shows with each post, on the post row, at no extra charge. | on |
fetchAllComments, includeReplies, maxCommentsPerPost | Every comment of each delivered post as its own row, replies too, up to the cap per post (Comment event). | off, off, 50 |
listingDetails | For each buy and sell post, its Marketplace listing: title, condition, category, status, place, delivery options and description (Listing detail event). | off |
transcripts | For each video with Facebook's own captions, the caption text (Transcript event). | off |
allPhotos | For each post with more photos or videos than the feed lists (it lists the first five), every item of the post's photo set (Complete album event). | off |
includePersonalData, rawStory | The personal data switch (below); rawStory adds Facebook's own story object and needs the switch on. | off |
maxConcurrency | How many groups are read at the same time (1 to 5), each through its own residential exits; 3 to 5 for runs of many groups. Prices do not change. Also read: concurrency. | 1 (one group after another) |
proxyCountry | The country of the residential exits (two letters). The posts are the same from any country. | US |
A value sent as null or "" counts as left out. Two keys of one meaning (for example groups and startUrls) sent together refuse the input, with a free row that says why. Proxy settings, cookies and delay or retry settings in the input are not used and a warning says so: the Actor reads groups through Apify residential exits on its own, logged out, one call at a time per group (maxConcurrency sets how many groups are read at once).
Example: { "groups": ["https://www.facebook.com/groups/selftaughtprogrammers/", "302792601187841"], "maxPostsPerGroup": 50, "postedAfter": "7 days", "keywords": ["hiring", "for rent"] }
Monitor groups for new posts
Give a Memory name (memoryName) and schedule the run. Every post and comment delivered under that name is remembered and never delivered or charged again under it. With the New posts order the memory also remembers which stretches of each group's feed it handled in full: a later run stops at the posts an earlier run already handled, and a deeper run jumps over the remembered stretch and reads on below it. A run that finds nothing new costs the start fee and one Group event per group; for each quiet group it makes three small calls: the group's header, its about facts and one page of its newest posts.
- Use one memory name per schedule; the memory belongs to this Actor.
- Two runs on one memory name at the same time: the second one runs free and remembers nothing.
- A memory that cannot be read or saved makes the run free (every row delivered, nothing charged after the start event) and says so in a
memory_freestatus row. - The stretches are kept for the New posts order without Posted before and without a cursor; under the other orders the memory still skips every post it knows, free.
Personal data
Off by default. Rows then carry the display names of post authors and commenters (they are part of the content) and the group's facts, and leave empty the fields that name or reach a private person: the profile ids and links of authors, commenters, tagged people and sellers, a listing's seller name, the phones and emails lists, a link field (such as a link preview's or an attachment's url) that points to a person's profile or is a chat or call link (wa.me, m.me, tel:, mailto: and the like), and a listing's coordinates. Texts are never masked: a post's, comment's, listing's, link preview's, event's or group's text is delivered exactly as Facebook serves it, with the switch off or on, so a phone number or e-mail address someone wrote into a post stays in its text (a transcript is Facebook's caption file with its cue lines joined into one line and its spacing collapsed, the same with the switch off or on). With Include personal data (includePersonalData: true) those fields are filled, and rawStory becomes available. You are responsible for a lawful use of personal data (GDPR included).
What this Actor does NOT do
- No login, no cookies, no Facebook account: private groups are not read (Facebook shows their posts to members only); such a group gets a free
group_privaterow, with its name and member count when Facebook shows them. - No search across Facebook or for groups: Facebook's search needs an account. Inside a group, use Keep posts with these words (a group's own search link is read as that word filter).
- No page or profile timelines and no single post links: page posts are the Facebook Posts Scraper - Page Posts, No Login, the comments of any public post the Facebook Comments Scraper: Replies, No Login. A link to one post, a page or a profile given here gets a free row that says so.
- No member lists: the group row carries the member count Facebook shows, rounded ("373.8K members").
- Posts Facebook does not show a visitor who is not logged in are not read.
- A post that appears in a group's feed only later, with a time inside a stretch your memory already read in full, is delivered when it stands on the page where the walk reaches that stretch, and is jumped over when it lies deeper inside it.
- A share carries the original post's id, link, author name and time, not its text (the group's feed does not show it to a visitor).
- The Buy and sell listings order lists only posts made with Facebook's sell form: most groups hold few, and past its first page Facebook answers nothing more on most groups and an error on some, and on some groups its first page is an error too (the walk ends there, free, after the posts delivered, with
lookup_failedin its coverage row). For every post of a buy and sell group use New posts: listing posts carry theirlistingfacts in any order. - An album lists the items the group's feed shows (the first five);
mediaCountsays how many it holds, and Complete albums reads the rest. - Transcripts are Facebook's own captions only; no speech is turned into text and no text is read from images (Facebook's own alt text is delivered).
- No text is rewritten or masked: what people wrote in a post or comment (phone numbers and e-mail addresses included) is delivered as Facebook serves it; only the dedicated person fields follow the personal data switch.
- Counts (reactions, comments, shares, views) are the ones Facebook shows at the moment of the run.
- No language model filter and no search for groups by a description: the Actor makes no call to an outside model; filter by your own words with Keep posts with these words.
- No proxy of your own and no delay or retry settings: the Actor reads through Apify residential exits only, at the fastest pace measured without refusals (about 100 to 220 posts a minute on one group, by the weight of its posts), with retries and timeouts set from measurements;
proxyConfiguration,minDelayand similar keys are ignored with a warning. Several groups are read at once with Groups read at once (maxConcurrency). - A walk of posts that bill little (long runs of known, left out or older posts) can stop at the work allowance, with
work_allowancein its coverage row. - Very heavy feeds: the price covers posts of up to about 19 KB on the wire each (the heaviest plain group measured; most groups weigh 12 to 16 KB a post, and buy and sell posts and posts tagging 50 or more people carry their own events). A long walk of a group whose plain posts weigh much more can stop at the work allowance too, after the posts delivered, with
work_allowancein its coverage row and anextCursorto go on from. - The comments add-on reads the comments of each post once, with the post; when a comment call fails, the post's other comments are not read in that run and a free
comments_incompleterow lists the posts.
API examples
Run and get the rows (replace <APIFY_TOKEN>):
curl -X POST "https://api.apify.com/v2/acts/automation_craft~facebook-groups-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"groups":["https://www.facebook.com/groups/selftaughtprogrammers/"],"maxPostsPerGroup":20}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('automation_craft/facebook-groups-scraper').call({ groups: ['selftaughtprogrammers'], maxPostsPerGroup: 20, memoryName: 'programmers-daily' });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((r) => r.type === 'post'));
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("automation_craft/facebook-groups-scraper").call(run_input={"groups": ["302792601187841"], "sortOrder": "buy_and_sell", "postedAfter": "7 days"})posts = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r["type"] == "post"]
FAQ
Can I scrape Facebook group posts without logging in?
Yes, for public groups. This Actor reads them as a visitor who is not logged in: no account, no cookies and no login. A group that shows its posts to members only gets a free group_private row.
Can this Actor scrape a private Facebook group?
No. Facebook shows a private group's posts to its members only, and this Actor never logs in, so it reads public groups only; a private group costs nothing and gets a free status row that says so.
How do I export Facebook group posts to Excel or CSV?
Run the Actor, open the Output tab and download the Posts view as CSV or Excel: one row per post, with the group, author, time, text and counts as columns. The same rows are available as JSON through the API, and the Groups and Comments views hold the other row types.
How do I get only new posts, or posts with certain keywords, from Facebook groups?
Give a Memory name and schedule the run: each run delivers and bills only the posts it has not delivered before. Add Keep posts with these words (and Leave out posts with these words) to keep only the posts that mention them; each post read and left out is a Filtered post.
How much does it cost to scrape 1,000 Facebook group posts?
1,000 plain posts of one group cost $0.6865 on the Gold plan and $0.9579 on the Free plan, start fee and Group event included. A group that does not exist or is private, a failed call, a repeat and a post your memory already holds are not charged.
Why does this Actor run with limited permissions?
It runs with the least privilege Apify offers: it reads and writes only its own run's storages and, when you give a memory name (or turn on Only new posts), one named key-value store it creates itself for that memory. It cannot see your other Actors, datasets or account data.
More data tools by Automation Craft
- Facebook Posts Scraper - Page Posts, No Login
- Facebook Comments Scraper: Replies, No Login
- Facebook Marketplace Scraper with Sold Tracker
- Facebook Page ID Finder: Names to Page IDs
- Facebook Ads Library Scraper - Ad Library & Spy
- Instagram Posts Scraper: Profiles, Reels, No Login
- Threads Scraper: Posts, Search, Tags, Replies
Changelog
- 0.1 (2026-10-19): texts are delivered exactly as Facebook serves them with personal data off too (no
[phone hidden],[email hidden]or[profile link hidden]marks, no character rewritten); the personal data switch keeps governing the person fields. - 0.1 (2026-10-17): first release: posts of public groups in four orders, a date window, keywords, a group row per group, the monitor memory with remembered stretches, comments, listing details, transcripts and complete albums as add-ons, personal data off by default.