Facebook Reels Scraper
Pricing
$19.99/month + usage
Facebook Reels Scraper
Facebook Reels Scraper extracts detailed data from Facebook Reels, including video links, captions, likes, comments, and creator profiles. It automates the process for marketers, analysts, or researchers, delivering structured JSON or CSV outputs ready for insights or automation workflows.
Pricing
$19.99/month + usage
Rating
5.0
(6)
Developer
Scraper Engine
Maintained by CommunityActor stats
5
Bookmarked
402
Total users
5
Monthly active users
4 days ago
Last modified
Categories
Share
Facebook Reels Scraper — Captions, Timing and Video Metadata
Facebook Reels Scraper pulls public Reels from any Facebook profile or Page you point it at, returning caption text, publish time, rounded play counts, and full video metadata for every Reel. Give it one or more profile URLs and it hands back structured JSON — no HTML parsing, no manual copy-paste. Results stream into your dataset row by row as each Reel finishes, so you can start working with the data before the run ends. Try it now.
What is Facebook Reels Scraper?
Facebook Reels Scraper is an Apify Actor that collects public Reels — captions, timestamps, video metadata, and rounded play counts — from any Facebook profile or Page URL you supply, returning normalized JSON rows in your dataset. It scrapes logged-out, reading only what Facebook already shows a visitor without an account, so no Facebook login, password, or cookies are required. It's built for social media managers, content researchers, and developers who need Reels data fed into a dataset, spreadsheet, or AI pipeline without maintaining their own scraper.
What Facebook Reels data is publicly available to scrape?
Facebook shows a profile's public Reels — caption, publish time, playback video, and rounded play count — to any visitor, logged in or not.
| Data category | Available without login | Gated behind |
|---|---|---|
| Caption, publish time, playback video | Yes | — |
Rounded play count (e.g. "3.6M") | Yes, via the Reels tab | — |
| Soundtrack / original-audio info | Yes | — |
| Private or friends-only profile's Reels | No | Login + accepted friend/follow |
| Comments and reactions on a Reel | No | Login |
| Exact (non-rounded) play count | Never published, even logged in | — |
| Profile's other tabs (Timeline, Photos) | Publicly viewable | Not extracted by this Actor |
Facebook Reels Scraper only returns publicly visible data — nothing behind a login wall.
What data can I extract with Facebook Reels Scraper?
Facebook Reels Scraper returns identity and link fields, engagement and audio metrics, and raw media/tracking objects for every Reel it collects.
| Field name | Description |
|---|---|
facebookUrl | URL of the profile/Page that owns the Reel |
inputUrl | The /reel/{id} URL the row was built from |
topLevelUrl | Derived top-level post URL for the Reel |
topLevelReelUrl | Canonical Reel URL, trailing slash included |
shareable_url | Facebook's shareable link for the Reel |
startUrl | The profile URL from your input that produced this row |
text | Reel caption/description |
time | Publish timestamp, ISO 8601 UTC |
video_owner | Raw owner object (name, id, url, etc.) as returned by Facebook |
video_owner_type | Owner type string, e.g. "FACEBOOK_USER" |
Engagement, audio and flags
| Field name | Description |
|---|---|
playCountRounded | Rounded play count parsed to an integer (e.g. "3.6M" → 3600000) |
play_count_reduced | Facebook's own rounded plays display string |
is_passive_content | Facebook's passive-content flag |
is_original_audio_on_facebook | Whether the Reel uses original (not licensed) audio |
soundtrack_info | Raw audio-track object when Facebook attaches one, else null |
track_title | Audio/soundtrack display title |
music_album_art_uri | Cover-art image URL for the soundtrack |
self_view_boost | Raw self-view-boost value from Facebook's video context |
Media and raw tracking objects
| Field name | Description |
|---|---|
video | Raw video object (duration, thumbnail, embeddable flag, etc.) |
playback_video | Raw playback object — thumbnail image, audio language, length in seconds |
attachments | Raw attachment list carrying the video media object |
tracking | Raw Facebook tracking object, includes top_level_post_id |
if_should_change_url_for_reels | Raw object Facebook uses to signal an updated shareable URL |
fb_shorts_reshare_context | Raw reshare-context object (populated when the Reel is a reshare) |
remix_info | Raw remix-availability object |
🤖 Add-on: Need additional Facebook data?
Facebook Reels Scraper focuses only on the Reels tab. If you also need a profile's regular timeline, pair it with Facebook Posts Scraper for captions, reactions, and shares on standard posts, or Facebook Comments Scraper: Reaction Breakdown to pull the comment threads and reaction splits this Actor doesn't collect. For page-level engagement scoring across a whole posting history, Facebook Page Posts Scraper With Engagement Analytics adds virality and ranking metrics on top of the raw posts.
How does Facebook Reels Scraper differ from the official Facebook API?
Meta's Graph API only returns Reels/video data for Pages and accounts that have granted your registered app permission — it isn't a general-purpose way to pull another Page's public Reels. Facebook Reels Scraper works from a public profile URL with no app, token, or review process involved.
| Feature | Meta Graph API | Facebook Reels Scraper |
|---|---|---|
| Access to any public profile's Reels | Requires the account's own access token, or an approved Page Public Content Access review | Works from just the profile URL |
| App review / approval | Required for most content permissions | None |
| Authentication | Registered app + OAuth access token | None — optional Apify Proxy only |
| Setup time | Developer account, app creation, review cycle | Paste a URL and start a run |
| Bulk / multi-profile access | Limited to profiles that authorized your app | One run across a list of profile URLs |
| Output consistency | Varies with the permission scope granted | Same JSON schema on every run |
Use the Graph API when you manage the Page yourself and want an officially sanctioned integration. Use Facebook Reels Scraper when you need Reels data from profiles you don't own or can't get an approved token for.
How to use Facebook Reels Scraper
Facebook Reels Scraper runs on the Apify platform — no separate signup or API key beyond your Apify account is needed to start a run.
- Open Facebook Reels Scraper on the Apify Store and click Try for free / Start.
- Add one or more Facebook profile URLs, or bare usernames, under Profile URLs — this is the only required input.
- Optionally set Max Reels per profile (default 10, up to 10,000) and a cutoff under Only posts newer than.
- Attach a proxy under Proxy — Residential is prefilled and recommended for Facebook.
- Click Start. Rows land in the dataset as each Reel is saved; export as JSON, CSV, or Excel once the run finishes.
How to scale to bulk Facebook Reels extraction
startUrls takes a list, not a single value — paste dozens of profile URLs into one run and the Actor works through them in sequence, applying the same resultsLimit and date cutoff to each. There's no separate "bulk mode" input: scaling up is just adding more lines to Profile URLs. For very large batches, splitting profiles across a few runs keeps any single run shorter and easier to monitor.
What can you do with Facebook Reels data?
- A social media manager tracking brand mentions uses
textandtimeto log which Pages posted about a topic and when. - A music-licensing analyst uses
track_titleandsoundtrack_infoto find which Reels are built on a specific audio track. - A competitive researcher uses
playCountRoundedandvideo_ownerto rank which Pages' Reels are reaching the widest audience. - A content archivist uses
shareable_urlandvideoto build a durable record of a Page's Reels history. - An AI/content team feeds the
textcaption field into an LLM summarization or tagging pipeline, auto-classifying Reels by theme before indexing them into a RAG search tool.
How does Facebook Reels Scraper handle rate limits and blocking?
The Actor routes requests through Apify Proxy (Residential is prefilled) via a shared session, and rotates to a fresh proxy URL whenever a profile hits a transient network error (proxy error, connection error, chunked-encoding error, or timeout), retrying that profile up to 4 times. GraphQL pagination requests retry up to 6 times with exponential backoff on HTTP 429 and 502/503/504 responses, and individual /reel/{id} page fetches retry up to 3 times on 429/503. Reel pages are fetched with limited concurrency (10 at a time) rather than all at once, and a short pause is inserted between profiles in the same run.
If a profile still fails after all retries, the Actor logs the error and pushes one profile_error row for that profile instead of stopping the run — every other profile in your list still gets processed. The Actor does not solve CAPTCHAs; if a request is blocked outright, that Reel or profile row carries a request_error or parse_error field instead of being silently dropped.
⬇️ Input
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
startUrls | Yes | array | One URL per line — e.g. facebook.com/YourPage or a /people/… link. Usernames without https:// work too. | ["https://www.facebook.com/LeonardoDiCaprio/"] |
resultsLimit | No | integer | Stop after this many Reels from each profile (newest-first order where available). Default 10, min 1, max 10000. | 25 |
onlyPostsNewerThan | No | string | Absolute: pick a date. Relative: e.g. 7 days, 2 weeks. Leave blank for no cutoff. Default "". | "30 days" |
proxyConfiguration | No | object | Route traffic through Apify Proxy (recommended for fewer blocks). | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Example input
{"startUrls": ["https://www.facebook.com/LeonardoDiCaprio/","https://www.facebook.com/people/Emily-Olivia/61563061022550/"],"resultsLimit": 25,"onlyPostsNewerThan": "30 days","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
⬆️ Output
Each Reel is pushed to the dataset as one typed JSON row, with the same field names on every run. As with any Apify dataset, results export to JSON, CSV, Excel, HTML table, or RSS directly from the run's Dataset tab. Only successful Reel rows are billed as the row_result event; a profile that fails outright produces a profile_error row instead, and that row is pushed without a charge. Filter it out of downstream processing with type !== "profile_error".
Example output
{"facebookUrl": "https://www.facebook.com/LeonardoDiCaprio/","inputUrl": "https://www.facebook.com/reel/1729248401649246","topLevelUrl": "https://facebook.com/1729248401649246/posts/undefined/","topLevelReelUrl": "https://www.facebook.com/reel/1729248401649246/","shareable_url": "https://www.facebook.com/reel/1729248401649246","text": "Behind the scenes from today's shoot","time": "2026-06-18T14:32:05.000Z","playCountRounded": 3600000,"play_count_reduced": "3.6M","video_owner": {"name": "Leonardo DiCaprio","id": "5219675996","url": "https://www.facebook.com/LeonardoDiCaprio/","is_verified": true},"video_owner_type": "FACEBOOK_USER","video": {"id": "1729248401649246","playable_duration_in_ms": 18400,"embeddable": true,"__typename": "Video"},"playback_video": {"length_in_second": 18.4,"image": { "uri": "https://scontent.xx.fbcdn.net/v/thumb.jpg" },"audio_user_preferred_language": "en"},"attachments": [{ "media": { "playable_duration_in_ms": 18400, "owner": { "id": "5219675996" } } }],"tracking": { "top_level_post_id": "1729248401649246" },"self_view_boost": null,"if_should_change_url_for_reels": { "shareable_url": "https://www.facebook.com/reel/1729248401649246/" },"is_passive_content": false,"fb_shorts_reshare_context": {},"remix_info": {},"soundtrack_info": { "id": "920157419536052", "type": "CUSTOM_AUDIO" },"track_title": "Leonardo DiCaprio · Original audio","music_album_art_uri": "https://scontent.xx.fbcdn.net/v/art.jpg","is_original_audio_on_facebook": true,"startUrl": "https://www.facebook.com/LeonardoDiCaprio/"}
How does it work?
Facebook Reels Scraper requests a profile's main page and its Reels tab through the same HTTP session (optionally routed over Apify Proxy), then reads the Reel identifiers embedded in that page's JSON. If more Reels exist than were found on the initial pages, it resolves Facebook's internal GraphQL pagination query and walks additional pages until it reaches your resultsLimit or runs out of Reels. Each Reel ID is then fetched as its own /reel/{id} page, and the caption, timing, video, and audio fields are pulled out of that page's embedded JSON. Only what a logged-out visitor could already see is ever returned, and the output field names stay the same regardless of how Facebook's page layout changes.
Integrations
Facebook Reels Scraper works with the tools you already use to move data around — call it directly over HTTP, or connect it to a no-code automation platform.
Calling Facebook Reels Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("Scraper-Engine/facebook-reels-scraper").call(run_input={"startUrls": ["https://www.facebook.com/LeonardoDiCaprio/"],"resultsLimit": 25,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["text"], item["playCountRounded"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
MCP integration for AI agents
Facebook Reels Scraper is reachable through Apify's Actors MCP Server, which exposes Actors on Apify Store as callable tools for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by connecting from this Actor's page in Apify Console, or by running npx @apify/actors-mcp-server configured with this Actor's store ID.
No-code tools (n8n, Make, LangChain)
In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint with your Apify API token in the Authorization header. In Make, use the Apify app's "Run Actor and get dataset items" module and map startUrls from an earlier scenario step. In LangChain, call the same Apify API endpoint from a custom Tool, or load results with the community Apify dataset loader, so an agent can pull fresh Reels data mid-conversation.
Is it legal to scrape Facebook Reels?
Scraping publicly available Facebook Reels is generally lawful — this Actor only returns data any visitor can already see on a public profile or its Reels tab, without logging in or bypassing any wall. Because a Reel's caption, owner name, and profile URL can identify a real person, that output is personal data under GDPR and CCPA: you need a lawful basis to store and process it, and should minimize what you retain to what your use case actually needs. Facebook's own Terms of Service also govern automated access to the site independently of data-protection law. Consult legal counsel if your use case involves bulk storage of personal data or spans multiple jurisdictions.
Frequently asked questions
What Facebook Reels fields does Facebook Reels Scraper return?
It returns text (caption), time (publish timestamp), playCountRounded, video_owner, and shareable_url among the full set of fields — see What data can I extract above for the complete list.
Does Facebook Reels Scraper require a Facebook account or login?
No. It reads only the public profile page and public Reels tab that any visitor sees logged out — no Facebook username, password, or cookies are needed.
How many Reels can I extract in one run?
Up to 10,000 per profile, set via resultsLimit, applied separately to every profile URL in your input list.
What happens if a profile has no public Reels or doesn't exist?
The run still completes; that profile simply returns fewer rows (or none) than your resultsLimit, and the log notes that the profile may not have that many public Reels or that Facebook limited what it returned. If the whole profile request fails outright, a single profile_error row with an error field is pushed instead, and the rest of your profile list still runs.
Can I scrape multiple Facebook profiles at once?
Yes. startUrls accepts an array — add as many profile URLs or usernames as you need and they're processed in one run, each with its own resultsLimit and date cutoff applied.
Does Facebook Reels Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's reachable through Apify's Actors MCP Server (npx @apify/actors-mcp-server) for MCP-compatible clients, and callable as a plain HTTP endpoint from any agent framework that can make a request.
Does Facebook Reels Scraper return data in a format LLMs can use directly?
Yes. Every run returns typed, normalized JSON with the same field names across profiles and runs — no HTML, no selectors to write. Pass it straight to an LLM prompt, a vector store, or an agent tool.
What happens when Facebook changes its layout or anti-bot system?
The Actor reads Reels from Facebook's embedded page JSON rather than visual HTML, and is maintained to track changes to that structure; the output schema stays the same regardless of Facebook UI changes.
Can I use Facebook Reels Scraper without managing proxies or browser infrastructure?
Yes. Apify Proxy (Residential is prefilled) is built in, and the Actor handles requests and retries directly — no headless browser or proxy pool to run yourself.
Which fields work best for AI training data and RAG indexing?
For RAG indexing, use text (caption) as the retrievable content, paired with shareable_url as the source link. For structured training data, time, playCountRounded, and video_owner return consistently across every row and all fields come back as typed primitives, not strings to re-parse.
What does Facebook Reels Scraper NOT return?
It doesn't return likes, reactions, comment counts, share counts, or hashtag lists — Facebook doesn't expose those on the public Reel surface this Actor reads, so they're omitted rather than returned empty or guessed.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Facebook Posts Scraper | Timeline posts — captions, reactions, shares |
| Facebook Comments Scraper: Reaction Breakdown | Comments with a per-reaction-type breakdown |
| Facebook Page Posts Scraper With Engagement Analytics | Posts plus virality and engagement-rank metrics |
| Facebook Marketplace Scraper | Listings — price, location, seller, detail fields |
| Instagram Reels Scraper Pay Per Events | Instagram Reels — caption, views, likes, creator data |
| TikTok Trending Videos Scraper With Author Profile | TikTok videos with creator profile attached |
Your feedback
Found a bug or a field that's missing from your data? Let us know so we can take a look — reach out through Scraper Engine's Apify Store support channel with your run ID, and your report directly shapes what gets fixed next.