Facebook Reels & Comments Scraper
Pricing
Pay per usage
Facebook Reels & Comments Scraper
Scrape Facebook Reels with the Facebook Reels Scraper. Extract video URLs, captions, likes, comments, shares, and uploader info. Perfect for trend tracking, content analysis, and social media research. Fast, accurate, and scalable for single or bulk Reels scraping.
Pricing
Pay per usage
Rating
5.0
(1)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
30
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Reels Scraper — Extract Comments and Replies
Facebook Reels & Comments Scraper collects public Reels from any Facebook profile and, for every Reel it finds, the full comment thread underneath it — comment text, author, timestamp, likes, and reply count, with replies linked to their parent comment. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. Point it at a profile URL and get Reels and their real audience conversation in a single run.
What is Facebook Reels & Comments Scraper?
Facebook Reels & Comments Scraper is an Apify Actor that reads the public Reels tab of one or more Facebook profiles and returns a Reel row for every Reel found, followed immediately by the comment (and reply) rows scraped from that Reel — unlike a plain Reels scraper, which stops at a comment count, and unlike a plain comments scraper, which needs you to already have the exact Reel URL in hand. It runs entirely logged-out: no Facebook account, cookie, or login is required to read public Reels or their comments.
- Reel details — caption, publish time, rounded play count, video and thumbnail data, original-audio and soundtrack metadata
- Linked comment threads — top-level comments per Reel, each with author, timestamp, like count, and reply count
- Threaded replies — replies collected under each comment and linked back to it via
parentCommentId - Profile-only input — supply a profile URL or username; the Actor discovers the Reels and their comments itself, no Reel URLs needed
- Optional AI sentiment — tag each comment
positive/negative/neutral/mixedusing your own Anthropic API key - Query controls — Reels-per-profile cap, a Reel age cutoff, and independent caps on comments and replies per Reel
What data can you get with Facebook Reels & Comments Scraper?
Facebook Reels & Comments Scraper returns two linked result types on every run: Reel rows and their comment (including reply) rows.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Reel (parent row) | text (caption), time, playCountRounded, topLevelReelUrl, shareable_url, facebookUrl, inputUrl, video, playback_video, video_owner, attachments, track_title, soundtrack_info, music_album_art_uri, is_original_audio_on_facebook, feedback_id, commentCount | Content research, engagement tracking, media indexing |
| Comment / reply (child row) | id, text, authorName, authorId, authorPicture, createdTime, likeCount, replyCount, isReply, parentCommentId, parentReelId, parentReelUrl, aiSentiment (optional) | Sentiment reading, audience research, lead identification |
Comments and replies
This is the part a plain Reels scraper does not have and a plain comments scraper cannot get without the Reel URL already in hand: for every Reel discovered from a profile, the Actor fetches the Reel's own public comment thread via Facebook's internal comment API, resolves each comment's replies when includeReplies is on, and writes each one as a labelled child row linked back to its Reel by parentReelId/parentReelUrl. Replies carry isReply: true and a parentCommentId pointing at the comment they answer, so a full thread can be reconstructed from the flat row list. A row looks like this:
{"type": "comment","isChild": true,"isReply": false,"parentReelId": "1122334455667788","parentReelUrl": "https://www.facebook.com/reel/1122334455667788","parentCommentId": null,"id": "Y29tbWVudDoxMTIyMzM0NDU1XzE=","text": "This audio is stuck in my head now","authorName": "Priya Nair","authorId": "100002233445566","authorPicture": "https://scontent.xx.fbcdn.net/v/t39.30808-1/priya_profile.jpg","createdTime": "2026-07-20T14:02:11Z","likeCount": 214,"replyCount": 2,"aiSentiment": "positive"}
Reel details
Every Reel row carries the base content: caption text, an ISO publish time, a rounded play count backfilled from the profile's Reels tab (logged-out Reel pages carry no view count at all), and the video's own metadata — playback URL, thumbnail, and, when Facebook attaches one, the soundtrack's track_title and album art. This is enough to build a content calendar or an engagement report without a second scrape of the Reel page itself.
Why not build this yourself?
Meta's Graph API does not let a third-party app search an arbitrary public profile's Reels or read the comments underneath them — Facebook's comment and video endpoints are scoped to content your own app manages, so reading a profile you don't own means reading the same rendered page a browser gets. Building and maintaining that yourself means absorbing three ongoing costs:
- Query-surface volatility — the comment thread and reply queries are identified by
doc_ids embedded in obfuscated JavaScript bundles that Facebook rotates on its own schedule. This Actor resolves bothdoc_ids fresh from the Reel's page bundles on every run rather than hardcoding them, with an inline-HTML pass and two bundle-scan fallbacks if the first pass misses. - Anti-bot escalation — comment and Reel-pagination requests are retried with backoff on
429/502/503responses, and a proxy/timeout failure on the very first Reel of a profile triggers a retry on a fresh proxy IP rather than failing the whole profile. - Proxy cost — reliably reaching Reel and comment pages at volume needs residential IPs; the Actor's input defaults to Apify's residential proxy group for this reason.
Build it yourself if you need to control every request detail and can track Facebook's frontend changes on an ongoing basis. Use Facebook Reels & Comments Scraper if you want Reels and their comment threads without maintaining that pipeline.
How to scrape Facebook Reels with Facebook Reels & Comments Scraper?
- Open Facebook Reels & Comments Scraper on the Apify platform.
- Enter one or more profile URLs or bare usernames in
reelProfileUrls— this Actor has no required field, but at least one profile is needed for a run to do anything. - Set
reelsPerProfileLimit(Reels per profile),reelsNewerThan(age cutoff), and the comment controlsmaxCommentsPerReel,includeReplies, andmaxRepliesPerComment. - Start the run — the Actor resolves each profile's Reels, then each Reel's comment
doc_ids, automatically over Apify's residential proxy. - Download or stream results as JSON or CSV from the run's dataset, or read the dedicated
<runId>-commentschild dataset for comment rows only.
Example input for one profile, 10 Reels, 50 comments per Reel with replies:
{"reelProfileUrls": ["https://www.facebook.com/LeonardoDiCaprio/"],"reelsPerProfileLimit": 10,"maxCommentsPerReel": 50,"includeReplies": true,"maxRepliesPerComment": 10}
How to run multiple queries in one job
reelProfileUrls accepts an array, so a single run can mine several profiles' Reels and comments at once. The Actor processes each profile sequentially — one profile's Reels are fully collected (with their comments) before the next profile starts — rather than in parallel; the Actor does not document a configurable concurrency setting for profile-level parallelism.
⬇️ Input
Facebook Reels & Comments Scraper takes one or more profile URLs plus optional Reel and comment controls. No field is required by the schema.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
reelProfileUrls | No | array | One profile per line — a full URL (e.g. facebook.com/YourPage) or a bare username. Comments are pulled from the Reels found on each profile. | ["https://www.facebook.com/LeonardoDiCaprio/"] |
reelsPerProfileLimit | No | integer | How many Reels per profile to open and read comments from, newest-first where available. Caps parent Reel rows only (minimum 1, maximum 10000). | 10 |
reelsNewerThan | No | string | Only mine Reels newer than this. Absolute date or a relative window like 7 days, 2 weeks. Blank = no cutoff. | "7 days" |
maxCommentsPerReel | No | integer | Top-level comments to collect per Reel (default 50, minimum 0, maximum 100000). 0 skips comments and returns Reel rows only. | 50 |
includeReplies | No | boolean | Also collect replies attached to each top-level comment (default true), marked isReply: true and linked by parentCommentId. | true |
maxRepliesPerComment | No | integer | Cap on replies collected per top-level comment when replies are enabled (default 10, minimum 0, maximum 10000). | 10 |
enableAiSentiment | No | boolean | Tag each comment with a sentiment label using your own Anthropic API key (default false). Off by default — no external call is made unless this is on and a key is supplied. | false |
aiApiKey | No | string (secret) | Your Anthropic API key. Only used when AI sentiment is enabled. Costs are billed by Anthropic to your key. | "sk-ant-..." |
aiModel | No | string | Anthropic model id used for sentiment tagging (default "claude-opus-4-8"; claude-haiku-4-5 is a cheaper option for high comment volumes). | "claude-opus-4-8" |
proxyConfiguration | No | object | Route Facebook traffic through Apify Proxy. Residential is recommended for stable runs. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Example JSON input:
{"reelProfileUrls": ["https://www.facebook.com/LeonardoDiCaprio/", "https://www.facebook.com/people/Emily-Olivia/61563061022550/"],"reelsPerProfileLimit": 10,"reelsNewerThan": "","maxCommentsPerReel": 50,"includeReplies": true,"maxRepliesPerComment": 10,"enableAiSentiment": false,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Common pitfall: maxCommentsPerReel counts top-level comments only — replies are additional and bounded separately by maxRepliesPerComment. Setting maxCommentsPerReel to 0 returns Reel rows only, even if includeReplies is left on, since there are no top-level comments to attach replies to.
⬆️ Output
Every Reel is pushed to the dataset as one row, immediately followed by its comment and reply rows, each a typed JSON object with a consistent schema across runs. Comment rows are also mirrored to a per-run child dataset (<runId>-comments) for consumers that only want comments. Reel rows and comment rows are each billed as row_result; a profile-level error row (type: "profile_error") is pushed without a charged event and is not billed. Export from the Apify Console as JSON, CSV, Excel, or the platform's other supported formats.
Scraped results
[{"type": "reel","isChild": false,"startUrl": "https://www.facebook.com/LeonardoDiCaprio/","facebookUrl": "https://www.facebook.com/LeonardoDiCaprio/","inputUrl": "https://www.facebook.com/reel/1122334455667788","topLevelReelUrl": "https://www.facebook.com/reel/1122334455667788/","shareable_url": "https://www.facebook.com/reel/1122334455667788/","text": "Back on set today — grateful for this one.","time": "2026-07-20T10:00:00.000Z","playCountRounded": 3600000,"play_count_reduced": "3.6M","video_owner": { "name": "Leonardo DiCaprio", "id": "5550001112223" },"track_title": "Leonardo DiCaprio · Original audio","is_original_audio_on_facebook": true,"feedback_id": "ZmVlZGJhY2s6MTEyMjMzNDQ1NQ==","commentCount": 842},{"type": "comment","isChild": true,"isReply": false,"parentReelId": "1122334455667788","parentReelUrl": "https://www.facebook.com/reel/1122334455667788","parentCommentId": null,"id": "Y29tbWVudDoxMTIyMzM0NDU1XzE=","text": "This audio is stuck in my head now","authorName": "Priya Nair","authorId": "100002233445566","authorPicture": "https://scontent.xx.fbcdn.net/v/t39.30808-1/priya_profile.jpg","createdTime": "2026-07-20T14:02:11Z","likeCount": 214,"replyCount": 2,"aiSentiment": "positive"},{"type": "comment","isChild": true,"isReply": true,"parentReelId": "1122334455667788","parentReelUrl": "https://www.facebook.com/reel/1122334455667788","parentCommentId": "Y29tbWVudDoxMTIyMzM0NDU1XzE=","id": "Y29tbWVudDoxMTIyMzM0NDU1XzFfMQ==","text": "Right?? Been humming it all week","authorName": "Mark Reyes","authorId": "100009988776655","authorPicture": "https://scontent.xx.fbcdn.net/v/t39.30808-1/mark_profile.jpg","createdTime": "2026-07-20T15:11:04Z","likeCount": 6,"replyCount": 0,"aiSentiment": "positive"},{"type": "comment","isChild": true,"isReply": false,"parentReelId": "1122334455667788","parentReelUrl": "https://www.facebook.com/reel/1122334455667788","parentCommentId": null,"id": "Y29tbWVudDoxMTIyMzM0NDU1XzI=","text": "Congrats on the new project!","authorName": "Anna Blake","authorId": "100003399887766","authorPicture": "https://scontent.xx.fbcdn.net/v/t39.30808-1/anna_profile.jpg","createdTime": "2026-07-20T16:40:22Z","likeCount": 31,"replyCount": 0,"aiSentiment": "neutral"}]
How can I use the data extracted with Facebook Reels & Comments Scraper?
- Content researchers: pull
text,time, andplayCountRoundedacross a profile's Reels to track which topics and audio tracks perform best, and read the linked comment rows to see what audience reaction actually looked like, not just a count. - Brand and sentiment monitoring teams: enable
enableAiSentimentand aggregateaiSentimentacross a Reel's comment rows to see how audiences reacted to a specific post, or scantextfor brand mentions across every comment on a profile's Reels. - AI engineers and LLM developers: have an agent call the Actor with a profile URL, receive structured JSON with
text, comment threads, andaiSentimentalready attached, and pass it straight into a model as grounded context — no separate comment-lookup step required. - Community researchers: aggregate
authorName/authorIdacross a profile's comment rows to see which accounts repeatedly engage with a creator's Reels, and useparentCommentIdto reconstruct which replies belong to which conversation.
How do you monitor Facebook Reel comments over time?
Monitoring, here, means running the same profile URLs on a recurring schedule and diffing the comment rows between runs rather than reading one snapshot. Each comment row carries a stable id, so a new run's comment set can be compared against the previous run's by that id: any id that wasn't present before is a new comment, and a replyCount or likeCount that changed on a comment you already have is fresh engagement on it. The fields worth diffing are id (to detect new comments), likeCount and replyCount (to detect growing engagement on existing ones), and, if AI sentiment is enabled, aiSentiment (to watch whether reaction to a Reel is turning more negative as it ages).
A typical workflow: schedule a run across your tracked profile URLs (for example, daily) with a reelsNewerThan cutoff so only recent Reels are re-scanned, pull the previous run's <runId>-comments dataset via the Apify API, join both on id, and compute the delta on likeCount and the new-id count per Reel. Alert when a Reel's comment volume or negative-sentiment share crosses a threshold you define.
Facebook Reels & Comments Scraper does not include a built-in scheduler of its own, but every Apify Actor — including this one — can be attached to Apify's platform-level Schedule feature (cron-style, configured in the Apify Console or via the API) to run automatically on an interval; combine that with the Apify API's dataset endpoints to pull and diff each run's results.
Integrate Facebook Reels & Comments Scraper and automate your workflow
Facebook Reels & Comments Scraper works with any language or tool that can send an HTTP request to the Apify API.
REST API with Python
import requestsTOKEN = "<YOUR_APIFY_TOKEN>"url = "https://api.apify.com/v2/acts/scrapier~facebook-reels-comments-scraper/run-sync-get-dataset-items"payload = {"reelProfileUrls": ["https://www.facebook.com/LeonardoDiCaprio/"],"reelsPerProfileLimit": 10,"maxCommentsPerReel": 50,}resp = requests.post(url, params={"token": TOKEN}, json=payload, timeout=180)rows = resp.json() # Reel rows interleaved with their comment rowsfor row in rows:if row["type"] == "comment":print(row["authorName"], row["text"])
MCP for query-grounded AI agents
Facebook Reels & Comments Scraper can be exposed to an MCP-compatible agent through Apify's Actors MCP Server: run npx @apify/actors-mcp-server --tools scrapier/facebook-reels-comments-scraper locally with an APIFY_TOKEN environment variable, or connect the hosted server at https://mcp.apify.com and authorize it via OAuth. Once registered, an agent (in Claude Desktop, Claude Code, Cursor, or another MCP client) can call the Actor as a tool, receive Reel and comment JSON back, and ground its answer in live Reel conversations instead of stale training data.
Scheduled monitoring and delivery
There is no actor-specific webhook feature documented in this Actor's own configuration; instead, attach it to Apify's platform-level Schedule to trigger runs on an interval, and use the Apify API's run-finished webhooks or the dataset export endpoints to deliver results to your own storage or pipeline after each scheduled run.
Is it legal to scrape Facebook Reels comments?
Scraping publicly accessible Facebook Reels and their comments is generally lawful in the US — courts have held that accessing data a site makes available to any visitor, without circumventing an access barrier, does not violate the Computer Fraud and Abuse Act (hiQ Labs, Inc. v. LinkedIn Corp., 9th Cir., 2019). Facebook Reels & Comments Scraper returns only what a logged-out visitor to a public Reel already sees. Comment rows contain personal data — commenter names, profile IDs, and profile pictures — so storing them at scale can fall under GDPR or CCPA depending on your jurisdiction. Periodic monitoring carries a different risk profile than scraping for AI training on personal data, and Facebook's Terms of Service separately restrict automated collection. Consult your legal team before any commercial use case involving bulk storage.
Frequently asked questions
Does Facebook Reels & Comments Scraper require a Facebook account or login?
No. Public Reels and their comments are scraped logged-out; there is no cookie or credential field in the input at all. A residential proxy (recommended by default) is the only network dependency.
How do I control which Reels get scraped?
Use reelsPerProfileLimit to cap how many Reels per profile are opened, and reelsNewerThan to skip Reels older than an absolute date or a relative window like 7 days or 2 weeks.
How does Facebook Reels & Comments Scraper handle Facebook's anti-bot measures?
It retries comment and Reel-pagination requests with backoff on 429/502/503 responses, and if a proxy or connection error hits before any Reel has been saved for a profile, it retries that profile on a fresh proxy IP rather than failing it outright.
Does Facebook Reels & Comments Scraper extract full comment threads, not just a count?
Yes. Every Reel's commentCount (when Facebook exposes it) is a total, but the Actor also fetches the actual comment rows — text, authorName, likeCount, replyCount — and, when includeReplies is on, the replies under each one, linked by parentCommentId.
How many results does Facebook Reels & Comments Scraper return per query?
Up to reelsPerProfileLimit Reels per profile (schema maximum 10000), up to maxCommentsPerReel top-level comments per Reel (schema maximum 100000), and up to maxRepliesPerComment replies per comment (schema maximum 10000) — you set each cap; a profile with fewer public Reels or comments than your cap simply returns what Facebook has.
How do I use Facebook Reels & Comments Scraper to monitor comments over time?
Schedule the same profile URLs on an interval via Apify's Schedule feature, pull each run's <runId>-comments dataset, match comments across runs by id, and compare likeCount/replyCount (and aiSentiment, if enabled) to the previous run — alert when a Reel's new-comment count or negative-sentiment share crosses a threshold you define.
Does Facebook Reels & Comments Scraper work with Claude, ChatGPT, and AI agent frameworks?
Yes. It is callable as a plain HTTP endpoint from any agent framework, and it is also reachable through Apify's Actors MCP Server (npx @apify/actors-mcp-server --tools scrapier/facebook-reels-comments-scraper, or the hosted https://mcp.apify.com server) for MCP-native clients such as Claude Desktop and Claude Code.
How does Facebook Reels & Comments Scraper compare to other Facebook Reels and comment scrapers?
As observed on their public Apify Store listings on 2026-07-26: apify/facebook-reels-scraper returns Reel metadata (caption, play count, timestamp) but documents no comment-text field at all — only Reel-level data. Dedicated comment scrapers such as apify/facebook-comments-scraper and dz_omar/facebook-comment-scraper do return full comment threads with replies, but both require you to already supply the exact Reel or post URL as input rather than discovering Reels from a profile. Facebook Reels & Comments Scraper takes a profile URL, discovers the Reels itself, and returns both the Reel data and its linked comment threads in the same run.
Is the optional AI sentiment feature required to use this Actor?
No. enableAiSentiment defaults to false, and with it off, no external API call is made and no Anthropic key is needed — every other field populates normally. When enabled with your own aiApiKey, each comment's text is classified positive/negative/neutral/mixed via the Anthropic API, billed by Anthropic to your key; a failed classification batch leaves aiSentiment unset on those rows rather than guessing.
Can I use Facebook Reels & Comments Scraper without managing proxies or Facebook credentials?
Yes. Set proxyConfiguration to use Apify's residential proxy group (the input's default) and the Actor handles the rest — there is no Facebook login, cookie, or credential to supply for public Reels.
Your feedback
Found a bug or a field that doesn't match what's documented here? Let us know through Scrapier's Apify Store support tab or issue tracker — reports like this go straight into the next update.