Facebook Group Post Scraper By Keyword Search
Pricing
$24.99/month + usage
Facebook Group Post Scraper By Keyword Search
Scrape posts from Facebook groups with the Facebook Group Post Scraper. Extract post text, images, videos, comments, reactions, and timestamps. Ideal for community analysis, engagement tracking, and market research. Fast, reliable, and scalable for single or multiple groups.
Pricing
$24.99/month + usage
Rating
5.0
(1)
Developer
Scrapier
Maintained by CommunityActor stats
3
Bookmarked
83
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Facebook Group Post Scraper — Keyword Matches with Sentiment Tags
Facebook Group Post Scraper By Keyword Search pulls posts from any public Facebook group, filters them to the ones matching your watch keywords, and returns each match as structured JSON — already tagged with a sentiment label and score. Every result includes post text, author details, engagement counts, attachments, and any top comments Facebook returned with the post. Every response is ready to pass to an LLM, load into a spreadsheet, or feed a monitoring pipeline tracking how a topic is discussed inside one community over time.
What is Facebook Group Post Scraper By Keyword Search?
Facebook Group Post Scraper By Keyword Search is an Apify Actor that queries a single public Facebook group's post feed, keeps only the posts (and top comments) matching your watch-keyword rules, and returns each match as a flat JSON row already scored for sentiment. No Facebook login or cookies are required — the Actor reads the public group feed anonymously through Apify Proxy, so the group must expose its posts to logged-out visitors (groups that redirect guests to /about/ cannot be scraped and the run fails with a clear message saying so). It replaces a raw post dump with a filtered, pre-tagged feed built for repeated keyword monitoring.
- Keyword include/exclude filtering — watch keywords with any (at least one) or all (every keyword) match logic, checked against post text and top comments
- Built-in sentiment tagging — every matched post gets a
positive/negative/neutrallabel plus a numericsentimentScore - Result order control — order the matched posts by newest first or by most engagement (reactions + comments + shares)
- Post-count cap, page cap, and date filter — bound each run with
count, a hard feed-page cap, a wall-clock limit, andscrapeUntil - Apify Proxy support with graceful degradation — if a proxy group is unavailable on your plan the run continues on a direct connection instead of crashing
- Full base post fields — post/group IDs, author, reactions, shares, comment count, attachments, and top comments on every match. Counts Facebook did not return are
null, never a fabricated0
What data can you get with Facebook Group Post Scraper By Keyword Search?
Every run returns one flat JSON object per matched post, plus a nested array of the post's top comments.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Matched post | postId, groupId, createdAt, createdAtIso, url, user (id, name, url), text, matchedKeywords, keywordHitCount, sentiment, sentimentScore, attachments, reactionCount, shareCount, commentCount, topComments | Keyword-triggered sentiment monitoring feed for a group |
Top comment (nested in topComments) | text, createdAt, createdAtIso, author (name, id, gender, url, profilePicture, shortName, isVerified), reactionCount, replyCount, url | Read the community's reaction to a matched post |
Keyword-matched sentiment tagging
This is the field set competitors' general-purpose group scrapers don't return: every post that survives the keyword filter arrives pre-scored, not just pre-selected. matchedKeywords lists which watch terms actually hit (original casing preserved), keywordHitCount totals how many times those terms occurred across the post text and its top comments, and sentiment / sentimentScore grade the post's own text on a built-in lexicon, with no external NLP or LLM call involved. That means a keyword search for "vaccine" doesn't just hand you every post mentioning it — it tells you, per post, whether the mention read positive, negative, or neutral, and roughly how strongly, so you can prioritize which matches deserve a closer read before you open Facebook at all:
{"matchedKeywords": ["vaccine"],"keywordHitCount": 2,"sentiment": "negative","sentimentScore": -0.667}
Top comments
Each matched post carries its topComments array — the same interesting-comments Facebook surfaces under a post, each with its own author (name, id, gender, verification, profile picture), text, reaction and reply counts, and a direct comment permalink. Because keyword matching also runs against comment text, topComments is often where you can see exactly which reply triggered the match, not just that something in the thread did.
How does Facebook Group Post Scraper By Keyword Search differ from the official Facebook Graph API?
Meta's Graph API does not expose a keyword-search parameter over a group's post feed at all, and group content access is gated behind App Review rather than a public group URL.
| Feature | Facebook Graph API | Facebook Group Post Scraper By Keyword Search |
|---|---|---|
| Keyword search over group posts | Not available — no query parameter on the group feed edge | Built-in include/exclude keyword filters, any/all match mode |
| Sentiment tagging | Not provided | Every matched post scored positive/negative/neutral with a numeric score |
| Access requirements | App Review approval, and the group's admin must install your app and grant group permissions | Just the group's public URL |
| Group scope | Limited to groups that authorized your specific app | Any public Facebook group |
| Output shape | Raw graph nodes; pagination and parsing left to the developer | Fixed, flattened JSON pushed straight to a dataset |
| Setup | OAuth flow, permission review, token/webhook maintenance | Paste a URL and start the run |
The Graph API is the right call if you already run an approved app that a group's admins have installed and you only need that one group's own feed through official channels. Facebook Group Post Scraper By Keyword Search is the practical option when you need to monitor any public group's discussion by keyword without an app review process.
How to scrape Facebook with Facebook Group Post Scraper By Keyword Search?
- Open the Actor's page on Apify —
Scrapier/facebook-group-post-scraper-by-keyword-search. - Paste the public Facebook group URL into
groupUrl— the only required field. - Add your watch keywords, mute keywords, and match mode (optional — leave
keywordsempty to keep every post, unfiltered). - Set
count,sortType, andscrapeUntilto bound the scan (optional — all have working defaults). - Start the run, then download the matched, sentiment-tagged posts as JSON or CSV from the dataset.
Example request against the Apify API:
POST https://api.apify.com/v2/acts/Scrapier~facebook-group-post-scraper-by-keyword-search/run-sync-get-dataset-items?token=<TOKEN>{"groupUrl": "https://www.facebook.com/groups/digitalmarketing","keywords": ["marketing", "seo"],"matchMode": "any","count": 50}
How to scan multiple groups in one job
The input schema takes one groupUrl per run — there is no array-of-groups field. To cover several groups, fire one run per group: loop over your group list and call the Apify API's run endpoint (or a run-sync-get-dataset-items call) once per URL, then merge the returned dataset items downstream. Apify Tasks can store one pre-configured input per group so each loop iteration only needs to trigger the task, not rebuild the input.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
groupUrl | Yes | string | Full public Facebook group URL (or bare slug) to monitor. The group must show its posts to logged-out visitors. | "https://www.facebook.com/groups/digitalmarketing" |
keywords | No | array | Watch keywords. Keep a post if its text, attachment titles, shared links or returned top comments contain these terms (case-insensitive). Empty = no keyword filtering. | ["marketing", "seo"] |
excludeKeywords | No | array | Mute keywords. Drop a post if it contains any of these terms, even if it matched a watch keyword. | ["spam"] |
matchMode | No | string (any | all) | How watch keywords combine: any keeps a post with at least one match, all requires every watch keyword. Default any. | "any" |
count | No | integer (1–10000) | Maximum posts to fetch and evaluate. Empty = scan all available posts. Default 20. | 50 |
sortType | No | string (new_posts | most_relevant) | Order the matched posts are written to the dataset in: newest first, or highest reactions + comments + shares first. Default new_posts. | "most_relevant" |
scrapeUntil | No | string (date) | Only keep posts created after this date. Formats: YYYY-MM-DD or YYYY-MM-DD HH:MM:SS (UTC). Empty = no date filter. | "2026-01-01" |
maxComments | No | integer (0–50) | Maximum top comments kept per post. 0 drops them entirely. Default 10. | 5 |
minDelay | No | integer (0–60) | Lower bound of the random pause between feed requests, in seconds. Default 1. | 1 |
maxDelay | No | integer (0–60) | Upper bound of the random pause between feed requests, in seconds. Default 3. | 3 |
proxy | No | object | Proxy configuration. RESIDENTIAL is the default and is kept as a fallback whatever you choose, because Facebook login-walls datacenter exit IPs. | { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } |
Example JSON input:
{"groupUrl": "https://www.facebook.com/groups/digitalmarketing","keywords": ["marketing", "seo"],"excludeKeywords": ["spam"],"matchMode": "any","count": 20,"sortType": "new_posts","scrapeUntil": "","maxComments": 10,"minDelay": 1,"maxDelay": 3,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Common pitfall: the Actor has no login step — it resolves the group feed anonymously. Many groups that are labelled "public" still bounce logged-out visitors to their /about/ page; for those the run fails with an explicit status message rather than finishing green with an empty dataset. Open the group in a private browser window first: if you can read the posts there, this Actor can scrape them. A second, subtler one: matchMode: "all" checks whether every watch keyword appears anywhere across the combined post text and top comments, not that all keywords appear in the post text alone — a post can pass "all" mode purely from its comment thread.
⬆️ Output
Results are pushed to the Actor's dataset one matched post at a time, as typed, flat JSON — exportable as JSON, CSV, Excel, or the other formats Apify datasets support. The schema is identical across runs regardless of which keywords you configure.
Scraped results
Real rows from live runs (groups/digitalmarketing with keywords: ["marketing","seo"], and groups/reactjsdevelopers unfiltered). Counts Facebook did not return are null, never a stand-in 0.
[{"postId": "3549616325209441","groupId": "2023785961125826","createdAt": 1782837710,"createdAtIso": "2026-06-30T16:41:50Z","url": "https://www.facebook.com/groups/digitalmarketing/permalink/3549616325209441/","user": {"id": "61575213358852","name": "creative by muskan","url": "https://www.facebook.com/people/creative-by-muskan/61575213358852/"},"text": "No one cares what you post... Meanwhile me: 'Great job! Keep posting!' #SocialMediaMarketing #CreativeByMuskan","attachments": [{ "type": "Video", "url": null, "title": null, "mediaType": "video", "subattachmentCount": 0 }],"reactionCount": 0,"shareCount": 0,"commentCount": 0,"topComments": [],"matchedKeywords": ["marketing"],"keywordHitCount": 1,"sentiment": "positive","sentimentScore": 1.0},{"postId": "4021232774841286","groupId": "1873009809663604","createdAt": 1777997316,"createdAtIso": "2026-05-05T16:08:36Z","url": "https://www.facebook.com/groups/React.JSdevelopers/permalink/4021232774841286/","user": {"id": "pfbid02ZaAUcLAgxqxG9ZPjQoCai6pdR5T8ExLvSYMojtbMUjcxGoX88EWkwapBCwWHMKjjl","name": "Leslie Tut","url": "https://www.facebook.com/leslieanntut"},"text": "We are seeking a senior developer with strong experience in React, PostgreSQL, and Vercel to help maintain and improve our growing web platform...","attachments": [],"reactionCount": 20,"shareCount": 0,"commentCount": 29,"topComments": [{"text": "Interested","createdAt": 1778046275,"createdAtIso": "2026-05-06T05:44:35Z","author": {"id": "pfbid02aVME32iw5VTbWvW4mSPEbZPTxdQeuUTmRo5qGL6qF3w9NADzmdPCR2DfsxVUBDnSl","name": "Aashish Kumar Sharma","shortName": "Aashish Kumar Sharma","gender": "MALE","url": "https://www.facebook.com/aashish.k.sharma.73","profilePicture": "https://scontent-lax7-1.xx.fbcdn.net/v/t39.30808-1/298025920_10228803006690022_4451074128425940150_n.jpg","isVerified": null},"reactionCount": 0,"replyCount": 0,"url": "https://www.facebook.com/groups/React.JSdevelopers/permalink/4021232774841286/?comment_id=4021749841456246"}],"matchedKeywords": [],"keywordHitCount": 0,"sentiment": "positive","sentimentScore": 0.6},{"postId": "4055864108044819","groupId": "1873009809663604","createdAt": 1780947539,"createdAtIso": "2026-06-08T19:38:59Z","url": "https://www.facebook.com/groups/React.JSdevelopers/permalink/4055864108044819/","user": {"id": "pfbid023vejnZWHd6LYLSCXReMt1YWEhtgambkB7HBEJNUhKC5hhusC6SxW7ECvAdhxZWJXl","name": "Rana Faizan","url": null},"text": "I am a frontend professional web developer I can create every kind of websites with affordable price","attachments": [],"reactionCount": 0,"shareCount": 0,"commentCount": 0,"topComments": [],"matchedKeywords": [],"keywordHitCount": 0,"sentiment": "neutral","sentimentScore": 0.0}]
A note on top comments
topComments carries whatever interesting comments Facebook returned with the story, capped by maxComments. Facebook returns them only for posts that actually have comments, and often returns none at all to a logged-out request - an empty array means Facebook returned nothing, not that the post has no comments. commentCount is the authoritative total.
How can I use the data extracted with Facebook Group Post Scraper By Keyword Search?
- Social listening and brand teams: track how a brand or product name is discussed inside niche communities, using
sentimentandsentimentScoreto spot when the conversation turns negative. - Community moderators: run the Actor with your banned-topic terms in
excludeKeywords(or as watch keywords) to surface posts mentioning scams, spam, or rule-violating content for a review queue. - AI engineers and LLM developers: feed the matched, sentiment-tagged JSON directly to an agent as grounded context — no separate keyword-filter or sentiment-classification step needed before the model sees it.
- Market researchers: run the same keyword set on a schedule and compare
matchedKeywords,keywordHitCount, andsentimentScoreacross runs to track whether community opinion on a topic is shifting.
How do you monitor keyword sentiment over time?
Monitoring here means re-running the same group and keyword configuration on a schedule and comparing the sentiment-tagged results between runs, rather than reading a single snapshot. Because every matched post carries matchedKeywords, keywordHitCount, sentiment, and sentimentScore, two runs of the same query are directly comparable: a rising keywordHitCount means the topic is being discussed more often, and a shift in the average sentimentScore (or in the ratio of positive to negative labels) means opinion on it is moving.
The fields worth diffing between runs are keywordHitCount (volume), sentimentScore (direction and intensity), and matchedKeywords (which specific terms are driving the volume). reactionCount, shareCount, and commentCount are useful secondary signals for whether a sentiment shift is also gaining engagement.
A practical workflow: schedule a run of the same groupUrl and keyword set daily or weekly, store each run's dataset, then compute the average sentimentScore and total keywordHitCount for the new run against the previous one — alert when the sign of the average sentiment flips or when hit volume spikes well above its recent baseline. Apify's built-in Scheduler can trigger the run itself on that cadence; the diff-and-alert step runs downstream, in your own script or workflow tool, against the two datasets.
Integrate Facebook Group Post Scraper By Keyword Search and automate your workflow
Facebook Group Post Scraper By Keyword Search works with any language or tool that can send an HTTP request.
REST API with Python
import requestsTOKEN = "YOUR_APIFY_TOKEN"ACTOR = "Scrapier~facebook-group-post-scraper-by-keyword-search"run_input = {"groupUrl": "https://www.facebook.com/groups/digitalmarketing","keywords": ["marketing", "seo"],"matchMode": "any","count": 50,}resp = requests.post(f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items?token={TOKEN}",json=run_input,)for post in resp.json():print(post["sentiment"], post["matchedKeywords"], post["url"])
MCP for query-grounded AI agents
Any Apify Actor, including this one, is reachable through Apify's hosted MCP server at https://mcp.apify.com by pinning it with the actors query parameter, e.g. https://mcp.apify.com/?actors=Scrapier/facebook-group-post-scraper-by-keyword-search. Register that URL as a remote MCP server in Claude Desktop, Claude Code, or another MCP-compatible client, and an agent can call the Actor as a tool — it issues a groupUrl + keyword query, gets back sentiment-tagged JSON, and grounds its answer in that data instead of guessing.
Scheduled monitoring and delivery
Use Apify's Scheduler to trigger this Actor on a recurring cadence against the same group and keyword set, and Apify webhooks to notify an endpoint (or trigger a downstream Actor) when a run finishes, instead of polling the dataset manually.
Is it legal to scrape Facebook group posts?
Scraping publicly accessible Facebook group posts is generally legal — this Actor only retrieves what any visitor to a public group can already see, and hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir., 2019) supports the position that scraping public web data does not violate the Computer Fraud and Abuse Act. That said, the data returned here — post authors' names, profile IDs, and comment authors' details — is personal data, so processing it at scale can fall under GDPR (EU/UK individuals) or CCPA (California residents), regardless of the CFAA question. Scraping for internal monitoring carries a different risk profile than scraping to train a model on people's posts. Consult your legal team for commercial use cases involving bulk storage.
Frequently asked questions
Does sentiment tagging work for non-English posts?
Not reliably — the sentiment model is a built-in English word lexicon (positive/negative word lists with basic negation handling), so posts in other languages will typically score neutral simply because no lexicon words are found, not because the post is actually neutral. Keyword matching itself is a plain substring match and works in any language.
What result orders are available, and how do they differ?
Facebook disables its own feed-sort switcher for logged-out visitors (can_viewer_see_sorting_switcher: false) and ignores the sortingSetting argument entirely, so the feed is always walked in Facebook's default order. sortType therefore orders the results: new_posts writes the newest matched post first, most_relevant writes the highest reactionCount + commentCount + shareCount first. Both orderings are computed from values actually scraped from the live feed.
How does Facebook Group Post Scraper By Keyword Search handle Facebook's anti-bot measures?
It runs requests through Apify Proxy (or a direct connection, your choice), inserts a randomized minDelay–maxDelay pause between feed pages, and retries a failed page a few times before stopping. If the group bootstrap fails on a direct connection it is retried once through Apify Proxy. If your Apify plan has no capacity in the requested proxy group, the run degrades to a direct connection with a warning instead of crashing. Every run is additionally bounded by a hard feed-page cap and a 30-minute wall clock so a doomed query can never burn the whole run timeout.
Does Facebook Group Post Scraper By Keyword Search extract sentiment and keyword matches?
Yes — every matched post carries matchedKeywords (which watch terms hit), keywordHitCount (how many times), sentiment (positive/negative/neutral), and sentimentScore (-1 to 1). These fields are only absent from posts that never entered the dataset, since only posts passing the keyword rules are pushed at all.
How many results does Facebook Group Post Scraper By Keyword Search return per query?
Up to whatever you set in count (1–10,000), or all available posts in the group if you leave it empty — the Actor stops paging once it has scanned that many posts, and only the ones that pass your keyword rules are pushed to the dataset.
How do I use Facebook Group Post Scraper By Keyword Search to monitor a topic over time?
Schedule the same groupUrl and keyword set to run repeatedly (Apify Scheduler handles the cadence), extract keywordHitCount and sentimentScore from each run, and compare them against the previous run's dataset — alert when the average sentiment flips sign or hit volume spikes.
Does Facebook Group Post Scraper By Keyword Search work with Claude, ChatGPT, and AI agent frameworks?
Yes. It's reachable through Apify's hosted MCP server (see Integrate section above) for MCP-native clients, and as a plain HTTP endpoint for any other agent framework — an agent can call the run-sync API, get sentiment-tagged JSON back, and ground its response in it.
How does Facebook Group Post Scraper By Keyword Search compare to other Facebook group scrapers?
As observed on their Apify Store listings, general-purpose Facebook group post scrapers (for example, listings titled "Facebook Group Post Scraper" or "Facebook Groups Posts Scraper" from other publishers) return the raw post feed — text, author, reactions, comments — without keyword filtering or sentiment tagging built in; that filtering and scoring is left for the user to build afterward. This Actor does both at scrape time, so the dataset arrives already filtered to on-topic posts and labeled for sentiment.
Can I use Facebook Group Post Scraper By Keyword Search without managing proxies or Facebook credentials?
Yes. Apify Proxy is enabled by default and handled internally, and no Facebook login or cookies are used at all. You only need to supply a public group URL whose posts are visible when logged out.
Your feedback
Found a bug or a field that doesn't match this README? Let us know through the Issues tab on the Actor's Apify Store page — Scrapier actively maintains this listing and reads every report.