Facebook Reels Scraper
Pricing
$1.50 / 1,000 reel results
Facebook Reels Scraper
Scrape public Facebook Reels from Pages, profiles or direct Reel URLs. One row per Reel: caption, hashtags, mentions, plays, reactions, comments, shares, creator details, thumbnail, HD/SD video URLs, audio/music metadata and subtitle tracks. No Facebook login or cookies.
Pricing
$1.50 / 1,000 reel results
Rating
0.0
(0)
Developer
Delowar Munna
Maintained by CommunityActor stats
0
Bookmarked
29
Total users
13
Monthly active users
13 hours ago
Last modified
Categories
Share

Scrape public Facebook Reels from Pages, profiles or direct Reel URLs. Get one clean row per Reel with the caption, hashtags and mentions, publish time, duration, plays, reactions, comments and shares, creator details, thumbnail, direct HD/SD video URLs, audio / music metadata and native subtitle tracks. Export as JSON, CSV or Excel. No Facebook login, cookies or session needed.
💬 Need the comments on these Reels? Pass the
reelUrlvalues from this Actor's output to Facebook Comments Scraper — every public comment and reply as one row each, also with no login. See Scrape a Reel's comments.
What does it scrape?
| You paste | You get |
|---|---|
A Page or profile — https://www.facebook.com/natgeo, its /reels/ tab, profile.php?id=…, or just natgeo | Its public Reels, newest first, up to your per-source limit |
A Reel — /reel/<id> or /<page>/videos/<id> (share links accepted too — see FAQ) | That one Reel |
Mix both in one run. Each input is detected automatically — you never choose a mode.
Quick start
{"startUrls": ["https://www.facebook.com/natgeo/reels/"],"resultsLimit": 100}
One Reel
{"startUrls": ["https://www.facebook.com/reel/1468011281530429"]}
Several Pages at once
{"startUrls": ["https://www.facebook.com/natgeo","https://www.facebook.com/bbcnews","9gag","https://www.facebook.com/profile.php?id=4"],"resultsLimit": 50}
Monitoring — only Reels from the last 30 days
{"startUrls": ["https://www.facebook.com/NatGeo","https://www.facebook.com/bbcnews"],"resultsLimit": 500,"reelsNewerThan": "30 days","includeVideoUrls": true,"includeAudio": true,"includeSubtitles": true}
The Reels tab is newest-first, so the Actor stops paging a Page as soon as its Reels are older than your limit. You don't pay — in time or money — for history you didn't ask for.
Input
| Field | Default | What it does |
|---|---|---|
startUrls | — | Pages, profiles, usernames and/or Reel URLs. Required. |
resultsLimit | 100 | Maximum Reels saved per Page/profile. A Reel URL always returns at most one. |
reelsNewerThan | empty | "24 hours", "7 days", "30 days", "2 weeks", or a date like "2026-09-01". Applies to Page/profile inputs; a Reel URL you paste directly is always returned. |
includeVideoUrls | true | Direct HD and SD .mp4 URLs. |
includeAudio | true | Soundtrack title, artist, type (library music or the creator's own sound), audio id. |
includeSubtitles | true | Native caption tracks (.srt URLs with language). |
includeUnavailableRows | false | Add an empty, uncharged row for each input that returned nothing, with a status saying why. |
proxyConfiguration | Apify Proxy | See Proxy policy. |
Supported URL forms
https://www.facebook.com/natgeo Page (fetched as its Reels tab)https://www.facebook.com/natgeo/reels/ Reels tabhttps://m.facebook.com/natgeo · web.facebook.com mobile / web hosts are normalisedhttps://www.facebook.com/profile.php?id=4 profile by numeric idhttps://www.facebook.com/people/Name/1000…/ profile without a usernamenatgeo · @natgeo bare usernamehttps://www.facebook.com/reel/1468011281530429 a Reelhttps://www.facebook.com/share/r/<token>/ a Reel share link (see FAQ)https://fb.watch/<token>/ a short video link (see FAQ)https://www.facebook.com/natgeo/videos/<slug>/<id>/ a Reel's long-form link
Rejected, with the reason in the log: non-Facebook URLs, Facebook groups (not readable without logging in), and post or photo URLs (they are not Reels — use Facebook Posts Scraper for those).
Output
One row per unique Reel. The dataset has three views — Reels, Engagement and Media & audio — and every field is also in the full JSON.

The samples below are one real Reel from a platform run on https://www.facebook.com/natgeo/reels/
(long fbcdn URLs shortened with …).
Reels view
{"thumbnailUrl": "https://scontent-ord5-2.xx.fbcdn.net/….jpg?…","reelUrl": "https://www.facebook.com/reel/1630829815361367","creatorName": "National Geographic","publishedAt": "2026-10-01T19:00:51.000Z","caption": "Presented by ROLEX . It's not easy to find water in one of Africa's driest landscapes, but flying saucer beetles have a …","playsCount": 307000,"reactionsCount": 2177,"commentsCount": 13,"sharesCount": 44,"durationSeconds": 29.546,"hashtags": ["#Rolex", "#PerpetualPlanet", "#AfricaEarthsWildHome"],"inputUrl": "https://www.facebook.com/natgeo/reels/","status": "SUCCESS"}
Engagement view
{"reelUrl": "https://www.facebook.com/reel/1630829815361367","creatorName": "National Geographic","creatorFollowersCount": 51305133,"publishedAt": "2026-10-01T19:00:51.000Z","playsCount": 307000,"playsCountText": "307K","playsCountIsExact": false,"reactionsCount": 2177,"commentsCount": 13,"sharesCount": 44,"sharesCountIsExact": true,"durationSeconds": 29.546}
Media & audio view
{"thumbnailUrl": "https://scontent-ord5-2.xx.fbcdn.net/….jpg?…","reelUrl": "https://www.facebook.com/reel/1630829815361367","videoUrlHd": "https://video-ord5-1.xx.fbcdn.net/….mp4?…","videoUrlSd": "https://video-ord5-1.xx.fbcdn.net/….mp4?…","videoUrlExpiresAt": "2026-10-10T21:12:08.000Z","width": 1080,"height": 1920,"durationSeconds": 29.546,"audioTitle": "Flying Saucer Beetle (From \"Africa Earth's Wild Home\"/Score)","audioArtist": "Pinar Toprak","isOriginalAudio": true,"subtitleLanguages": null}
Full record
{"type": "reel","reelId": "1630829815361367","reelUrl": "https://www.facebook.com/reel/1630829815361367","topLevelUrl": null,"postId": "1677964520367638","caption": "Presented by ROLEX . It's not easy to find water in one of Africa's driest landscapes, but flying saucer beetles have a clever way to keep themselves hydrated. …","hashtags": ["#Rolex", "#PerpetualPlanet", "#AfricaEarthsWildHome"],"mentions": [{ "name": "ROLEX", "id": "100064636664044", "url": "https://www.facebook.com/rolex" }],"publishedAt": "2026-10-01T19:00:51.000Z","durationSeconds": 29.546,"playsCount": 307000,"playsCountIsExact": false,"playsCountText": "307K","reactionsCount": 2177,"commentsCount": 13,"sharesCount": 44,"sharesCountIsExact": true,"width": 1080,"height": 1920,"thumbnailUrl": "https://scontent-ord5-2.xx.fbcdn.net/….jpg?…","videoUrlHd": "https://video-ord5-1.xx.fbcdn.net/….mp4?…","videoUrlSd": "https://video-ord5-1.xx.fbcdn.net/….mp4?…","videoUrlExpiresAt": "2026-10-10T21:12:08.000Z","audio": {"id": "1808718663473945","type": "LIBRARY_MUSIC","title": "Flying Saucer Beetle (From \"Africa Earth's Wild Home\"/Score)","artist": "Pinar Toprak","trackTitle": "Pinar Toprak · Flying Saucer Beetle (From \"Africa Earth's Wild Home\"/Score)","isOriginalAudio": true,"albumArtUrl": "https://scontent-ord5-1.xx.fbcdn.net/….jpg?…","url": null},"subtitles": [],"creator": {"id": "100044623170418","name": "National Geographic","username": "natgeo","url": "https://www.facebook.com/natgeo","pageId": "23497828950","profilePictureUrl": "https://scontent-ord5-2.xx.fbcdn.net/….jpg?…","verified": true,"followersCount": 51305133},"isReshare": false,"creatorId": "100044623170418","creatorName": "National Geographic","creatorUsername": "natgeo","creatorUrl": "https://www.facebook.com/natgeo","creatorFollowersCount": 51305133,"creatorVerified": true,"audioId": "1808718663473945","audioTitle": "Flying Saucer Beetle (From \"Africa Earth's Wild Home\"/Score)","audioArtist": "Pinar Toprak","audioUrl": null,"isOriginalAudio": true,"subtitleLanguages": null,"inputUrl": "https://www.facebook.com/natgeo/reels/","targetType": "REELS_TAB","scrapedAt": "2026-10-06T10:02:55.904Z","status": "SUCCESS"}
A Reel with native captions lists one entry per track (this one, from the same run, had nine
languages — subtitleLanguages: "es_LA, id_ID, hi_IN, vi_VN, pt_PT, th_TH, ur_PK, ta_IN, te_IN"):
{"language": "es_LA","languageName": "Español","url": "https://scontent-ord5-1.xx.fbcdn.net/….srt?…","creationMethod": "Traducido automáticamente","isDefault": false}
The flat creator*, audio* and subtitleLanguages columns repeat the nested objects so the
dataset opens cleanly in Excel, Google Sheets, SQL or pandas. Missing values are always null (or
[] for lists) — never invented, never 0 for "unknown".
FAQ
Can I paste a Page or profile URL?
Yes — or just the username. The Actor reads the Page's public Reels tab, newest first, and pages
through it until it reaches your resultsLimit, your reelsNewerThan date, or the end of the tab.
Can I paste an individual Reel URL?
Yes. /reel/<id> and /videos/<id> links are the most reliable form. Share links (/share/r/…,
fb.watch/…) are accepted too: the Actor follows Facebook's redirect to the Reel it points at. If a
share link comes back as REEL_NOT_FOUND, open it in a browser and paste the /reel/<id> address it
lands on instead. Each Reel URL returns exactly one Reel. A Reel page on Facebook also shows suggested Reels by other creators —
those are not returned or charged.
Do I need to log in or provide cookies?
No. The Actor only reads what Facebook shows a logged-out visitor. It never asks for credentials, cookies, a session or an access token.
Are play counts exact?
No — and this README won't pretend otherwise. Facebook shows logged-out visitors a rounded play
count ("140K", "1.4M") and publishes no exact figure. You get it three ways: playsCount (a number
you can sort and filter: 140000), playsCountText (exactly what Facebook showed: "140K") and
playsCountIsExact (false whenever the figure is rounded). Reactions and comments are exact.
Shares are exact below 1,000 and rounded above (sharesCountIsExact tells you which).
Are comments, reactions and shares returned?
The counts are — on every Reel. For the comment text, see Scrape a Reel's comments.
Are HD/SD video URLs included? Do they expire?
Yes, both, on every Reel we have seen. They are temporary signed URLs — Facebook sets an expiry
(currently about four days), returned as videoUrlExpiresAt. Download soon after the run, or re-run
to get fresh URLs. The Actor never downloads or stores video files itself.
Is audio / music metadata included?
When Facebook publishes it: the track title and artist (e.g. "Pinar Toprak · Flying Saucer Beetle"),
the audio id, and the audio type — LIBRARY_MUSIC for a track from Facebook's music library,
CUSTOM_AUDIO for sound the creator uploaded (shown as "
Are subtitles included?
When the Reel has native caption tracks, yes — the .srt URL for each language, its language code,
and Facebook's own label for how it was made (for example "Auto-generated" or an auto-translation).
No speech-to-text is ever run, so a Reel without captions has subtitles: [].
Can I limit Reels by date?
Yes, with reelsNewerThan. Because the tab is newest-first, the Actor stops early instead of reading
the whole history. A Reel you paste directly is always returned, whatever its date.
Can I process many Pages in one run?
Yes. Add as many as you like to startUrls; resultsLimit applies to each one separately. One
failing input never stops the others, and the log lists the outcome of every input.
What happens with private profiles, deleted Reels or Pages with no Reels?
Nothing is charged for them. Each input's outcome is logged and stored in RUN_SUMMARY.perInput:
SUCCESS, NO_REELS, PROFILE_NOT_FOUND, REEL_NOT_FOUND, PRIVATE_OR_LOGIN_REQUIRED,
RATE_LIMITED, BLOCKED, PARTIAL_RESULT, TEMPORARY_FACEBOOK_ERROR, INVALID_URL or
UNSUPPORTED_INPUT. Switch on includeUnavailableRows to also get them as empty rows in the dataset.
Anything that was blocked or cut short (rather than missing) is saved as a ready-to-run
RETRY_INPUT record.
Why did a Page return fewer Reels than I asked for?
Usually because it has fewer Reels, or your date limit stopped it. If Facebook rate-limits the tab's
pagination, you still get every Reel collected up to that point (at least the 10 the tab shows
first), the input is marked PARTIAL_RESULT, and it is written to RETRY_INPUT.
How is pricing calculated?
Pay per result: you pay once per unique Reel returned with data. You don't pay for inputs, profile lookups, retries, pagination, audio or subtitle metadata, duplicates, Reels outside your date limit, or anything that failed. A Reel found on a Page's tab and pasted as a URL is charged once. See the Pricing tab for the current rate — this README deliberately doesn't quote figures, so it can never disagree with the live price.
Example: 3 Pages × resultsLimit: 50 returns up to 150 Reels, so you pay for at most 150 results —
fewer if a Page has fewer Reels or your date limit stops it.
Can I call it by API or MCP?
Yes — like every Apify Actor, it can be run through the Apify API, the JavaScript/Python clients, webhooks, schedules and integrations, and from AI agents via Apify's MCP server:
curl -X POST "https://api.apify.com/v2/acts/coregent~facebook-reels-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls":["https://www.facebook.com/natgeo/reels/"],"resultsLimit":20}'
Scrape a Reel's comments
This Actor returns comment counts. For the comments themselves, chain it into Facebook Comments Scraper:
Facebook Reels Scraper → reelUrl → Facebook Comments Scraper
{"startUrls": ["https://www.facebook.com/reel/1468011281530429","https://www.facebook.com/reel/1591050269166108"]}
Related Actors: Facebook Posts Scraper for a Page's ordinary posts, and Facebook Search Scraper to discover Pages to feed into this one.
🚦 Proxy policy
Use Apify Datacenter proxy (the default) or no proxy for normal runs.
Apify Residential proxy is not supported. The Actor fails at startup if apifyProxyGroups
includes RESIDENTIAL. Reel pages are large, and on pay-per-event Actors residential bandwidth is
billed to the developer rather than the run user, so a single bandwidth-heavy run could cost more
than its results earn.
If you genuinely need residential routing, supply your own provider in the proxy editor's Custom proxy URLs field — that traffic goes through your provider, not Apify, and is fully honoured:
http://user:pass@proxy.iproyal.com:12321http://user:pass@proxy.brightdata.com:22225http://user:pass@proxy.oxylabs.io:7777
Limitations
- Public Reels only. Private, friends-only, region-restricted and deleted Reels are not accessible, and the Actor does not try to get around that.
- Plays are rounded by Facebook (see the FAQ). Shares above 1,000 are rounded too.
- Video URLs expire after a few days.
- Follower counts are filled in for Reels collected from the creator's own Page/profile. A Reel pasted on its own carries no follower count unless the same run also reads that creator's Page.
topLevelUrl(the Reel's long/videos/<slug>/<id>/link) is returned for Reels pasted as URLs; Reels read from a tab havereelUrl, which works everywhere.audio.urlis alwaysnull: Facebook does not publish a public audio-page link.- Facebook can change its pages at any time. Every run's
RUN_SUMMARYreports field availability rates (video URLs, audio, subtitles) so a change shows up quickly.
Compliance and privacy
This is an unofficial tool and is not affiliated with, endorsed by or sponsored by Meta or Facebook. It processes only content Facebook shows to any logged-out visitor, and does not collect credentials, harvest cookies, bypass privacy settings or automate any account. Public creator information can still be personal data: you are responsible for using the results lawfully (including GDPR and similar laws and Facebook's terms), and you should collect only what you need.