Facebook Groups Posts Scraper With Author Lead Enrichment
Pricing
$24.99/month + usage
Facebook Groups Posts Scraper With Author Lead Enrichment
Scrape posts from Facebook groups with the Facebook Groups Posts Scraper. Extract post text, images, videos, comments, reactions, timestamps, and author info. Ideal for community analysis, market research, and engagement tracking. Fast, reliable, and scalable for multiple groups.
Pricing
$24.99/month + usage
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
1
Bookmarked
20
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Group Posts Scraper — Extract Posts and Contact Leads
Facebook Group Posts Scraper With Author Lead Enrichment pulls posts from public Facebook groups — text, author, attachments, likes, and comments — by group URL, username, or keyword, then scans every post's own text for emails, phone numbers, and links, scoring each one 0-100 for lead quality. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. No Facebook login is required for public groups, and a ranked contact-leads dataset ships alongside the full post feed.
What is Facebook Group Posts Scraper With Author Lead Enrichment?
Facebook Group Posts Scraper With Author Lead Enrichment queries one or more public Facebook groups and returns every scanned post as a normalized JSON row — author, text, attachments, and engagement — plus a set of contact-signal fields computed from that same post's text and link attachments. Unlike a plain post scraper, it always attaches extractedEmails, extractedPhones, extractedLinks, hasContactInfo, and a leadScore, and can push the posts that carry contact info to a separate ranked dataset. No Facebook account or login is required — it runs logged out against public groups over an automatically rotated residential proxy; there is no cookie/session input, so private or approval-gated groups are out of scope.
- Scan one or more groups by full URL, username, or bare keyword (
groupUrls) - Control scan depth per group from 10 up to 10,000 posts (
maxPostsToScan) - Choose between four feed orderings, including a combined "all sorts" mode for maximum coverage (
feedSortOrder) - Always-on per-post contact/lead extraction, with an optional ranked
AUTHOR-CONTACT-LEADSdataset (enableContactLeadsDataset) - Optional full-resolution photo URLs and real OCR/alt text for photo attachments (
resolveFullMedia) - Optional group profile metadata (member count, privacy, creation date, admins) and a bounded top-comments preview per post (
includeGroupProfile,maxComments)
What data can you get with Facebook Group Posts Scraper With Author Lead Enrichment?
The Actor returns group posts with their author and engagement data, always-on contact/lead signals, an optional ranked leads list, and two opt-in enrichment objects (group profile, top comments).
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Group post | facebookUrl, id, feedbackId, user, date, url, text, attachments, likesCount, commentsCount, source_group | Content, engagement, and trend analysis |
| Post author | user.id, user.name, user.profileUrl, user.profilePic | Identify who is posting in a group |
| Contact/lead signals (per post) | extractedEmails, extractedPhones, extractedLinks, hasContactInfo, leadScore | Lead qualification and outreach targeting |
Ranked contact leads (AUTHOR-CONTACT-LEADS dataset) | rank, authorId, authorName, profileUrl, postUrl, postDate, extractedEmails, extractedPhones, extractedLinks, leadScore | Prioritized sales/outreach list |
| Group profile metadata (opt-in) | groupId, groupName, groupDescription, groupCreatedTime, activity, about, adminProfiles, moderatorsProfiles | Vet a group before committing outreach time |
| Top comments preview (opt-in) | id, text, authorName, authorProfileUrl, date | Reply/sentiment context on a post |
| Full-res photo + OCR (opt-in) | attachments[].fullImageUrl, attachments[].ocrText | Read flyer/screenshot text inside photo posts |
Contact-Lead Extraction & Scoring
This is the one thing a plain group-post scraper doesn't give you: every collected post runs through a regex pass over its own text field (plus any Link-type attachment URL already on the post) — zero extra HTTP requests. Be precise about what "enrichment" means here: this is not author-profile enrichment. An earlier version tried a separate, login-gated member/profile fetch for richer author data, and found it structurally blocked by Facebook's login wall and Google's CAPTCHA on every attempt — so it was removed rather than shipped half-working. What remains is honest and always-real: extractedEmails, extractedPhones, and extractedLinks populate only when the post's own text actually contains them, hasContactInfo flags it, and leadScore (0-100) weights email 45, phone 25, link 15, plus up to 10 for engagement. A post with no real signal scores from engagement only, or 0 — never fabricated.
{"text": "Selling homemade dish cloths - email me at jane.doe@example.com or call 555-123-4567!","extractedEmails": ["jane.doe@example.com"],"extractedPhones": ["555-123-4567"],"extractedLinks": [],"hasContactInfo": true,"leadScore": 80}
Group Profile Metadata
When includeGroupProfile is enabled, the group's own about-page data is fetched once per group — not once per post — and attached as groupProfile on every post row from that group. It carries groupName, groupDescription, groupCreatedTime, an activity object (totalMembers, newPostsToday, newPostsLastMonth, newMembersLastWeek), an about object (privacy and discoverability labels, history), and adminProfiles/moderatorsProfiles lists. Useful for deciding whether a group is worth a lead-generation run before scanning thousands of posts, or for attaching group-size context to a CRM record.
How does Facebook Group Posts Scraper With Author Lead Enrichment differ from the official Facebook API?
There isn't much of a comparison to make: Meta deprecated the Facebook Groups API in Graph API v19.0 (announced January 23, 2024), removing group read and write access for third-party apps within 90 days of that release. A third-party developer today has no supported, app-reviewable path to read an arbitrary public group's post feed through Meta's own API at all.
| Feature | Facebook Graph API (Groups) | This Actor |
|---|---|---|
| Third-party group post access | Deprecated for all apps since Graph API v19.0 (Jan 2024) | Reads public group feeds directly by URL, username, or keyword |
| Contact/lead signals | Not provided | extractedEmails/extractedPhones/extractedLinks + leadScore on every row, always on |
| Result volume per query | Not applicable — no access | Configurable via maxPostsToScan (10–10,000 per group) |
| Setup requirement | Historically: Meta app review, business verification, group-admin app install | Add a group URL/username/keyword and start the run |
| Output schema | Not applicable | Consistent JSON dataset row per post, every run |
If you need official, permissioned access to a group your own business administers, Meta's own tools remain the compliant route. If you need to read what a public group's feed actually shows any visitor — including the contact signals buried in post text — that's what this Actor is for.
How to scrape Facebook with Facebook Group Posts Scraper With Author Lead Enrichment?
- Open the Actor's page in Apify Console (no separate Facebook account or app registration needed).
- Add one or more entries to
groupUrls— a full group URL, a bare username, or a keyword (all are accepted; none are required to start a run, sincegroupUrlshas no schema-level requirement, but an empty list stops the run immediately). - Set
maxPostsToScan(10–10,000) and pick afeedSortOrder—ALLcombines three orderings for maximum unique-post coverage. - Optionally enable
resolveFullMedia,includeGroupProfile, or setmaxCommentsabove 0, then start the run. - Download results as JSON, CSV, or the platform's other standard export formats once the run finishes, or stream them via the API while the run is still going.
{"groupUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"maxPostsToScan": 30,"feedSortOrder": "ALL"}
How to run multiple groups in one job
groupUrls accepts an array, so a single run can scan several groups back to back — mix full URLs, usernames, and keywords in the same list. Each group is scraped in sequence with its own bootstrap session and proxy rotation, and the ranked AUTHOR-CONTACT-LEADS dataset is built once, across every post collected from every group in that run, rather than per group.
⬇️ Input
All 8 input parameters are optional — none are marked required in the schema, though groupUrls must contain at least one entry for the run to do anything.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
groupUrls | No | array | Facebook group URLs, usernames, or keywords to scan. | ["https://www.facebook.com/groups/cheapmealideas/"] |
maxPostsToScan | No | integer | Posts to scan per group (min 10, max 10,000). | 30 |
feedSortOrder | No | string | ALL, TOP_POSTS, CHRONOLOGICAL, or RECENT_ACTIVITY — how scanned posts are ordered. | "ALL" |
enableContactLeadsDataset | No | boolean | Push posts with contact info, ranked by leadScore, to the separate AUTHOR-CONTACT-LEADS dataset. Per-row contact fields are computed either way. | true |
resolveFullMedia | No | boolean | Re-fetch each photo attachment's own permalink for a full-resolution URL and real OCR/alt text. | false |
includeGroupProfile | No | boolean | Fetch each group's profile (members, privacy, creation date, admins) once and attach it to every post from that group. | false |
maxComments | No | integer | Real top-level comments to attach per post as topComments (0–50). 0 disables the lookup. | 0 |
proxyConfiguration | No | object | Proxy settings; the Actor forces Apify residential proxy regardless of group selection here. | { "useApifyProxy": false } |
{"groupUrls": ["https://www.facebook.com/groups/cheapmealideas/", "mrbeast"],"maxPostsToScan": 50,"feedSortOrder": "ALL","enableContactLeadsDataset": true,"resolveFullMedia": false,"includeGroupProfile": false,"maxComments": 5,"proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: maxPostsToScan has a hard floor of 10 in the source (max(max_posts, 10)) — passing 5 silently becomes 10, it does not error. Also, disabling enableContactLeadsDataset does not remove extractedEmails/extractedPhones/extractedLinks/hasContactInfo/leadScore from the main dataset rows; it only skips pushing the separate ranked leads dataset.
⬆️ Output
Every run writes typed, normalized JSON rows to the default dataset, with a consistent schema across runs, exportable as JSON, CSV, Excel, or the platform's other standard dataset formats. Only main dataset rows are billed under the row_result charged event; entries in the separate AUTHOR-CONTACT-LEADS dataset are pushed as a plain dataset write and are not separately charged.
Scraped results
[{"facebookUrl": "https://www.facebook.com/groups/germtheory.vs.terraintheory","id": "UzpfSTEwMDA3NzI2ODMyNTcyOTpWSzoyNjEzODczMzc4MjQ0MzYxNg==","feedbackId": "ZmVlZGJhY2s6MjYxMzg3MzM3ODI0NDM2MTY=","user": {"id": "pfbid02PHtjb98BvckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKaBfKrfuYl","name": "Mary Farrar","profileUrl": "https://www.facebook.com/profile.php?id=pfbid02PHtjb98BvckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKaBfKrfuYl","profilePic": "https://scontent.fcpq3-1.fna.fbcdn.net/example.jpg"},"date": "2026-02-18T23:15:41.000Z","url": "https://www.facebook.com/groups/germtheory.vs.terraintheory/posts/26138733782443616/","text": "Selling homemade dish cloths - email me at jane.doe@example.com or call 555-123-4567!","attachments": [],"likesCount": 4,"commentsCount": 10,"source_group": "https://www.facebook.com/groups/germtheory.vs.terraintheory","groupProfile": null,"topComments": null,"extractedEmails": ["jane.doe@example.com"],"extractedPhones": ["555-123-4567"],"extractedLinks": [],"hasContactInfo": true,"leadScore": 80},{"facebookUrl": "https://www.facebook.com/groups/cheapmealideas","id": "UzpfSTEwMDA3NzI2ODMyNTcyOTpWSzoyNjEzODczMzc4MjQ0MzYyMA==","feedbackId": "ZmVlZGJhY2s6MjYxMzg3MzM3ODI0NDM2MjA=","user": {"id": "pfbid03Xn2z8gt7VckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKq","name": "David Nolan","profileUrl": "https://www.facebook.com/profile.php?id=pfbid03Xn2z8gt7VckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKq","profilePic": ""},"date": "2026-02-19T08:02:11.000Z","url": "https://www.facebook.com/groups/cheapmealideas/posts/26138733782443620/","text": "Made this for $6 total, recipe in comments!","attachments": [{"__typename": "Photo","photo_image": { "uri": "https://scontent.fcpq3-1.fna.fbcdn.net/photo1.jpg", "height": 720, "width": 960 },"__isMedia": "Photo","url": "https://www.facebook.com/photo/?fbid=1234567890","id": "1234567890","ocrText": ""}],"likesCount": 212,"commentsCount": 34,"source_group": "https://www.facebook.com/groups/cheapmealideas","groupProfile": null,"topComments": null,"extractedEmails": [],"extractedPhones": [],"extractedLinks": [],"hasContactInfo": false,"leadScore": 10},{"facebookUrl": "https://www.facebook.com/groups/cheapmealideas","id": "UzpfSTEwMDA3NzI2ODMyNTcyOTpWSzoyNjEzODczMzc4MjQ0MzYzMA==","feedbackId": "ZmVlZGJhY2s6MjYxMzg3MzM3ODI0NDM2MzA=","user": {"id": "pfbid04Wm1a9ht8WckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKr","name": "Priya Shah","profileUrl": "https://www.facebook.com/profile.php?id=pfbid04Wm1a9ht8WckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKr","profilePic": ""},"date": "2026-02-19T09:41:55.000Z","url": "https://www.facebook.com/groups/cheapmealideas/posts/26138733782443630/","text": "I run a small meal-prep delivery service, DM me or check mealsbypriya.com for the menu","attachments": [],"likesCount": 18,"commentsCount": 3,"source_group": "https://www.facebook.com/groups/cheapmealideas","groupProfile": null,"topComments": null,"extractedEmails": [],"extractedPhones": [],"extractedLinks": ["mealsbypriya.com"],"hasContactInfo": true,"leadScore": 15}]
The ranked AUTHOR-CONTACT-LEADS dataset (when enableContactLeadsDataset is true) holds only the posts with hasContactInfo: true, sorted by leadScore descending:
{"rank": 1,"authorId": "pfbid02PHtjb98BvckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKaBfKrfuYl","authorName": "Mary Farrar","profileUrl": "https://www.facebook.com/profile.php?id=pfbid02PHtjb98BvckjoMbtzEu5kZYJkUNUcCcdoGJRhmSZBRwbE1K6PPDNt1BKaBfKrfuYl","postUrl": "https://www.facebook.com/groups/germtheory.vs.terraintheory/posts/26138733782443616/","postDate": "2026-02-18T23:15:41.000Z","extractedEmails": ["jane.doe@example.com"],"extractedPhones": ["555-123-4567"],"extractedLinks": [],"leadScore": 80}
How can I use the data extracted with Facebook Group Posts Scraper With Author Lead Enrichment?
- B2B lead generation and sales teams: run the Actor across niche buy/sell or interest groups, filter the
AUTHOR-CONTACT-LEADSdataset forleadScoreabove a threshold, and hand a prioritized list ofauthorName/profileUrl/extractedEmailsto outreach. - Community-based sales and local businesses: scan groups relevant to a service area, using
hasContactInfoandtextto spot people actively asking for or advertising the kind of service being sold. - AI engineers and LLM developers: issue a query against
groupUrls, receive structured JSON back, and passtextplus the contact fields directly to a model as grounded context for a lead-qualification or summarization agent. - Market researchers: track
likesCount/commentsCountalongside posttextacross a keyword set to gauge which topics or products get real engagement inside a community, without guessing from the outside.
How do you monitor contact leads over time?
Monitoring here means re-running the same groupUrls set on a schedule and diffing what changed — new posts, newly-surfaced contact info, and shifting leadScore distribution — rather than treating any single run as a final answer. A group's feed is never static: new members post daily, existing posts pick up new comments, and a post that had no contact info yesterday can pick some up today if the author edits it or replies to their own thread with a phone number or link.
Between runs, compare on id first — that tells you which posts are genuinely new, since the Actor's own processed_posts de-duplication only applies within a single run, not across scheduled runs. Then compare on hasContactInfo, extractedEmails, extractedPhones, and leadScore for posts you've already seen, so an edited post or a newly-active thread surfaces as a lead even if you already had the post's id on file. likesCount and commentsCount are worth diffing too, since leadScore folds engagement into its weighting.
A practical loop: schedule a run across a fixed group list every few hours or days, load the previous run's dataset for the same groups, and alert whenever a new rank-1 or otherwise high-leadScore entry appears in AUTHOR-CONTACT-LEADS that wasn't in the prior run's output. This Actor itself has no built-in cron or webhook — the scheduling mechanism is Apify's own platform feature: create an Apify Schedule against this Actor with your fixed input, and use the platform's dataset or webhook integrations to pull each run's results into whatever system does the diffing and alerting.
Integrate Facebook Group Posts Scraper With Author Lead Enrichment and automate your workflow
Facebook Group Posts Scraper With Author Lead Enrichment works with any language or tool that can send an HTTP request.
REST API with Python
import requestsTOKEN = "YOUR_APIFY_TOKEN"ACTOR = "Scrapier~facebook-groups-posts-scraper-with-author-lead-enrichment"url = f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items?token={TOKEN}"run_input = {"groupUrls": ["https://www.facebook.com/groups/cheapmealideas/"],"maxPostsToScan": 30,"feedSortOrder": "ALL",}resp = requests.post(url, json=run_input, timeout=180)posts = resp.json()leads = [p for p in posts if p.get("hasContactInfo")]print(f"{len(posts)} posts, {len(leads)} with contact info")
MCP for query-grounded AI agents
This Actor is reachable through Apify's MCP server, which loads any Actor's input schema and exposes it as a callable MCP tool. Register it for a local client with npx @apify/actors-mcp-server --tools Scrapier/facebook-groups-posts-scraper-with-author-lead-enrichment, or point an MCP-aware client at https://mcp.apify.com?tools=Scrapier/facebook-groups-posts-scraper-with-author-lead-enrichment with your Apify token. Compatible clients include Claude Desktop, Cursor, and VS Code (via GitHub Copilot's agent mode). An agent then calls the tool with a group query, gets back structured JSON, and grounds its answer in the real posts rather than a stale training-data memory.
Scheduled monitoring and delivery
There's no webhook or cron built into the Actor itself. For recurring runs, create an Apify Schedule with your fixed groupUrls/input and let it trigger on the interval you set; pull results afterward via the Dataset API or the platform's webhook integrations rather than expecting the Actor to push anywhere on its own.
Is it legal to scrape Facebook group post leads?
Scraping publicly accessible Facebook group posts is generally lawful in most jurisdictions, since this Actor retrieves only what any logged-out visitor to a public group can already see — it does not bypass logins, paywalls, or access controls. The contact signals this Actor extracts (names, profile URLs, emails, phone numbers) are personal data, so GDPR (EU/UK) and CCPA/CPRA (California) obligations apply to how you subsequently store, process, and use that data, separately from whether the initial collection was lawful. Scraping for one-off research carries a different risk profile than scraping to build a persistent contact database for marketing outreach — the latter brings in consent, purpose-limitation, and opt-out requirements under those same regimes. Consult your legal team before any commercial use case involving bulk storage or resale of the extracted contact data.
Frequently asked questions
Does this Actor require a Facebook login or cookies?
No. It scrapes public groups logged out, over an automatically rotated Apify residential proxy. There is no cookie or session-string input in this Actor's schema, so groups that require membership approval or show a login wall to logged-out visitors cannot be scraped.
Which post ordering can I choose, and does it affect coverage?
feedSortOrder accepts ALL, TOP_POSTS, CHRONOLOGICAL, or RECENT_ACTIVITY. ALL (the default) paginates all three real orderings and merges unique posts, which is the setting most likely to hit your maxPostsToScan target on groups where any single ordering's anonymous pagination runs dry early.
How does this Actor handle Facebook's anti-bot measures?
It rotates proxy sessions per page, retries through Apify residential proxy with a fallback tier if a custom proxy is supplied, and detects Facebook's HTTP-200 "soft block" (a Rate limit exceeded GraphQL error, code 1675004) as a retryable condition rather than treating it as a successful empty response.
Does the "author lead enrichment" actually enrich author profiles?
No — and that distinction matters. This Actor does not fetch anything extra about an author's profile (no bio, employer, or additional photos beyond what the post itself carries). "Enrichment" here means regex-based extraction of extractedEmails, extractedPhones, and extractedLinks from the post's own text and Link-type attachments, plus a computed leadScore. A login-gated profile-fetch approach was tried in an earlier build and was structurally blocked by Facebook's login wall and Google CAPTCHA on every attempt, so it isn't shipped.
How many posts does this Actor return per group?
Between 10 and 10,000, set by maxPostsToScan — values below 10 are clamped up to 10 rather than rejected. Actual results can come in under your target if a group's feed runs out of unique posts across the selected sort order(s) before the target is reached.
How do I monitor a group's contact leads over time?
Schedule repeated runs against the same groupUrls via an Apify Schedule, keep each run's dataset, and diff on id for new posts and on hasContactInfo/leadScore for posts whose contact signal changed since the last run — then alert on new high-leadScore entries in AUTHOR-CONTACT-LEADS.
Does this Actor work with Claude, ChatGPT, and AI agent frameworks?
Yes. It's callable as a plain HTTP endpoint by any agent framework, and it's also reachable through Apify's MCP server (npx @apify/actors-mcp-server --tools Scrapier/facebook-groups-posts-scraper-with-author-lead-enrichment) for MCP-native clients like Claude Desktop or Cursor, letting an agent retrieve live group posts and lead signals before answering.
How does this compare to the base Facebook Groups Scraper?
The base Facebook-Groups-Scraper in this account returns posts with a full reaction breakdown (like/love/haha/wow/sad/angry/care) but no contact or lead fields. This Actor trades the granular reaction breakdown for always-on extractedEmails/extractedPhones/extractedLinks/hasContactInfo/leadScore on every row, a ranked AUTHOR-CONTACT-LEADS dataset, and optional group-profile and top-comments enrichment.
Can I use this Actor without managing proxies or Facebook credentials?
Yes. Proxy selection and rotation (including fallback from a custom proxy to Apify residential proxy on failure) is handled automatically; you only need to supply the group URLs/usernames/keywords you want scanned.
Your feedback
Found a bug, or a field that doesn't match what's documented here? Let the Scrapier team know through the Apify Console issue/support option on this Actor's page — reports of schema mismatches get fixed fastest when they include the exact input you ran.


