Facebook Reels Scraper - Page Reels, Views and Links
Pricing
from $0.34 / 1,000 reels
Facebook Reels Scraper - Page Reels, Views and Links
Scrape reels from any public Facebook Page. The Reels tab shows ten; this follows the rest, up to 200 per Page. Rows have the reel link, video file, thumbnails, caption, hashtags, length and posting time. Reactions and comments are exact, views and shares rounded. $0.35 per 1,000 reels.
Pricing
from $0.34 / 1,000 reels
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
17
Total users
13
Monthly active users
2 days ago
Last modified
Categories
Share
Give it Facebook Page links and get every reel the Page has posted, newest first: the reel link, the video file, the thumbnail, the caption and hashtags, the length, the posting time and the counts underneath.
The Reels tab on a Page shows ten and stops. This keeps going, up to 200 per Page. The honest part
is the counts: reactions and comments come back exact, while views and shares are rounded by
Facebook before anyone can read them, so 65K is as precise as the public page gets.
| Input | Page links or handles, up to 50 per run |
| Output | One row per reel: reel link, video file, thumbnail, caption, hashtags, length, posting time, views, reactions, comments, shares |
| Ceiling | 200 reels per Page |
| Account needed | None from you |
| Price | $0.35 per 1,000 reels on the free plan, down to $0.335 on Business. The free plan's $5 a month covers about 14,000 |
🔍 What Facebook Reels Scraper does
It opens the Page's Reels tab as a signed-out visitor sees it, takes the first batch out of the data already in the page, then pages for the rest until it reaches your limit or the Page runs out.
The same reel found through two spellings of the same Page is delivered once and charged once, keyed
on the Page and reel ids together. Hashtags are pulled out of the caption for you, without the #.
Give it the Page, not a single reel. A /reel/<id> link on its own is rejected with an explanation,
because there is no Page in it to walk.
📋 What data you get from each Facebook reel
| What you get | Field |
|---|---|
| The reel's ids and permalink | reelId, reelUrl, postId |
| The video file and the cover image | videoUrl, thumbnailUrl, previewImageUrl |
| The caption and its hashtags | caption, captionLength, hashtags |
| When it was posted | time, timestamp |
| Views, reactions, comments and shares | viewCount, viewCountText, reactionsCount, commentsCount, sharesCount, sharesCountText |
| Length and shape | durationMs, durationSeconds, width, height, aspectRatio |
| The sound, and whether it is a reshare or paid | audioTitle, audioIsOriginal, isReshare, isSponsored |
| The Page it came from | pageName, pageId, pageUrl, pageIsVerified, pageProfilePicture, inputUrl |
▶️ How to scrape Facebook reels
- Open Facebook Reels Scraper and click Try for free.
- Put your Pages into Facebook Page URLs, one per line.
- Set Reels per Page. Start at 50 and raise it once you have seen the output.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
Run it with empty input and you get one labelled sample row, which is not charged, so you can see the shape before you spend anything.
💰 How much does it cost to scrape Facebook reels?
$0.35 per 1,000 reels. That is the free plan's price; paid plans pay a little less: $0.345 on Starter, $0.34 on Scale and $0.335 on Business. On the free plan, the $5 Apify gives you each month covers about 14,000 reels.
You pay for reels that come back with data. The sample row, every diagnostic row, reels dropped by your date filters and the same reel reached twice through two spellings of a Page are not charged, and neither is a Page with no reels on it.
📥 What you give it
{"startUrls": ["https://www.facebook.com/9gag"],"resultsLimit": 50,"onlyPostsNewerThan": "30 days"}
| Field | Default | What it is |
|---|---|---|
startUrls | none | Page links, one per line. A bare handle like 9gag, a Reels-tab link, a /pg/ link, a /p/ link and a profile.php?id= link all resolve. First 50 per run. |
resultsLimit | 50 | Reels per Page, newest first. 1 to 200. The first read returns ten and the rest are paged, so a high number costs more time but works. |
onlyPostsNewerThan | none | Drop reels older than this. A date (2026-08-01), a full timestamp, an epoch, or a window like 7 days. Dropped reels are never charged. |
onlyPostsOlderThan | none | The other end of the window, same formats. Use both to pull one month. |
proxyUrls | none | Optional. One URL per line if you want the traffic to leave through servers you already pay for. |
sessionCookies | none | Optional. Reels tabs are read without an account. If Pages start coming back blocked, add your own c_user and xs pair and the run uses it for the Pages that need one. Treat the values like a password. |
📤 What you get back
A real row from a run on 21 September 2026, with the media links trimmed:
{"ok": true,"charged": true,"recordType": "reel","inputUrl": "https://www.facebook.com/9gag","pageName": "9GAG","pageId": "100064681269092","pageUrl": "https://www.facebook.com/9gag/","pageIsVerified": true,"reelId": "1613424853508131","reelUrl": "https://www.facebook.com/reel/1613424853508131","postId": "1566435732189121","videoUrl": "https://lookaside.fbsbx.com/...","thumbnailUrl": "https://lookaside.fbsbx.com/...","previewImageUrl": "https://scontent-lax3-2.xx.fbcdn.net/v/t15.5256-10/806072546_158021194...","caption": "\"not you!\" #9gag #blackdog","captionLength": 26,"hashtags": ["9gag", "blackdog"],"time": "2026-09-20T23:33:01.000Z","timestamp": 1789947181,"viewCount": 65000,"viewCountText": "65K","reactionsCount": 1226,"commentsCount": 17,"sharesCount": 49,"sharesCountText": "49","durationMs": 26965,"durationSeconds": 26.965,"width": 1080,"height": 1920,"aspectRatio": 0.5625,"audioTitle": "9GAG · Original audio","audioIsOriginal": true,"isReshare": false,"isSponsored": false,"scrapedAt": "2026-09-21T01:25:04.740Z"}
| Field | How to read it |
|---|---|
reelId, reelUrl | Your key, and the public /reel/ permalink. |
videoUrl | The video file. Where Facebook publishes a direct link you get that one. Otherwise it is a lookaside.fbsbx.com link that may not play if you paste it into a browser tab; fetch it from code, or use the downloader below. |
previewImageUrl | A signed link that expires, so fetch anything you mean to keep. |
viewCount, viewCountText | Plays. viewCountText is Facebook's own display string ("65K") and viewCount is that string as a number, so 65000 is rounded, not exact. |
reactionsCount, commentsCount | Exact, straight from the counters. null when Facebook does not publish them on that reel. |
sharesCount, sharesCountText | Shares, rounded the same way views are. |
audioIsOriginal, isReshare, isSponsored | Whether the sound is the Page's own, whether the reel is a reshare, and whether it is a paid placement. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A reel | ok: true and charged: true | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on charged == true and you have your data. That flag is what separates real rows from the
sample and the diagnostics, not a receipt.
errorCode | What happened |
|---|---|
BAD_INPUT | Not a Page link. A single /reel/ link lands here. |
NOT_FOUND | No public Page at that link. |
NO_REELS | The Page has no Reels tab, or nothing inside your date window. The row carries the filtered count. |
BLOCKED | Facebook served something with no Page in it. Re-running usually clears it. |
PARTIAL | Paging stopped early. The row says how many reels were delivered first, and those are the only ones charged. |
NETWORK | Facebook could not be reached. |
TIME_BUDGET | The run ran out of time before reaching that Page. |
PROXY_INPUT_ADJUSTED | A connection setting this actor does not use was dropped. The run carried on. |
CHARGE_ERROR | A billing event could not be recorded. Told to you rather than hidden. |
UNEXPECTED_ERROR | Anything else, with the message attached. |
One quirk of the Console's Overview table: it shows the Page, the links and the caption, so the posting time, the counts and the duration read as missing there. Open the row or download the JSON and they are all present.
💡 What people use it for
- Watching what a competitor is shipping to Reels each week, with view counts attached.
- Finding the format that travels: sort a Page's 200 newest reels by
viewCountand look atdurationSecondson the top ten. - Building a caption and hashtag set from Pages in one niche, ready for a spreadsheet.
- Keeping an archive of your own Page's reels, thumbnails and links included.
From a Page's best reels to files you keep, in three steps:
- Run this on the Page with
resultsLimitat 200. - Sort on
viewCountand copy thereelUrlof the top ten. - Paste them into Facebook Video Downloader for an MP4 of each, with a direct download link.
🚧 What it does not do
- Views and shares are rounded.
65Kis what Facebook publishes, so65000is what you get. Reactions and comments are exact. - No comment text. You get the comment count. The comments themselves are a separate actor, linked below.
- Public Pages only. Private, age-restricted and country-restricted Pages show a signed-out visitor nothing, and come back as an uncharged diagnostic row.
- A reel with no date on it stays in. If Facebook publishes no timestamp for a reel, a date window cannot judge it, so it is delivered and charged. Those rows sort last, after every dated reel that matched.
- 200 reels per Page. Past that the Page stops paging for a signed-out reader.
- The video link can expire or refuse a browser. Fetch the file if you want to keep it.
- Nothing is translated. Captions come back in the language they were written in.
🧭 Which Facebook scraper do you need?
| If you want | Use |
|---|---|
| Reels from a Page, past the visible ten | This one |
| Ordinary posts from a Page, with photos and links | Facebook Posts Scraper |
| The comments under a reel or post | Facebook Comments Scraper |
| A reel's video as an MP4, or its sound as an MP3 | Facebook Video Downloader |
| Posts from a public group | Facebook Groups Scraper |
| The website, e-mail and phone on a Page | Facebook Page Contact Info Scraper |
| Reels from an Instagram profile | Instagram Reel Scraper |
❓ Questions people ask
Do I need a Facebook account to scrape reels?
No. Reels tabs are read without an account. If Pages start coming back blocked, sessionCookies
takes your own cookie and the run uses it for the Pages that need one.
Can I scrape one reel by its link?
Not here. Give the Page it sits on and filter the rows. For one reel's video file, the downloader in the table above takes a single reel link.
Why is viewCount a round number?
Because viewCountText is, and that display string is the only play count Facebook publishes.
Nobody can give you the exact figure from a public page.
Why did a Page return nothing?
It has no Reels tab, everything is outside your date window, or it is restricted to signed-in visitors. The diagnostic row says which. Open the Page's Reels tab in a private browser window: what a signed-out visitor sees there is what this reads.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/facebook-reels-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Facebook legal?
This reads public Pages only, never private content. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Paste the Page link you used and the run ID, and the log is enough for us to see what happened.