Facebook Post Comments Scraper — Reactions, Replies, No Login
Pricing
from $0.80 / 1,000 comments
Facebook Post Comments Scraper — Reactions, Replies, No Login
Comments of public Facebook posts, most relevant or newest first: author (name, id, address, verification, picture — or a code instead), text, exact time, depth, reply count, reactions in total and by kind; the post itself with its counts as a row of its own. Only-new mode. No login.
Pricing
from $0.80 / 1,000 comments
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Post Comments Scraper — Reactions, Replies, No Login 🚀
foXLabs Facebook series: Page Posts · Page Profile · Page Reviews · Page Videos · Page Events
🎉 Comments of public Facebook posts, exactly as Facebook shows them to a signed-out visitor — in Facebook's own orders (most relevant, newest, all) — with the author (name, id, URL, verification, picture — or a code), the text with tagged accounts, exact time, depth, reply count, reactions in total and by kind, attachments — plus the post itself as a row with its counts. No login, no cookies, no account of anyone. Only-new mode for recurring runs.
🔍 What is the Facebook Post Comments Scraper — and when should you use it?
Give this Actor public Facebook post URLs (posts, videos or reels) and it returns their comments as clean rows — with the author, text, reactions by kind, and the post itself as a row of its own.
Use it when you need: every comment on a post (not just the top few); community sentiment and the most-reacted comments; or a recurring feed of only-new comments on a post.
Use something else when: you want a Page's posts (each with its top comments) → Page Posts; the Page's reviews → Page Reviews.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/facebook-post-comments-scraper. An agent can discover it, run it and read the dataset over MCP.
Real-time Standby API. This Actor ships a Standby endpoint so an agent can fetch a post's comments on demand — GET /comments?post=<address>&maxComments=20&order=newest&authors=0, billed with the same events.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want public Facebook post comments using the Apify Actor`foxlabs/facebook-post-comments-scraper`.Input: `posts` is a list of post URLs or ids; `order` is relevant/newest/all; `includePost`adds the post as a row; `hideAuthors` returns codes; `minReactions` filters. Each comment rowhas author, text, createdAt, reactions, reactionsByType and replyCount.Start with:{ "posts": ["https://www.facebook.com/NASA/posts/…"], "maxCommentsPerPost": 50 }Ask me which posts to read, run the Actor, then summarise the comments and sentiment.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/facebook-post-comments-scraper.md.
📋 Overview
Everything you need to turn a public Facebook post's comments into clean, structured data — every comment with its author and reactions, plus the post's own counts — in one Actor, with no login, cookies or account.
Why teams pick this Actor:
- ✅ Every comment, not the top few — pages through all of them in Facebook's own orders.
- ❤️ Reactions by kind — like/love/care/haha/wow/sad/angry each with its count.
- 🕵️ Author privacy —
hideAuthorsreturns a stable code instead of name/id/URL/picture. - 🎞️ Videos & reels too — comments on a video or reel post, with the post read from the video's page.
- 💰 Pay only for results —
comment/postevents per row; status rows and unreadable posts free. - 🤖 Agent-ready — MCP + a real-time Standby API.
✨ Features
- 🔍 All comments — in
relevant,newestorallorder, ten a call. - 👤 Author — name, id, URL, verification, picture, isPage — or a stable code with
hideAuthors. - 💬 Comment — text with tagged accounts, exact time, depth, reply count, attachments.
- 📌 Post row — the post itself with its text, media, reactions by kind and counts (
includePost). - 🔁 Only-new lists — remember delivered comments and skip them next run.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~facebook-post-comments-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"posts": ["https://www.facebook.com/NASA/posts/PFBID_EXAMPLE"], "maxCommentsPerPost": 50}'
🚀 Getting Started (3 steps)
- Choose your posts — one per line: a post/video/reel URL (any form) or a numeric id.
- Pick order & depth —
order(relevant/newest/all),maxCommentsPerPost,hideAuthorsfor privacy. - Run and export — get a clean dataset as JSON, CSV or Excel.
📥 Input
| Field | Default | What it does |
|---|---|---|
posts | — | One post per line: its URL in any form (…/posts/…, …/videos/…, /reel/…, /watch/?v=…, permalink.php, a share link) or numeric id. The url from the Page Posts Scraper works as-is. |
maxCommentsPerPost | 100 | Comments to deliver per post. |
maxComments | 100000 | Comment rows in the whole run. |
order | relevant | relevant (what the site shows), newest, or all. |
includePost | true | The post as a row of its own (billed as a post event). |
hideAuthors, authorCodeKey | false | Replace commenters' names/ids/URLs/pictures with codes; a shared key gives the same person the same code. |
minReactions | — | Keep only comments at or above this many reactions. |
onlyNewComments, listName | false, default | Remember delivered comments under a name and skip them later. |
proxyConfiguration | residential Apify Proxy | Nothing to change for normal use. |
📤 Output
One row per comment (type: "comment"), plus one per post (type: "post") with includePost. A value Facebook does not give is null.
| Field | What it is |
|---|---|
commentId, url | the comment's id and address |
postId, postUrl | the post it belongs to |
author, authorId, authorUrl, authorIsVerified, authorPictureUrl, authorIsPage | who wrote it — or a stable code with hideAuthors |
text, createdAt | the comment's text and when it was written (UTC) |
depth, parentCommentId, replyCount | thread depth (0 under the post), parent, and reply count |
reactions, reactionsByType | all reactions and each kind with its count |
attachments, mentions | stickers/GIFs/photos; tagged accounts |
order, position, input, type, error | read order and place; input line; row type / free status row |
{"type": "comment","commentId": "848869361623320","postId": "1652244896270880","text": "That eight-pronged diffraction pattern is Webb's signature…","createdAt": "2026-10-10T07:11:42.000Z","author": "Beyond Earth","authorId": "61594630482587","authorIsVerified": false,"reactions": 3,"reactionsByType": { "like": 3 },"replyCount": 0,"order": "relevant","position": 1,"input": "https://www.facebook.com/NASA/posts/PFBID_EXAMPLE"}
💼 Use cases
1. Community sentiment — read everything a post's audience said, not just the top comments.
Input: the post URL, order: all. Output: every comment + reactions. Use: gauge reaction to an announcement.
2. Most-engaged commenters — find the comments people reacted to most.
Input: the post, minReactions set. Output: high-reaction comments. Use: surface influential voices.
3. Ongoing monitoring — keep collecting only-new comments as they arrive.
Input: the post, onlyNewComments + order: newest, scheduled. Output: new comments each run. Use: live comment feed.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/facebook-post-comments-scraper').call({posts: ['https://www.facebook.com/NASA/posts/PFBID_EXAMPLE'], maxCommentsPerPost: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/facebook-post-comments-scraper').call(run_input={'posts': ['https://www.facebook.com/NASA/posts/PFBID_EXAMPLE'], 'maxCommentsPerPost': 50})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule or webhook → HTTP request to the Actor API with your posts → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay per event: comment per delivered comment row, post per delivered post row. The prices are on the Pricing tab. Nothing else is charged: no start fee, nothing for a status row, nothing for a comment the filter left out, nothing for a post that could not be read.
❓ FAQ
Can I get every comment? Yes — unlike the Page Posts Scraper's top comments, this pages through all of them in Facebook's own order.
Does it work on videos and reels? Yes — give a video or reel URL; the post row is read from the video's page and the comments page the same way.
Are replies included? Replies are counted (replyCount); this version delivers the comments under the post (depth 0). Reply texts are planned.
Can I hide commenter names? Yes — hideAuthors returns a stable code instead of name/id/URL/picture.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
🐛 Troubleshooting
- Fewer comments than the post's count — the count includes replies and comments Facebook hides from a visitor;
order: allgets every one a visitor can see. - A post returns a status row — it's from a personal profile/group, signed-in only, or has commenting off (free).
- A video post needed retries — a video's page sometimes comes without data (one in four, measured); the Actor retries up to three times before a status row.
How it reads Facebook: opens the post's page as a signed-out visitor (the post, its counts, and the first ten "most relevant" comments) and asks Facebook's comments endpoint for the rest (ten a call) in the order asked for. Residential Apify Proxy by default; rate-limited exits dropped and replaced. Every run starts with a one-call check and ends with a clear message if Facebook's queries changed.
⚠️ Trademark
Independent, third-party tool. Not affiliated with, endorsed by or connected to Meta Platforms, Inc. "Facebook" and related marks belong to their owners and are used here for identification only.
⚖️ Is it legal to scrape this data?
It reads only what Facebook shows a signed-out visitor. Comments carry the names of people who wrote them publicly; personal data is protected by the GDPR and similar laws, so only collect and process it with a legitimate basis — or turn on hideAuthors. The Actor does not log in, use anyone's account or cookies, or solve CAPTCHAs. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab — include the run id; the run's
SOURCE_REPORTrecord holds what was asked and why the run stopped. - 🧰 More clean data actors: Fox Labs on Apify
Changelog
0.1.2 — 2026-10-11 — the shared core of the family, a restart's count
- A restarted run now counts the post rows written before the restart; the post row of a video post carries the video's duration and live status (shared core updated with Page Videos, Events and Reviews; comment rows unchanged).
0.1.1 — 2026-10-11 — videos and reels
- Video and reel addresses bring their comments; the post row is read from the video's page. A reel line is opened through
/watch/?v=; a video page served without data is retried up to three times. TheisEditedcolumn was removed (Facebook doesn't give it to a visitor).
0.1.0 — 2026-10-11 — first release
- Comments of public Facebook posts as a signed-out visitor sees them: the post's page (post, counts, first ten "most relevant") and Facebook's comments query, ten a call, in the order asked for.
- Every comment row: author (name/id/URL/verification/picture — or a stable code with
hideAuthors), text with tagged accounts, exact time, depth, reply count, reactions in total and by kind, attachments; the post's id and address. The post as a row of its own (includePost). Reactions filter; free status rows; "only new" lists; restarted runs continue without duplicates. Standby mode prepared; published in batch mode.