Facebook Reels Scraper – Export Any Page's Reels
Pricing
from $3.00 / 1,000 reel returneds
Facebook Reels Scraper – Export Any Page's Reels
Scrape Reels from any public Facebook Page or profile by URL. Export video URL, description, play count, reactions, comments, length, timestamp and thumbnail to JSON, CSV or Excel. Synchronous, no login. Pay only per reel returned.
Pricing
from $3.00 / 1,000 reel returneds
Rating
0.0
(0)
Developer
EndSpec
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Simple Input-Output Example
Input (url is required):
{"url": "https://www.facebook.com/leomessi","limit": 3}
Output (one dataset item per reel):
{"video_id": "1104857291234567","post_id": "pfbid02Xq7rN8kL3mYvT9wZ1aH4","type": "reel","url": "https://www.facebook.com/reel/1104857291234567","description": "Training day at the academy 💪","timestamp": 1750112400,"length_in_seconds": 28.44,"play_count": 4821330,"reactions_count": 391204,"comments_count": 8112,"reshare_count": 15430,"author_name": "Leo Messi","thumbnail_url": "https://scontent.xx.fbcdn.net/v/t15.5256-10/thumb_1104857291234567.jpg","video_url": "https://video.xx.fbcdn.net/v/t42.1790-2/1104857291234567_hd.mp4","_query": "{\"url\":\"https://www.facebook.com/leomessi\"}"}
Important Notes:
- You get results instantly — the run is synchronous, no job queue
- Pay per result — $0.0033 per reel returned; failed and empty runs cost nothing
- No Facebook login, cookies, or API key required from you
- All data comes from public pages and profiles only
- One page URL per run — the actor scrapes a single page's Reels tab
- Contact: contact@endspec.net
Full Actor Documentation
Facebook Reels Scraper
Export the Reels from any public Facebook Page or profile by URL. Get the video URL, description, play count, reactions, comments, shares, length, timestamp, and thumbnail for each reel — as JSON, CSV, or Excel.
Overview
The Facebook Reels Scraper is an Apify Actor that extracts publicly available Reels data from a Facebook Page or profile. You give it one page URL; it resolves that page's Reels tab and returns the reels it publishes, with their engagement metrics and media links attached.
It is built for people who need Facebook Reels data in a spreadsheet or a database rather than in a browser tab: marketers benchmarking creative, analysts tracking engagement, and developers feeding a content pipeline.
What this Actor does not do: it does not scrape comments or commenter identities, it does not scrape likers or reactors, it does not download or re-host video files, it does not search Reels by keyword or hashtag, and it does not access private profiles, private groups, or anything behind a login.
What You Can Do
- Export a Page's Reels: Pull the Reels published by any public Facebook Page or profile from a single URL
- Measure Engagement: Get play count, reactions, comments, and reshares per reel
- Analyze Creative Length: Compare reel duration against engagement to find the format that performs
- Collect Media Links: Get the direct video URL and thumbnail URL for each reel
- Track Posting Cadence: Use per-reel timestamps to chart how often a page ships Reels
- Feed Downstream Tools: Export to JSON, CSV, Excel, HTML, or XML, or read the dataset via the Apify API
Data Availability
All data returned by this Actor is publicly available information. It reads only Reels that a Page or profile has published publicly on Facebook — the same content any logged-out visitor can see on that page's Reels tab. It does not access private accounts, friends-only content, or anything requiring authentication.
Actor Input Parameters
The Actor accepts the following input parameters:
url
• Type: string
• Required: Yes
• Description: Full URL of the public Facebook page or profile
e.g., https://www.facebook.com/leomessi
limit
• Type: integer
• Required: Optional
• Default: 20
• Minimum: 1 — Maximum: 100
• Description: Maximum number of reels to return. Fewer may be returned if the page has less.
e.g., 50
Important Notes:
urlis required — the run cannot start without it- Use the page URL, not a reel URL — pass the page or profile itself (
facebook.com/leomessi), not a single reel permalink (facebook.com/reel/123...) - The page must have a Reels tab — pages that have never published a Reel return the "no Reels available" message described under Output Examples, and are not charged
limitis a cap, not a target — the Actor fetches one batch of reels and trims it tolimit. If the page's Reels tab returns fewer than you asked for, you get fewer. Values near the100maximum are not guaranteed to be reachable for every page- Public pages and profiles only — private profiles cannot be read and will not return reels
Input Examples
Example 1: Default Run (URL Only)
{"url": "https://www.facebook.com/leomessi"}
When to use: The simplest case. limit defaults to 20, so you get up to 20 reels.
Example 2: Larger Pull with an Explicit Limit
{"url": "https://www.facebook.com/9gag","limit": 50}
When to use: When you want more of a prolific page's back catalogue. Remember limit is a ceiling — the page may return fewer.
Example 3: Small Sample for a Cheap Test
{"url": "https://www.facebook.com/natgeo","limit": 1}
When to use: To validate a page URL and see the output shape before committing to a large run. You are charged for one reel.
Example 4: Page With No Reels (Will Return an Error Row)
{"url": "https://www.facebook.com/some-page-that-never-posts-reels"}
Result: The page has no Reels tab to resolve, so the Actor emits a single error row with the message This page has no Reels available. You were not charged. No charge is made.
Output Structure
The Actor pushes results to the Apify dataset — one item per reel. You can download the dataset as JSON, CSV, Excel, HTML, or XML, or read it through the Apify API. The overview dataset view renders the key columns (description, author, plays, reactions, comments, shares, length, posted date, thumbnail, and reel URL) as a table.
Successful Output Format
Each reel is emitted with this structure:
{"video_id": "string","post_id": "string","type": "string","url": "string","description": "string","timestamp": 0,"length_in_seconds": 0,"play_count": 0,"reactions_count": 0,"comments_count": 0,"reshare_count": 0,"author_name": "string","thumbnail_url": "string","video_url": "string","_query": "string"}
Field Descriptions:
video_id • Type: string • Description: Facebook's identifier for the reel's video
post_id • Type: string • Description: Facebook's identifier for the post that carries the reel
type
• Type: string
• Description: Content type reported for the item (e.g. reel)
url • Type: string • Description: Permalink to the reel on Facebook
description • Type: string • Description: The reel's caption text, as published
timestamp • Type: number • Description: Publication time as a Unix timestamp in seconds (UTC)
length_in_seconds
• Type: number
• Description: Duration of the reel in seconds (may be fractional, e.g. 28.44)
play_count • Type: number • Description: Number of plays reported for the reel
reactions_count • Type: number • Description: Total reactions on the reel
comments_count • Type: number • Description: Number of comments on the reel
reshare_count • Type: number • Description: Number of times the reel was reshared
author_name • Type: string • Description: Display name of the page or profile that published the reel
thumbnail_url • Type: string • Description: URL of the reel's cover image
video_url • Type: string • Description: Direct URL to the reel's HD video stream. These are Facebook CDN links and expire — fetch them promptly if you intend to keep the media
_query
• Type: string
• Description: A JSON string echoing the page URL this run was given, e.g. "{\"url\":\"https://www.facebook.com/leomessi\"}". Useful for tracing rows back to their input when you merge datasets across runs
Note on missing fields: Reels rows carry no status field — a row in the dataset with a video_id is a successful result. Individual fields are omitted when Facebook does not publish them for a given reel, so treat any field other than the identifiers as possibly absent.
Error Output Format
When a run cannot produce reels, the Actor pushes a single row in this shape instead:
{"status": "error","_query": "string","error": "string"}
The error value is always one of the Actor's own fixed messages. These are the messages this Actor emits, verbatim:
| Situation | error message |
|---|---|
| The service is rate limited | The service is busy right now — please retry in a moment. You were not charged. |
| The data service returned a failure | The data service is temporarily unavailable — please retry shortly. You were not charged. |
| The page has no Reels tab to read | This page has no Reels available. You were not charged. |
| Any other failure (e.g. a network problem) | The request could not be completed right now. Please retry shortly. You were not charged. |
No charge is made on any error path — the charge only fires per reel actually pushed.
Output Examples
Example 1: Reel with Full Engagement Data
{"video_id": "1104857291234567","post_id": "pfbid02Xq7rN8kL3mYvT9wZ1aH4","type": "reel","url": "https://www.facebook.com/reel/1104857291234567","description": "Training day at the academy 💪","timestamp": 1750112400,"length_in_seconds": 28.44,"play_count": 4821330,"reactions_count": 391204,"comments_count": 8112,"reshare_count": 15430,"author_name": "Leo Messi","thumbnail_url": "https://scontent.xx.fbcdn.net/v/t15.5256-10/thumb_1104857291234567.jpg","video_url": "https://video.xx.fbcdn.net/v/t42.1790-2/1104857291234567_hd.mp4","_query": "{\"url\":\"https://www.facebook.com/leomessi\"}"}
Example 2: Reel with Partial Data (No Caption, Low Engagement)
Fields Facebook does not publish for a reel are simply absent from the row — here the reel has no caption and no reshares reported.
{"video_id": "8823410099887766","post_id": "pfbid09Kd3zQ1nB7cM2xR5t","type": "reel","url": "https://www.facebook.com/reel/8823410099887766","timestamp": 1748996100,"length_in_seconds": 12.0,"play_count": 341,"reactions_count": 6,"comments_count": 0,"author_name": "Riverside Bakery","thumbnail_url": "https://scontent.xx.fbcdn.net/v/t15.5256-10/thumb_8823410099887766.jpg","video_url": "https://video.xx.fbcdn.net/v/t42.1790-2/8823410099887766_hd.mp4","_query": "{\"url\":\"https://www.facebook.com/riversidebakery\"}"}
Example 3: Successful Run, No Reels Returned (Empty Dataset)
If the page's Reels tab resolves but comes back with nothing, the run succeeds and the dataset is empty — zero items, no error row, no charge:
[]
This means the page exists and has a Reels tab, but no reels were available to return.
Example 4: Page Has No Reels (Error Row)
{"status": "error","_query": "{\"url\":\"https://www.facebook.com/some-page-that-never-posts-reels\"}","error": "This page has no Reels available. You were not charged."}
Example 5: Service Temporarily Unavailable (Error Row)
{"status": "error","_query": "{\"url\":\"https://www.facebook.com/leomessi\"}","error": "The data service is temporarily unavailable — please retry shortly. You were not charged."}
Use Cases
For Social Media Marketers
Creative Benchmarking: Export a competitor's Reels and rank them by play count and reactions to see which hooks, lengths, and formats actually land before you brief your own.
Example Workflow:
- List the Facebook Pages of your 5 closest competitors
- Run the Actor once per page URL with
limitset to 50 - Export the combined dataset to CSV
- Sort by
play_countand compare againstlength_in_seconds - Brief your next batch of Reels against the top decile
For Brands and Agencies
Creator Vetting: Before you pay a creator, check whether their Reels engagement is real and consistent rather than one lucky viral hit.
Example Workflow:
- Collect the Facebook page URLs of shortlisted creators
- Run the Actor for each with
limitset to 25 - Compare median vs. maximum
play_countper creator - Check
timestampspacing for posting consistency - Shortlist creators whose engagement holds across recent reels
For Analysts and Researchers
Content Trend Analysis: Build a longitudinal picture of how a page's Reels strategy and reception change over time.
Example Workflow:
- Choose the pages that define your category
- Schedule the Actor to run weekly per page
- Append each run's dataset to your warehouse, keyed on
video_id - Convert
timestampto dates and chart cadence, duration, and engagement - Track how the category's format norms drift quarter over quarter
For Developers
Content Pipelines: Feed Facebook Reels metadata into a dashboard, CMS, or internal tool without maintaining a scraper.
Example Workflow:
- Call the Actor via the Apify API with the page URL as input
- Read the dataset items from the run
- Deduplicate against your store using
video_id - Fetch
thumbnail_url(andvideo_url, if you need the media) promptly — CDN links expire - Schedule reruns to keep engagement counters fresh
Best Practices
Input Selection
- Pass the page, not the reel — the input is a page or profile URL; a single reel permalink is not a valid target
- Test with
limit: 1first — confirm the URL resolves and the shape is what you expect before a large run - Prefer the canonical page URL — the plain
facebook.com/<page>form, without tracking query strings or trailing paths
Getting Complete Data
- Run one page per run — the Actor takes a single URL; loop at the orchestration layer for multiple pages
- Expect fewer than
limit— the Actor fetches one batch of reels, solimitcaps the result but never forces it - Re-run to refresh counters —
play_countandreactions_countare snapshots at run time and keep climbing after you read them
Error Handling
- Check for
status— a row containingstatus: "error"is a failure notice, not a reel; reel rows have nostatusfield - Treat an empty dataset as valid — zero items means the page had no reels to return, not that the run broke
- Retry the busy and unavailable messages — both are transient; wait a moment and run again
- Log run IDs — include the Apify run ID when you contact support
Data Usage
- Grab media promptly —
video_urlandthumbnail_urlare Facebook CDN links and expire; do not store them as permanent references - Key on
video_id— it is the stable identifier for deduplicating across repeated runs - Respect platform terms — use exported content for analysis, not for republishing as your own
Cost, Performance, and Limits
Pricing: Pay per result — $0.0033 per reel returned. No subscription, no minimums.
What you are charged for: the Actor charges a reel-returned event once per reel it pushes to the dataset, and nothing else. There is no per-run fee.
What you are not charged for:
- Runs that end in any error row — busy, unavailable, no Reels, or an unexpected failure
- Runs that resolve the page but return no reels (an empty dataset)
Performance: Runs are synchronous and fast — the Actor resolves the page's Reels tab and fetches one batch of reels, then returns. There is no queue to wait on and no browser to boot.
Limits to know:
- One page URL per run. Scrape multiple pages by scheduling multiple runs or driving the Actor from the Apify API.
limitaccepts 1–100, but is a ceiling on a single batch. The Actor does not paginate deeper, so a page's Reels tab may return fewer items than you request; high values are not guaranteed for every page.- Public pages and profiles only. Private profiles and login-gated content are out of reach.
- Engagement counts are point-in-time. They reflect the moment of the run.
- Media URLs expire. Facebook CDN links in
video_urlandthumbnail_urlare short-lived by design.
Data Sources and Legality
All data returned by this Actor is publicly available information published on Facebook Pages and profiles — the content any visitor can view without logging in. The Actor does not bypass authentication, does not access private profiles or groups, and does not collect data about commenters, reactors, or viewers.
Your responsibilities:
- You are responsible for complying with applicable laws, including GDPR, CCPA, and other data protection regulations
- You are responsible for complying with Facebook's Terms of Service in your use of the data
- Exported captions and videos remain the intellectual property of their creators — analysis is not a licence to republish
- Have a legitimate purpose for the data you collect and retain it no longer than that purpose requires
This Actor is not affiliated with, endorsed by, or sponsored by Facebook or Meta. Wording here is factual and is not legal advice; if your use case is sensitive, take your own counsel.
FAQ
Q: Do I need a Facebook account, cookies, or an API key? A: No. You provide a public page URL and nothing else. There is no login step and no key for you to manage.
Q: Will an empty or failed run cost me anything? A: No. You are charged only per reel actually returned. Error rows and empty datasets are free.
Q: Which pages have Reels?
A: Only pages and profiles that actually publish them. If a page has no Reels tab, the run returns This page has no Reels available. You were not charged. and is not charged.
Q: Why did I get fewer reels than my limit?
A: limit is a ceiling, not a target. The Actor fetches one batch from the page's Reels tab and trims it to your limit — if the page returns fewer, so does the run. This is expected for pages with a short Reels history.
Q: Can I scrape several pages in one run? A: No — one page URL per run. Use Apify's scheduler or the Apify API to run the Actor once per page, then merge the datasets.
Q: Can I pass a single reel's URL instead of the page's? A: No. The input is a page or profile URL; the Actor resolves that page's Reels tab. A reel permalink is not a valid input.
Q: Does this work on private profiles? A: No. Only public pages and profiles are readable.
Q: Can I download the actual video files?
A: The Actor returns video_url, a direct link to the reel's HD stream, but it does not download or host media for you. Those links are Facebook CDN URLs and expire, so fetch them promptly if you need the file.
Q: Are the play and reaction counts live? A: They are a snapshot from the moment of the run. Re-run the Actor to refresh them.
Q: Can I get the comments or the people who reacted?
A: No. This Actor returns per-reel counts (comments_count, reactions_count), not comment text or commenter/reactor identities.
Q: How do I tell a successful row from an error row?
A: Error rows have a status field set to "error" plus an error message. Reel rows have no status field at all — if it has a video_id, it is a reel.
Q: What is the _query field for?
A: It echoes back the page URL the run was given, as a JSON string. It is there so you can trace rows to their input after merging datasets from many runs.
Q: Can I use this Actor commercially? A: Yes. The data is public. You remain responsible for how you use it — see Data Sources and Legality.
Contact & Support
Questions? Need Help? We're Here for You!
For any questions, technical support, feature requests, or general inquiries about the Facebook Reels Scraper, please reach out:
Email: contact@endspec.net
Response Time: We respond within 24 hours during business days.
What to Include in Your Inquiry:
- Your question or issue description
- Actor run ID (if applicable)
- The input you used (page URL and
limit) - Any error message or status information you received
You can also report issues through the Issues tab on this Actor's Apify page.
We're committed to helping you get the most out of this Actor — whether you're integrating it into a pipeline, troubleshooting a page that won't resolve, or exploring a new use case.
Related Actors
- Instagram Instant Media Scraper – Export a public Instagram profile's media and engagement data.
- YouTube Instant Email Scraper – Find public contact emails for YouTube channels.
- LinkedIn Instant Profile Search – Search public LinkedIn profiles by name, job title, or company.
Last Updated: July 2026