Facebook Reels Scraper - Page Reels, Views and Links avatar

Facebook Reels Scraper - Page Reels, Views and Links

Pricing

from $0.34 / 1,000 reels

Go to Apify Store
Facebook Reels Scraper - Page Reels, Views and Links

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

Dami's Studio

Maintained by Community

Actor stats

1

Bookmarked

17

Total users

13

Monthly active users

2 days ago

Last modified

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.

InputPage links or handles, up to 50 per run
OutputOne row per reel: reel link, video file, thumbnail, caption, hashtags, length, posting time, views, reactions, comments, shares
Ceiling200 reels per Page
Account neededNone 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 getField
The reel's ids and permalinkreelId, reelUrl, postId
The video file and the cover imagevideoUrl, thumbnailUrl, previewImageUrl
The caption and its hashtagscaption, captionLength, hashtags
When it was postedtime, timestamp
Views, reactions, comments and sharesviewCount, viewCountText, reactionsCount, commentsCount, sharesCount, sharesCountText
Length and shapedurationMs, durationSeconds, width, height, aspectRatio
The sound, and whether it is a reshare or paidaudioTitle, audioIsOriginal, isReshare, isSponsored
The Page it came frompageName, pageId, pageUrl, pageIsVerified, pageProfilePicture, inputUrl

▶️ How to scrape Facebook reels

  1. Open Facebook Reels Scraper and click Try for free.
  2. Put your Pages into Facebook Page URLs, one per line.
  3. Set Reels per Page. Start at 50 and raise it once you have seen the output.
  4. Click Start.
  5. 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"
}
FieldDefaultWhat it is
startUrlsnonePage 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.
resultsLimit50Reels 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.
onlyPostsNewerThannoneDrop 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.
onlyPostsOlderThannoneThe other end of the window, same formats. Use both to pull one month.
proxyUrlsnoneOptional. One URL per line if you want the traffic to leave through servers you already pay for.
sessionCookiesnoneOptional. 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"
}
FieldHow to read it
reelId, reelUrlYour key, and the public /reel/ permalink.
videoUrlThe 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.
previewImageUrlA signed link that expires, so fetch anything you mean to keep.
viewCount, viewCountTextPlays. viewCountText is Facebook's own display string ("65K") and viewCount is that string as a number, so 65000 is rounded, not exact.
reactionsCount, commentsCountExact, straight from the counters. null when Facebook does not publish them on that reel.
sharesCount, sharesCountTextShares, rounded the same way views are.
audioIsOriginal, isReshare, isSponsoredWhether 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.

RowHow to spot itBilled
A reelok: true and charged: trueyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

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.

errorCodeWhat happened
BAD_INPUTNot a Page link. A single /reel/ link lands here.
NOT_FOUNDNo public Page at that link.
NO_REELSThe Page has no Reels tab, or nothing inside your date window. The row carries the filtered count.
BLOCKEDFacebook served something with no Page in it. Re-running usually clears it.
PARTIALPaging stopped early. The row says how many reels were delivered first, and those are the only ones charged.
NETWORKFacebook could not be reached.
TIME_BUDGETThe run ran out of time before reaching that Page.
PROXY_INPUT_ADJUSTEDA connection setting this actor does not use was dropped. The run carried on.
CHARGE_ERRORA billing event could not be recorded. Told to you rather than hidden.
UNEXPECTED_ERRORAnything 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 viewCount and look at durationSeconds on 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:

  1. Run this on the Page with resultsLimit at 200.
  2. Sort on viewCount and copy the reelUrl of the top ten.
  3. 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. 65K is what Facebook publishes, so 65000 is 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 wantUse
Reels from a Page, past the visible tenThis one
Ordinary posts from a Page, with photos and linksFacebook Posts Scraper
The comments under a reel or postFacebook Comments Scraper
A reel's video as an MP4, or its sound as an MP3Facebook Video Downloader
Posts from a public groupFacebook Groups Scraper
The website, e-mail and phone on a PageFacebook Page Contact Info Scraper
Reels from an Instagram profileInstagram 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.

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.

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.