Facebook Comments Scraper With Author Lead Enrichment
Pricing
Pay per usage
Facebook Comments Scraper With Author Lead Enrichment
π¬ Facebook Comments Scraper extracts comments, replies, authors, timestamps, reactions & permalinks from public or authorized posts/pages. π Export CSV/JSON for sentiment, social listening & customer feedback. β‘ Fast, reliable & proxy-ready. Ideal for research & marketing.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
12 days ago
Last modified
Categories
Share
Facebook Comments Scraper β Extract Comments, Leads, Profiles
Facebook Comments Scraper With Author Lead Enrichment turns the commenters on any public Facebook post, video, photo, or reel into structured lead rows. Every response returns typed, normalized JSON β no HTML, no selectors, no parsing β combining the full base comment (text, likes, nested replies), commenter identity and optional profile data (bio, followers, category), and contact details (emails, phones, links) mined from the comment text with a 0-100 lead score. After a run you can filter, sort, and pipe the dataset straight into a CRM, outreach tool, or AI agent.
What is Facebook Comments Scraper With Author Lead Enrichment?
Facebook Comments Scraper With Author Lead Enrichment is an Apify Actor that fetches the comments on a public Facebook post, photo, video, or reel and turns each top-level commenter into a lead row. It runs logged-out over Apify residential proxy, so no Facebook account or login is required. Every commenter row carries the full base comment fields (text, timestamp, likes, nested replies) plus author identity, optional profile enrichment, and contact data extracted from the comment body.
- Scrape comments and nested reply threads from any public Facebook post URL
- Capture commenter identity β name, profile URL, verified flag
- Optionally enrich each commenter's public profile with bio, followers, and category
- Mine emails, phone numbers, and links out of comment text and score each row 0-100
- Export as JSON, CSV, or Excel, or pull results by API for agent workflows
What data does Facebook Comments Scraper With Author Lead Enrichment collect?
Each commenter becomes one dataset row that bundles three kinds of data: the comment itself, the commenter's identity/profile, and lead-ready contact data extracted from what they wrote.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Comments & replies | comment text, timestamp, reactions, nested replies | text, date, likesCount, commentsCount, reply |
| Commenter / author profile | name, profile URL, verified flag, earned badges, bio, followers, category | authorName, authorProfileUrl, authorIsVerified, authorBadges, authorBio, authorFollowers, authorCategory |
| Lead & contact data | emails, phones, links found in comment text, lead score | commentEmails, commentPhones, commentLinks, hasContact, leadScore |
Need more Facebook data?
If you need the posts themselves rather than just their comments, Facebook Page Posts Scraper pulls a Page's posts so you can feed the URLs it finds straight into this Actor as postUrls. For community and group discussions, Facebook Groups Posts Scraper covers group posts (with its own comment preview) the same way.
How does Facebook Comments Scraper differ from the official Facebook API?
Meta's Graph API requires an approved app, a review process for most permissions, and generally only returns comment data for Pages and posts you or your app manage β it is not built for arbitrary public-post lookup. Facebook Comments Scraper With Author Lead Enrichment takes any public post URL and returns commenter data without app review or a Facebook developer account.
| Feature | Facebook Graph API | Facebook Comments Scraper |
|---|---|---|
| Access model | Requires a registered Meta app and access token | No Facebook account or token needed β runs logged-out |
| Approval process | Most comment/permission scopes require Meta App Review | No approval process β start a run directly |
| Arbitrary post lookup | Limited to Pages/posts your app is authorized for | Works on any public post, photo, or reel URL |
| Contact/lead enrichment | Not provided β Graph API returns comment text only | Extracts emails, phones, links, and a lead score from comment text |
| Setup time | Developer account, app review, token management | Provide post URLs and start the run |
The Graph API is the right choice when you own the Page and need first-party, authenticated access to your own comment moderation tools. This Actor is the better fit when you need to turn public commenters on any post β yours or someone else's β into a usable lead list without going through app review.
Why do developers and teams scrape Facebook comments?
For sales and lead-generation teams
Comment sections under competitor posts, industry pages, or viral content are full of people already raising their hand. Point this Actor at a relevant post, turn on extractCommentContacts, and every commenter who left an email, phone number, or link becomes a scored lead row (leadScore) ready for outreach β no manual copy-pasting from the comment thread.
For marketers and community managers
Marketers use commenter data to see who is actually engaging with a campaign or launch post: their name, profile link, and (with enrichAuthorProfiles on) follower count and category. That turns a comment thread into a shortlist of engaged accounts worth replying to, inviting into a community, or flagging for an influencer outreach list.
For researchers and social-listening analysts
Researchers studying public discourse on a brand, event, or topic can pull every comment on a post, including nested reply threads, with timestamps and reaction counts intact. Because the Actor only touches public content, the resulting dataset stays within the scope of public-data research on audience sentiment and engagement patterns.
For developers building lead pipelines
Developers wire this Actor's dataset output directly into a CRM, spreadsheet, or scoring pipeline: hasContact and leadScore are precomputed per row, so downstream code can filter to hasContact: true rows and push straight into a pipeline without writing regex or HTML-parsing logic first.
How to scrape Facebook comments (step by step)
- Open Facebook Comments Scraper With Author Lead Enrichment on its Apify Store listing and click Try for free (or Run).
- Add one or more public post, photo, or reel URLs to the
postUrlsfield β one per line. - Set
maxCommentersandmaxCommentsScannedto control lead volume,commentsSortOrderto choose most-relevant/newest/all, and turn onenrichAuthorProfilesif you want profile enrichment. - Start the run from the Apify Console, the API, or the CLI.
- Download the results dataset as JSON, CSV, or Excel, or pull it by API into your own pipeline.
What to do when Facebook changes its structure
The Actor is actively maintained, and the output schema stays stable β field names and types on your end don't change even when Facebook alters its markup or GraphQL internals behind the scenes. No action is required on your part when that happens.
β¬οΈ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
postUrls | No | array | One URL per line. Works with public post, photo, and reel permalinks from facebook.com. Also accepts the base startUrls key. | ["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"] |
maxCommenters | No | integer | Hard cap on how many top-level commenters (leads) to collect per URL. Also accepts the base maxComments / commentSettings.maxComments. | 20 |
maxCommentsScanned | No | integer | Hard cap on how many top-level comments are walked/scanned per URL before lead rows are built β lower = faster. The final lead-row count is the smaller of this and maxCommenters. Also accepts the base maxComments / commentSettings.maxComments. | 50 |
maxRepliesScanned | No | integer | Nested replies fetched per threaded commenter (kept in each lead row's reply[], also contact-scanned). Set 0 to skip replies, or a large number for effectively all. Also accepts the base maxRepliesPerComment / commentSettings.maxRepliesPerComment. | 2 |
commentsSortOrder | No | string | Order commenters are collected in (top / newest / all). Also accepts the base commentSettings.commentsSortOrder. | "all" |
extractCommentContacts | No | boolean | Regex out commentEmails, commentPhones and commentLinks from every comment body, set a hasContact flag, and compute a 0-100 leadScore. Turn OFF for identity-only lead rows. Default: ON. | true |
enrichAuthorProfiles | No | boolean | When ON, fetches each unique commenter's PUBLIC Facebook profile/page (logged-out) and adds authorBio, authorFollowers, authorCategory, authorLikes, authorProfileFetched. Adds one request per unique commenter, so it is slower. Works for public page-style profiles (creators, freelancers, businesses, public figures); private personal profiles expose no public data logged-out and stay null (never faked). Default: OFF. | false |
onlyCommentersNewerThan | No | string | Absolute date (2024-01-15) or relative window (1 day, 2 weeks, 3 months). Keeps only commenters whose comment is newer than this. Leave blank to disable. Also accepts the base onlyCommentsNewerThan. | "2 weeks" |
proxyConfiguration | No | object | Informational only β the scraper always attaches Apify residential proxy at runtime regardless of this setting. | {"useApifyProxy": false} |
Example JSON input
{"postUrls": ["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"],"maxCommenters": 20,"maxCommentsScanned": 50,"maxRepliesScanned": 2,"commentsSortOrder": "all","extractCommentContacts": true,"enrichAuthorProfiles": false,"onlyCommentersNewerThan": "","proxyConfiguration": { "useApifyProxy": false }}
proxyConfiguration is informational only β the Actor always routes through Apify residential proxy regardless of what you set here, so leaving it at its default has no effect on results.
β¬οΈ Output
Every run pushes typed, normalized JSON rows to the Apify dataset, exportable as JSON, CSV, or Excel. Lead rows are billed under the row_result charged event; rows where a post failed to load are pushed with type: "error" and are not billed β filter them out downstream with type != "error".
Scraped commenter lead row
{"facebookUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl","commentUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbK...?comment_id=123456789","id": "Y29tbWVudDoxMjM0NTY3ODk=","feedbackId": "ZmVlZGJhY2s6MTIzNDU2Nzg5","date": "2024-05-01T12:34:56+00:00","text": "Love this! Reach me at jane@example.com or www.janedoe.com","profilePicture": "https://scontent.xx.fbcdn.net/v/example.jpg","profileId": "100001234567890","profileName": "Jane Doe","likesCount": 4,"commentsCount": 2,"reply": [],"threadingDepth": 0,"facebookId": "123456789","inputUrl": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl","authorId": "100001234567890","authorName": "Jane Doe","authorProfileUrl": "https://www.facebook.com/jane.doe","authorIsVerified": false,"authorBadges": [],"authorBio": "Jane Doe. Graphic Designer | Logo β’ Branding β’ Social Media Designs","authorFollowers": "3.7K","authorCategory": "Graphic Designer","authorLikes": 3711,"authorProfileFetched": true,"commentEmails": ["jane@example.com"],"commentPhones": [],"commentLinks": ["www.janedoe.com"],"hasContact": true,"leadScore": 63,"type": "comment","url_key": "pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl","full_url": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"}
authorIsVerified and authorBadges come straight from the comment payload, so they are populated on every row without any extra request.
authorBio, authorFollowers, authorCategory, and authorLikes require enrichAuthorProfiles to be ON, and are only available for commenters with a public page-style profile (creators, freelancers, businesses, public figures). Meta serves no public profile document at all for private personal profiles when logged out, so those rows keep null. Use authorProfileFetched to tell "no data available" apart from "not attempted". Values are never fabricated.
Error row (post failed to load)
{"url_key": "pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl","full_url": "https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl","type": "error","error": "Failed to load post data (could not identify the post)","comments": []}
How many results can you scrape with Facebook Comments Scraper?
There is no hard-coded upper bound on commenters in the input schema β maxCommenters and maxCommentsScanned only enforce a minimum of 1, with no maximum. The Actor collects up to the smaller of the two values per post URL, so raising both raises the number of lead rows a run can return. Multiple postUrls are processed one after another in the same run, and nested replies are bounded separately by maxRepliesScanned (0 skips replies, a higher number fetches more per commenter). Actual comment volume is also bounded by how many comments the post itself has and by what Facebook serves to a logged-out session. There is no published benchmark for maximum throughput per run.
Integrate Facebook Comments Scraper and automate your workflow
Facebook Comments Scraper With Author Lead Enrichment works with any language or tool that can send an HTTP request, using the standard Apify API.
REST API integration
import requestsTOKEN = "YOUR_APIFY_TOKEN"ACTOR = "API-Empire~facebook-comments-scraper-with-author-lead-enrichment"run = requests.post(f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",params={"token": TOKEN},json={"postUrls": ["https://www.facebook.com/humansofnewyork/posts/pfbid0BbKbkisExKGSKuhee9a7i86RwRuMKFC8NSkKStB7CsM3uXJuAAfZLrkcJMXxhH4Yl"],"maxCommenters": 20,},)leads = run.json()for row in leads:if row.get("hasContact"):print(row["authorName"], row["commentEmails"])
Works in Python, Node.js, Go, Ruby, cURL.
MCP for AI agents
The Actor can be exposed to an MCP-compatible client through Apify's Actors MCP Server by adding its ID to the server's actor list, for example running npx @apify/actors-mcp-server --actors API-Empire/facebook-comments-scraper-with-author-lead-enrichment. Compatible with Claude, Cursor, and other MCP clients.
Automation platforms (n8n, Make)
In n8n, the Apify node's "Run Actor" operation can call this Actor by ID and pass postUrls and the other input fields directly from an upstream node. In Make, the Apify app's "Run an Actor" module takes the same actor ID and input JSON, letting you chain the resulting lead dataset into a CRM or Google Sheets module without custom code.
Is it legal to scrape Facebook comments?
Yes, scraping publicly accessible Facebook comments is generally legal β this Actor only returns data from public posts, photos, videos, and reels that anyone can view without logging in. Commenter names, profile URLs, and any contact details pulled from comment text are personal data, so GDPR (if you process data on EU residents) and CCPA (California residents) govern how you may lawfully store, use, and retain it β you need a valid lawful basis, such as legitimate interest, and must honor deletion/access requests. Consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Facebook Comments Scraper work without a Facebook account?
Yes. The Actor runs logged-out through Apify residential proxy with a guest-cookie warmup β no Facebook login or account is required to start a run.
How often is the scraped data updated?
Each run fetches comments live from Facebook at the time the run executes; results are not cached from a previous run. Run the Actor again to get current comments and reply counts.
What happens if a post has no comments or the URL is invalid?
If the post can't be identified or loaded, the Actor pushes a single type: "error" row with an error message instead of lead rows, and continues to the next URL in the same run. If a valid post genuinely has no comments, the run simply returns zero lead rows for that URL.
Can I scrape private or restricted Facebook content?
No. Only publicly accessible posts, photos, videos, and reels are returned. Private posts, posts visible to friends-only, and profiles that require a login to view are not accessible β enrichAuthorProfiles returns null fields for those rather than fabricating data.
Does Facebook Comments Scraper work for AI agent workflows and LLM pipelines?
Yes. It's callable as a standard HTTP API endpoint from any agent framework, and it's also reachable through Apify's Actors MCP Server for MCP-compatible clients. Every response is typed JSON with stable field names β no HTML or parsing step before passing rows to an LLM.
How does Facebook Comments Scraper handle Facebook's anti-bot defenses?
The Actor runs entirely logged-out through Apify residential proxy, performs a guest-cookie warmup (a homepage request to seed datr/session cookies) before scraping, and retries failed requests with exponential backoff. It does not use a personal Facebook login, which avoids putting any account at risk.
Does Facebook Comments Scraper return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with stable field names β no HTML, no selectors, no parsing step. Pass rows directly into an LLM context window, index them into a vector store, or route them through an agent tool call.
Can I use Facebook Comments Scraper without managing proxies?
Yes. The Actor always attaches Apify residential proxy automatically at runtime β there is no separate proxy pool to configure or maintain, and the proxyConfiguration input field is informational only.
What happens when Facebook changes its structure or blocks the scraper?
The Actor is maintained on an ongoing basis, and the output schema stays stable on your end β field names and types don't change even when Facebook's internal markup or GraphQL structure shifts. No numeric turnaround time is guaranteed.
Your feedback
Found a bug or missing a field? We want to know. Reach out through the Actor's Apify Store page (Issues tab) or your Apify Console support channel with a run ID and we'll take a look β reports like this directly shape what gets fixed and maintained.