Facebook Page Reels Scraper — Facebook Reels API, Views, MP4
Pricing
from $1.00 / 1,000 reels
Facebook Page Reels Scraper — Facebook Reels API, Views, MP4
Facebook page reels as rows: paste a page link and get views, duration, description, music, post date and a playable MP4 link — with an opt-in transcript per reel. No login, no cookies, exact limit. A page with no reels, a private page and a reel we cannot transcribe are never charged.
Pricing
from $1.00 / 1,000 reels
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Paste a reel link and get that reel. Paste a page link and get its reels. Most reel scrapers take a page and refuse the link you actually have; this one takes both, in the same run, in the same columns. One JSON row per reel: the reel ID and permalink, its description, the date it was posted, its duration in seconds, its view count, the music it uses, the page that posted it, a playable MP4 link and the moment that link expires — and, from a pasted reel link, the like, comment and share counts too. From $1.00 per 1,000 reels on the Business plan ($3.00 on the free plan), platform usage included, no start fee. You are charged only when a row lands in your dataset: a page with no reels, a page Facebook will not show without a login, a reel that is gone and a reel we could not transcribe all cost $0.
Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/facebook-reels-scraper
- Actor id:
steadyfetch/facebook-reels-scraper - Input:
{ "pages": ["ladbible"] }— the one field you have to set. Or{ "reelUrls": ["https://www.facebook.com/reel/1234567890"] }for individual reels. - Cap the bill: set
maxTotalChargeUsdon the run (a run option, not Actor input), e.g.0.50— the run stops when it reaches it. - Your cap is the cap.
maxItems(default 30) caps the whole run — the run never delivers or bills a row past it, across every page and every link. If your input carriesresultsLimit,limitorcountinstead — the names other reels scrapers use — the smallest of them is read asmaxItemsand one uncharged note row says so. AddmaxTotalChargeUsdand the run stops at whichever comes first; rows already in hand ship, uncharged if they could not be billed. An ask past what this actor serves in one run — more than 2,000 rows, or a run clock outside 30-3,600 seconds — is never refused: the run starts, continues at the nearest end of the range, and one uncharged row names what you asked for and what bound it.
Just want to see it work? Click Start with nothing set and the run returns built-in sample rows — the exact output shape, read from nothing and charged nothing.
Want the spoken words too? Turn on Include transcript (includeTranscript) and every delivered reel is also transcribed — transcript, transcriptLanguage, transcriptDurationSeconds and timestamped transcriptSegments ride the same row, at $0.0075 per transcript actually produced.
What one row looks like
A real delivered row, built by this actor's own parser from a harvested page listing:
{"reelId": "2430902544051423","postId": "1389159413245942","url": "https://www.facebook.com/reel/2430902544051423","description": "Who has the better snacks, England or Scotland? David Tennant decides ⚔️\n\n#davidtennant #england #scotland","createdAt": "2026-05-20T17:15:38.000Z","durationSeconds": 685.44,"viewCount": 3000000,"viewCountIsExact": false,"pageName": "LADbible","pageId": "100064556895235","pageUrl": "https://www.facebook.com/LADbible","pageIsVerified": true,"source": "page_feed","transcriptStatus": "not_requested","status": "delivered","charged": true}
videoUrl, videoUrlExpiresAt and thumbnailUrl ride the same row — they are signed links that stop working after a few hours, so they are not reprinted here. From a pasted reel link the row also carries likeCount, commentCount, shareCount and the exact view count. Every column is listed in What you get, below; a reel that could not be delivered carries the same columns with null in them plus a status saying why, and no result fee.
What you put in
| Input | What it takes |
|---|---|
pages | Facebook pages, one per line — a page name (ladbible), a page slug, or a full page link. The page's reels come back newest first, after any pinned reel. |
reelUrls | Individual reel links: facebook.com/reel/<id>, facebook.com/share/r/<code>, facebook.com/watch/?v=<id>, fb.watch/<code>, facebook.com/<page>/videos/<id>. Each returns its own row. |
startUrls | One list for both kinds, for moving over from another scraper. Every line is sorted into the right door before anything is bought, so a reel link never costs a page read and a page link never costs a lookup. |
maxItems | The hard ceiling on rows, split evenly across your pages. Default 30, up to 2,000 per run; ask for more and the run continues at 2,000 with one uncharged row saying so. |
newerThan / olderThan | A date window on the reel's own post date. |
includeTranscript | The spoken words, charged only when one was produced. |
includeSeen · resumeFromDatasetId | Re-run the same pages without paying for reels you already have. |
Mix pages and reel links freely. A reel link put in the pages box is routed to the reel door automatically rather than refused, and one uncharged note row says so.
What you get
| Column | What it is |
|---|---|
reelId · postId · url | The reel's own ID, the post ID behind it, and the permalink you can open. |
description | The reel's text, as the page wrote it. Present on page listings and on pasted links alike. |
createdAt | When the reel was posted, ISO-8601 UTC, from Facebook's own creation time. |
durationSeconds | The reel's length. |
viewCount | Plays, as Facebook publishes them. |
likeCount · commentCount · shareCount | Numbers on a row that came from a pasted reel link; explicit null on a row that came from a page listing — Facebook's reels feed does not carry them, and the row says so rather than buying a second read you did not ask for. |
videoUrl · videoUrlExpiresAt | A directly playable MP4 link, and the moment Facebook's signature on it stops working (about five days out). |
thumbnailUrl | The reel's cover image. |
musicTitle · musicArtist | The attached audio track where the reel has one. |
pageName · pageId · pageUrl · pageIsVerified | The page that posted it. |
source | page_feed or link — which door this row came through. |
transcript · transcriptLanguage · transcriptDurationSeconds · transcriptSegments · transcriptStatus · transcriptReason · transcriptCharged | The transcript leg, always present, explicit null when there is no transcript and a reason that says which. |
charged · chargedEvents · status · statusReason · retryable | What billed, what happened, and whether a re-run is worth it. |
What is null, and why. likeCount, commentCount and shareCount are on a row served by the reel-link door, because that is the only Facebook surface that publishes them. A page listing carries views and duration, so on those rows the three counts are null — the Facebook answer, not a scrape miss. Every column is present on every row: a value or null, never a column that comes and goes.
Column names are ours and they stay put. Facebook's wire is read in one place and renamed once, so a Facebook rename does not rename your columns, and a fixed-schema table or sheet never breaks on a new row.
What is never charged
- A page with no reels, a page that does not exist, and a page Facebook will not show without a login — each one ships as a labelled row that says which. Open the page in a private window to check it yourself.
- A pasted reel link Facebook answers is gone or private: one uncharged row saying so, never an empty run that looks like success.
- A read that failed on our side — a wall, a rate limit, a timeout: one uncharged row that says it is worth a re-run.
- Reels dropped by your own
newerThan/olderThanwindow. They filter on the reel's own post date, after the listing, and the status line says how many were dropped. - Reels beyond your
maxItemscap, and reels your account already had. A page listing skips those (includeSeenoff) and the next new reel takes its place; a reel you pasted a LINK to is one you named, and there is no next reel behind it, so it always comes back either way — markedrepeat: true, with no transcript leg and no result fee. - A transcript that could not be produced — no speech, music only, no audio track, an expired media link, a transcription failure, or a reel longer than 180 seconds. The reel row still delivers and still bills; the transcript does not.
- Starting a run. There is no start fee, per reel or per run.
Only today's reels?
Set newerThan — 2026-09-01, or 7 days. Page reels arrive newest first, so a daily run with the default limit catches everything posted since. The filter compares against the reel's creation time, which is on every row, and the status line reads back exactly what happened: listed 20, 13 older than your date were dropped (not charged), 7 delivered.
How often the data changes
A busy page posts reels daily; a quiet one posts monthly. viewCount keeps climbing for weeks after a reel is posted, so a weekly re-run on the same page is the cheapest way to watch a reel's reach — with includeSeen off you pay only for what is new. That memory is a key-value store in your own Apify account, so a run started with a scoped API token in restricted-access mode needs key-value store Read, Write and Create permission (or Actor runs set to Full access); without it the run says so on its status line and cannot skip what you already have (Write is what lets the run remember what it delivered; without it every run pays again). The videoUrl is a signed link and Facebook's signature expires about five days out (videoUrlExpiresAt tells you when), so download the MP4 in the same week you fetch the row.
Pricing
| Event | Free plan | Bronze | Silver | Business (Gold) |
|---|---|---|---|---|
| Reel — one row from a page listing | $0.003 | $0.002 | $0.0015 | $0.001 |
| Reel lookup — one row from a pasted reel link | $0.012 | $0.008 | $0.006 | $0.005 |
| Reel transcript — charged only when one was produced | $0.015 | $0.010 | $0.0075 | $0.0075 |
A page listing row and a pasted-link row never both bill for the same reel: a row bills exactly one of Reel or Reel lookup, and chargedEvents on the row names which. Platform usage is included in all three; there is no start fee.
Related actors
- Any reel, any length, by the minute: Media Transcriber — https://apify.com/steadyfetch/media-transcriber
- Facebook and Instagram ads with their creative text and video: Facebook Ad Library Scraper — https://apify.com/steadyfetch/facebook-ad-library-scraper
- Instagram reels with their transcripts: Instagram Reel Transcript Scraper — https://apify.com/steadyfetch/instagram-reel-transcript-scraper
Something not right?
Open the Issues tab on this actor with your run ID and the input you used, and it gets looked at. If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.