Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Facebook Reels Scraper icon

Facebook Reels Scraper

Scrape public Facebook Page Reels: views, reactions, comments, shares, captions, hashtags, duration and MP4 links. No login needed. $0.35/1k.

5 from 1 review on Apify 660 runs on Apify $0.00035 per reel ($0.35 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust startUrls, resultsLimit, onlyPostsNewerThan (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00035 per reel = $0.35 per 1,000

You are charged forWhenPrice
ReelOne Facebook reel delivered to your dataset, with its reel link, video file URL, thumbnails, caption and hashtags, posting time, duration, frame size, soundtrack and its view, reaction, comment and share counts. Sample rows, diagnostics, duplicates and reels removed by your date filter are never charged.$0.00035

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-16, and they are what you are actually charged.

Inputs

FieldWhat it doesType
startUrlsPublic Facebook Page URLs, one per line. A bare handle (9gag), a Reels-tab URL, a /pg/ URL, a /p/ URL and a profile.php?id= URL all work. Up to 50 Pages per run. A single /reel/ link is not a Page - give the Page it belongs to.array
resultsLimitHow many recent reels to take from each Page, newest first. Default 50; raise it up to 200 for a deeper crawl. The first render returns 10 reels and the rest are paginated, so a higher number costs more time but works.integer
onlyPostsNewerThanOptional. Drop reels older than this. Accepts 2026-08-01, a full ISO timestamp, an epoch, or a relative window such as "7 days". Filtering is free - dropped reels are never charged.string
onlyPostsOlderThanOptional. Drop reels newer than this. Same formats as above. Also free.string
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array
sessionCookiesOptional. Reels tabs are read without an account. If Pages start coming back blocked, paste your own cookie here, and the run uses it for the Pages that need one. In Chrome: open facebook.com while signed in, press F12, then Application > Cookies > https://www.facebook.com, and paste the values as "c_user=…; xs=…". One line per account. Treat these like a password: anyone with them can act as that account, and Facebook may sign the session out or restrict the account for automated use.array

What you get

A structured dataset — each result includes fields like:

inputUrlpageNamepageIdpageUrlpageIsVerifiedpageProfilePicturereelIdreelUrlpostIdvideoUrlthumbnailUrlpreviewImageUrlcaptioncaptionLength

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

Facebook Page Reels - Latest

Get the latest Reels from a public Facebook Page: caption, video link, date, views, reactions and comments. No login.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Instagram Post Scraper iconSocial Media Scrapers

Instagram Post Scraper

Scrape Instagram posts and reels by link or shortcode. Rows carry caption, likes, comments, publish time, carousel media, hashtags. No login. $0.18 per 1,000.

1 use cases

Instagram Profile Scraper iconSocial Media Scrapers

Instagram Profile Scraper

Scrape Instagram profiles from handles or URLs. Get the bio, exact follower and post counts, verified flag, category and bio links. $0.70 per 1,000.

1 use cases

Instagram Reel Scraper iconSocial Media Scrapers

Instagram Reel Scraper

Scrape reels from any public Instagram profile. Play counts, likes, comments, captions, duration, MP4 and cover links, audio. $0.35 per 1,000 reels.

Ready to run — no setup

LinkedIn Post Search Scraper iconSocial Media Scrapers

LinkedIn Post Search Scraper

Scrape public LinkedIn posts by keyword: author, text, exact date, reactions, comments and post URL. No login or cookies. $0.90 per 1,000 posts.

1 use cases

LinkedIn Profile Search Scraper iconSocial Media Scrapers

LinkedIn Profile Search Scraper

Find public LinkedIn profiles by keyword, title, company, school or location: name, headline, role, profile URL. No login. $0.50 per 1,000.

2 use cases

YouTube Shorts Scraper iconSocial Media Scrapers

YouTube Shorts Scraper

Scrape YouTube Shorts by channel or keyword. Titles, ids, URLs, exact views and likes, publish dates, thumbnails. No API key. $0.40/1k.

Ready to run — no setup

See all Social Media Scrapers →

Facebook Reels Scraper: every reel a public Page has posted, not just the visible ten

Give it Page links and you get their reels back, 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
Ceiling200 reels per Page
Account neededNone from you
Price$0.35 per 1,000 reels, flat on every plan

🔍 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 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, and most runs never touch it. Your own c_user and xs pair, so heavy runs use your account's own rate limit. Treat the values like a password.

Run it with empty input and you get one labelled sample row, free, so you can see the shape before you spend anything.

📤 What you get back

A real row from a real run, with the preview link 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/lookaside/crawler/media/?media_id=1613424853508131",
  "thumbnailUrl": "https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=1613424853508131&get_thumbnail=1",
  "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"
}
FieldWhat it is
reelId, reelUrl, postIdYour key, the public /reel/ permalink, and the underlying post id.
videoUrlThe video file. Where Facebook publishes a direct link you get that one. Otherwise it is a lookaside.fbsbx.com link, which serves the MP4 to crawlers rather than to a browser tab, so it may not play if you just paste it into one.
thumbnailUrl, previewImageUrlThe cover image. previewImageUrl is a signed link that expires, so fetch anything you mean to keep.
caption, captionLength, hashtagsThe caption as written, its length, and the tags parsed out of it without the #.
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.
durationMs, durationSeconds, width, height, aspectRatioLength and geometry of the video.
audioTitle, audioIsOriginal, isReshare, isSponsoredThe audio track and whether it is the Page's own, plus whether the reel is a reshare or a paid placement.
time, timestamp, scrapedAtWhen it was posted, in ISO and epoch seconds, and when the row was read.

🧾 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 proxyConfiguration 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.

▶️ How to run it

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.

💰 How much does it cost?

$0.35 per 1,000 reels. The same rate on every Apify plan, no volume tiers.

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 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 video links included.

🚧 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
Posts from a public groupFacebook Groups Scraper
The website, email and phone on a PageFacebook Page Contact Info Scraper

❓ Questions people ask

Do I need a Facebook account? No. Public Pages read fine without one. sessionCookies is there for people running heavily who would rather use their own account's rate limit.

Can I scrape one reel by its link? Not here. Give the Page it sits on and filter the rows.

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.

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.

Can I run it on a schedule? Yes, on Apify's scheduler, or start it from the API and read the dataset when it finishes.

🆘 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.