Facebook Post Comments Scraper — Reactions, Replies, No Login avatar

Facebook Post Comments Scraper — Reactions, Replies, No Login

Pricing

from $0.80 / 1,000 comments

Go to Apify Store
Facebook Post Comments Scraper — Reactions, Replies, No Login

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

Berkan Kaplan

Maintained by Community

Actor 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 row
has 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 — hideAuthors returns 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/post events per row; status rows and unreadable posts free.
  • 🤖 Agent-ready — MCP + a real-time Standby API.

✨ Features

  • 🔍 All comments — in relevant, newest or all order, 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)

  1. Choose your posts — one per line: a post/video/reel URL (any form) or a numeric id.
  2. Pick order & depth — order (relevant/newest/all), maxCommentsPerPost, hideAuthors for privacy.
  3. Run and export — get a clean dataset as JSON, CSV or Excel.

📥 Input

FieldDefaultWhat 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.
maxCommentsPerPost100Comments to deliver per post.
maxComments100000Comment rows in the whole run.
orderrelevantrelevant (what the site shows), newest, or all.
includePosttrueThe post as a row of its own (billed as a post event).
hideAuthors, authorCodeKeyfalseReplace 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, listNamefalse, defaultRemember delivered comments under a name and skip them later.
proxyConfigurationresidential Apify ProxyNothing 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.

FieldWhat it is
commentId, urlthe comment's id and address
postId, postUrlthe post it belongs to
author, authorId, authorUrl, authorIsVerified, authorPictureUrl, authorIsPagewho wrote it — or a stable code with hideAuthors
text, createdAtthe comment's text and when it was written (UTC)
depth, parentCommentId, replyCountthread depth (0 under the post), parent, and reply count
reactions, reactionsByTypeall reactions and each kind with its count
attachments, mentionsstickers/GIFs/photos; tagged accounts
order, position, input, type, errorread 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 ApifyClient
client = 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: all gets 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.

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

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. The isEdited column 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.