Facebook Comments Scraper: With Replies
Pricing
from $0.17 / 1,000 comments
Facebook Comments Scraper: With Replies
Comments and replies from public Facebook posts, reels and videos, with reactions by type. $0.25 per 1,000 comments. Newest first, back to a date you choose.
Pricing
from $0.17 / 1,000 comments
Rating
0.0
(0)
Developer
Luzi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Features
Share
Get the comments of public Facebook posts, reels and videos, with their replies and the replies to those, threaded. Every row carries the text, the time it was posted, the reactions by type (like, love, haha and the rest), the reply count, mentions and attachments such as GIFs, and the commenter's id, name, profile link and picture, plus the post's own text and counts. Newest first, back to a date you choose. No Facebook account, login or cookies needed.
Tested daily. Latest checks: 1,295 comments and replies from a Page post, a group post and a video in under 3.5 minutes; 1,076 from the last 12 hours of one post, newest first.
What does this Actor do?
You give it links to Facebook posts. For each post it reads the post's page, then its comments, newest first (or in the order you choose), and, if you ask, the replies under each comment. It saves one row per comment or reply until it reaches your limit, your date, or the end of the list.
Each row comes with:
- the comment's text, the time it was posted (UTC), whether it was edited and its language
- its reactions: the total and the count of each type
- its number of replies, and for a reply: the comment it sits under, the comment or reply it answers, and that person's name
- people and pages mentioned in it, and attachments such as GIFs, with their links
- the commenter's id, name, profile link (when public), picture and verified badge
- the post, as its page shows it: its owner, text, author (with link and picture), time and link, its reactions by type, comment and share counts, photos and videos, hashtags, mentions and links, the post it shares, and a group sale's item
Why use it?
- Replies included, threaded. Turn on replies and each one links back to its comment and to the reply it answers, so you can rebuild every conversation.
- Reactions by type. See which comments got laughs and which got anger, not just a total.
- Only what's new. Give a date or a period ("6 hours") and the Actor reads newest first and stops at it, so a daily run reads only the newest comments.
- Posts, reels and videos. Page and group posts, reels and videos, and
permalink.phplinks. - Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.
How to use it
- Paste one or more post links into Post links.
- Optionally set Max comments per post, turn on Include replies, pick an Order, or fill in Only comments newer than.
- Click Start. When the run ends, open the Output tab to view the comments or download them.
Run it with no input to see a sample: up to 100 comments each from a NASA post and a reel, charged as usual.
Links that work
A post's own link, as in your browser's address bar after you open the post:
- a Page post:
https://www.facebook.com/NASA/posts/pfbid02oiNe… - a group post:
https://www.facebook.com/groups/1007033107457891/posts/1234567890123456/ - a reel:
https://www.facebook.com/reel/1557618349384047/ - a video:
https://www.facebook.com/watch/?v=1557618349384047 permalink.php?story_fbid=…&id=…links
A Page, profile or group link on its own is not a post: open the post and paste its link. Posts in private groups, and posts only friends can see, are not supported.
Use it with Facebook Posts Scraper's results
Already have post links in a Facebook Posts Scraper run? Skip the copying:
- Run the Facebook Posts Scraper, then open its run and copy the dataset id from the Storage tab (or paste the dataset's link).
- Paste it into Dataset id from a scraper run (
datasetId) here. Or schedule this Actor after the other one and pass the id each time. If your account cannot read that dataset, paste its rows into Rows from a scraper run (datasetRows) instead. - Click Start. The Actor reads each row's
urlas a link, adds it to Post links and reads its comments. Our Facebook Posts Actor writes the sameurlfield, so its dataset works too.
Rows with no usable post link, such as a Page, profile or group link on its own, are skipped, and so are rows whose own comment count is 0. The status line says how many rows were read and how many were skipped. A link in both Post links and the dataset is read once. If Post links still holds the form's example links when you give a dataset, they are left out, and the status says so. At most 10,000 rows are read from one dataset. Comments are priced as usual: each comment saved is one row, whichever way the links reached us.
Input
| Field | What it does | Default |
|---|---|---|
Post links (startUrls) | The posts to read. Required. | — |
Max comments per post (maxCommentsPerPost) | Stop after this many rows per post, replies included (to 50,000) | 100 |
Include replies (includeReplies) | Also save the replies to each comment | false |
Order (sortOrder) | newest, relevant (Facebook's default view) or all | newest |
Only comments newer than (onlyCommentsNewerThan) | A date, a time or a period such as 2 days | every comment |
Only new comments (onlyNewItems) | Return only the comments an earlier run did not; see New items only below | off |
Example input:
{"startUrls": [{"url": "https://www.facebook.com/NASA/posts/pfbid02oiNe7Qv1J9vDhhYw6bLqyVpF5fmy28wisVPKGgo3mMEh1HzBburWxYM48ppR3WQgl"}],"maxCommentsPerPost": 1000,"includeReplies": true,"onlyCommentsNewerThan": "1 day"}
New items only
Turn on Only new comments (onlyNewItems) for a scheduled run, or a
re-run of the same task. Each run then returns only the comments it has not
returned before: it reads each post back to a day before the last run that
read it, and skips the comments an earlier run saved. Skipped comments are
neither saved nor charged; each new comment is charged as usual. From the
second run on, comments are read newest first, whatever Order is set to,
and new replies under older comments are not returned in this mode: a post's
walk ends at its first comment older than the last run.
- Runs with other settings, or from another task, keep their own list, so two schedules on one post never skip each other's comments.
- If a post stops at Max comments per post, the comments past that point are not returned later. Set the maximum above what one post gets between runs.
- The list lives in your Apify account, in a key-value store named
facebook-comments-scraper-monitor. Delete it to start afresh.
Output
One row per comment or reply. An example, with made-up values:
{"comment_id": "1234567890123456","post_id": "1658876782274358","post_url": "https://www.facebook.com/NASA/posts/pfbid02oiNe7Qv1J9vDhhYw6bLqyVpF5fmy28wisVPKGgo3mMEh1HzBburWxYM48ppR3WQgl/","url": "https://www.facebook.com/NASA/posts/pfbid02oiNe7Qv1J9vDhhYw6bLqyVpF5fmy28wisVPKGgo3mMEh1HzBburWxYM48ppR3WQgl?comment_id=1234567890123456","text": "Beautiful shot!","created_at": "2026-10-17T05:18:46.000Z","depth": 0,"thread_comment_id": null,"parent_comment_id": null,"reply_to_author_id": null,"reply_to_author_name": null,"author_id": "pfbid0AbCdEfGhIjKlMnOpQrStUv…","author_name": "Jane Doe","author_url": "https://www.facebook.com/people/Jane-Doe/pfbid0AbCdEfGhIjKlMnOpQrStUv…/","author_picture_url": "https://scontent.xx.fbcdn.net/…","author_type": "User","author_is_verified": false,"reaction_count": 4,"reactions": {"like": 3,"love": 1,"care": 0,"haha": 0,"wow": 0,"sad": 0,"angry": 0,"other": 0},"reply_count": 2,"reply_count_visible": 2,"edited": false,"language": "en_XX","mentions": [],"attachments": [],"during_live_video": false,"video_offset_seconds": null,"post_owner_id": "100044561550831","post_owner_name": "NASA - National Aeronautics and Space Administration","post_text": "…","post_author_id": "100044561550831","post_author_name": "NASA - National Aeronautics and Space Administration","post_author_url": "https://www.facebook.com/NASA","post_author_picture_url": "https://scontent.xx.fbcdn.net/…","post_created_at": "2026-10-16T19:25:02.000Z","post_permalink": "https://www.facebook.com/NASA/posts/pfbid02oiNe7Qv1J9vDhhYw6bLqyVpF5fmy28wisVPKGgo3mMEh1HzBburWxYM48ppR3WQgl","post_comment_count": 1361,"post_reaction_count": 122081,"post_reactions": {"like": 98000,"love": 21000,"wow": 2100,"care": 600,"haha": 300,"sad": 50,"angry": 31},"post_share_count": 7801,"post_shared_text": null,"post_shared_post": null,"post_media": [{"type": "photo","id": "1234567890","url": "https://scontent.xx.fbcdn.net/…","width": 1080,"height": 1350,"image_text": "…"}],"post_photo_count": 3,"post_hashtags": [],"post_mentions": [],"post_links": [],"post_sale": null,"post_page_ad_library": { "id": "100044561550831", "is_business_page_active": false }}
| Field | What it holds |
|---|---|
comment_id | Facebook's id for the comment or reply |
post_id | The post's id |
post_url | The post link the Actor read |
url | A link to the comment |
text | The text (empty for a GIF- or sticker-only comment) |
created_at | When it was posted, in UTC |
depth | 0 for a comment, 1 for a reply, 2 for a reply to a reply |
thread_comment_id | For a reply: the comment its thread sits under |
parent_comment_id | For a reply: the comment or reply it answers |
reply_to_author_id | For a reply: the id of the person it answers |
reply_to_author_name | … their name |
author_id | The commenter's id |
author_name | The commenter's name |
author_url | The commenter's profile link (empty when it is not public) |
author_picture_url | The commenter's profile picture (the link expires after a while) |
author_type | User or Page |
author_is_verified | Whether the commenter has a verified badge |
reaction_count | Reactions to the comment |
reactions | Reactions by type |
reply_count | Replies to the comment, as Facebook counts them |
reply_count_visible | Replies Facebook shows to visitors |
edited | Whether the comment was edited |
language | The comment's language, as Facebook detects it |
mentions | People, Pages and links tagged in the text, with their position |
attachments | Attachments such as GIFs, with their links |
during_live_video | Whether it was written during a live video |
video_offset_seconds | On a video: the moment of the video the comment was written at |
post_owner_id | The id of the Page, profile or group the post belongs to |
post_owner_name | … its name |
post_text | The post's text |
post_author_id | The post's author |
post_author_name | … their name |
post_author_url | … their profile or Page link |
post_author_picture_url | … their picture |
post_created_at | When the post was posted, in UTC |
post_permalink | The post's own link, as Facebook gives it |
post_comment_count | The post's comment count as Facebook shows it, replies included |
post_reaction_count | The post's reactions |
post_reactions | The post's reactions by type |
post_share_count | The post's shares |
post_shared_text | The text of the post this one shares |
post_shared_post | The post this one shares: its id, link, time, author and media |
post_media | The post's photos and videos, with their links and sizes |
post_photo_count | How many photos and videos the post has |
post_hashtags | Hashtags in the post |
post_mentions | People and Pages tagged in the post |
post_links | Links written in the post |
post_sale | A group sale post's item: title, price, currency, sold or not |
post_page_ad_library | The poster's Ad Library record: its id and whether it is active |
Not included: who reacted, the commenter's friends or followers, and profile details beyond the above.
How much does it cost?
No surcharges and no paid options; an item that fails is not charged.
You pay for what you get:
- $0.25 per 1,000 comments ($0.00025 a comment). A reply counts as a comment. Each is charged once per run.
- No start fee, and nothing per post.
So 1,000 comments and replies from each of 4 posts cost $1. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every comment saved so far.
How long does a run take?
Expect about 350 comments and replies a minute. In testing, 1,295 rows from three posts took under 3.5 minutes, and 111 rows from two posts 25 seconds.
Good to know
- You may get fewer comments than the post's count. Facebook's count includes replies and comments it does not show to visitors (hidden, filtered or deleted). Newest first reaches the most. With replies on, and no date window or only-new reading of the post, the run's status sets each post's rows against that count.
- Replies: what visitors see. Facebook shows visitors most replies, and
replies to replies inside the same thread.
reply_countis Facebook's count,reply_count_visiblewhat it shows. - Picture links expire. Profile pictures and attachments are signed links that stop working after some time. Download them soon after the run if you need them.
- Post details vary by post kind. A regular post brings all of the post's fields; a reel or a video brings its text, author, time and, for a video, its counts. Fields a post's page does not show are empty.
- Check your links first. A link that is not a Facebook post link stops the run before anything is read, and the message names it.
- One post that cannot be read does not stop the run. The other posts carry on, and the run's status lists the posts that could not be read. The run fails only when no post could be read.
- A date window sees new comments, not new replies under older ones. With Only comments newer than, the walk stops at the first older comment, so a reply posted today under last week's comment is not read.
- One post under two links is read once. Its comments are saved under the first link; the second reads nothing new.
- No comments is not an error. A post with no comments, or none newer than your date, saves nothing.
More Actors from us
- Facebook Ads Library Scraper: Meta Ads by Keyword or Page: Meta Ad Library ads by keyword, Page or Ad Library link, with text, images, videos and dates.
- Facebook Pages Scraper: Contacts, Followers & Ratings: Facebook Page details from links: exact follower count, phone, email, address, websites.
- Facebook Posts Scraper: Groups, Pages & Profiles: Posts from public Facebook groups, Pages and profiles with reaction, comment and share counts.
- Airbnb Scraper: Every Stay, Past the 15-Page Limit: Every stay of an Airbnb search, past the 15 pages Airbnb shows, checked against its count.
- Alibaba Products Scraper: Price Tiers & Suppliers: Alibaba.com products by keyword or link, with price tiers in US dollars on every row.
- AliExpress Product Scraper: Search Results & Prices: Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- Amazon Product Scraper: Search Results & Prices: Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- App Store Reviews Scraper: All Reviews, Not 500: Every written App Store review of an app, not just the newest 500.
- Woolworths Coles ALDI Scraper: AU Grocery Prices: Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
Use it from an AI agent or the API
One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with POST /v2/acts/…/runs and read its dataset):
POST https://api.apify.com/v2/acts/luzivanlt~facebook-comments-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
With the sample input as its JSON body:
{"startUrls": [{"url": "https://www.facebook.com/NASA/posts/pfbid02oiNe7Qv1J9vDhhYw6bLqyVpF5fmy28wisVPKGgo3mMEh1HzBburWxYM48ppR3WQgl"},{"url": "https://www.facebook.com/reel/1557618349384047/"}],"maxCommentsPerPost": 100,"includeReplies": false,"sortOrder": "newest"}
Its inputs, in the order of the input form:
| Input | What it takes | Default |
|---|---|---|
startUrls (Post links) | Links to public Facebook posts, as in your browser's address bar: Page and group posts (https://www.facebook.com/…/posts/…, groups/…/permalink/…, permalink.php?story_fbid=…&id=…), reels, videos (watch/?v=…), photos and share links (facebook.com/share/p/…). | — |
datasetId (Dataset id from a scraper run) | The id of a run's dataset from Facebook Posts Scraper (apify/facebook-posts-scraper), so you do not copy post links by hand. | — |
datasetRows (Rows from a scraper run) | Rows pasted from Facebook Posts Scraper (apify/facebook-posts-scraper) results, as a JSON list, when its dataset id is not readable by your account. | — |
maxCommentsPerPost (Max comments per post) | Stop reading a post after this many comments, replies included. | 100 |
includeReplies (Include replies) | Also save the replies to each comment, and the replies to those replies, each marked with the comment it answers. | false |
sortOrder (Order) | Newest first reaches the most comments. | "newest" |
onlyCommentsNewerThan (Only comments newer than) | Leave empty for every comment. | — |
onlyNewItems (Only new comments) | Turn this on for a scheduled run, or a re-run of the same task: each run then returns only the comments it has not returned before, reading each post back to a day before the last run that read it. | — |
Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/facebook-comments-scraper. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=luzivanlt/facebook-comments-scraper"}}}
The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.
Charged per comment delivered; the sample input above costs at most $0.05.
FAQ
Do I need a Facebook account or cookies? No. The Actor reads the comments anyone can see on the post.
Can I get the posts of a Page or group? Not with this Actor: it reads the comments of the posts you give it.
Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.
Is it legal to scrape Facebook?
This Actor reads only comments that anyone can see without logging in. The results include commenters' names, ids, profile links and pictures, which are personal data protected by laws such as the GDPR. Only collect personal data when you have a legitimate reason to, and check Facebook's terms and the laws that apply to you. If you are unsure, ask a lawyer.
Support
Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.
This Actor is not affiliated with, endorsed by or sponsored by Facebook or Meta.
