Facebook Posts Scraper
Pricing
from $1.00 / 1,000 results
Facebook Posts Scraper
Scrape public Facebook Page and Profile posts and Reels — text, reactions, comments, shares, photos, videos with captions, and hashtag/link entities. Also fetches a single post or Reel by its URL. No login, cookies, or proxy setup required.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Facebook Page and Profile posts — text, reactions, comments, shares, video and photo media, and structured hashtag/link entities — plus a dedicated cheap lookup for a single post or Reel by its permalink URL. No login, no cookies, no proxy setup — just paste a Facebook URL and run. Works out of the box on the free Apify plan.
What this actor does
- Two input modes in one run: paste a Page/Profile URL to scrape its recent posts (including Reels), or a single post permalink to fetch just that one post — mix both in the same
startUrlslist - Single-post lookups are genuinely cheap: a post permalink page is fully rendered by Facebook itself, so this actor fetches it directly with no browser — faster and lower-cost than a full Page/Profile scrape. (Standalone
/reel/...links specifically are less reliable this way — see the FAQ.) - Real server-side date filtering:
onlyPostsNewerThan/onlyPostsOlderThanare applied by Facebook itself, not discarded after the fact — large date-scoped runs don't need to scroll through everything in between - Full reaction breakdown: all 7 real Facebook reaction types (Like, Love, Care, Haha, Wow, Sad, Angry), not a partial subset
- Real video captions: for video/reel posts, fetch Facebook's own auto-generated
.srtcaption file as a transcript (optional toggle) - Structured text entities: hashtags, mentions, and external links are parsed out of the post text automatically — external links are the clean destination URL, not Facebook's tracking redirect
- Direct video download links: HD and SD progressive MP4 URLs for video/reel posts, not just a thumbnail
- Empty fields are omitted, not returned as
null
Output
Every target produces one record per post found (a single-post/reel URL always produces exactly one; a Page/Profile URL produces up to maxItems).
Post fields
postId— the post's numeric Facebook IDpermalinkUrl— direct link to the postpostType—photo,video,reel,link, ortexttext— the post's full message texthashtags— hashtags found in the post textmentions— tagged people/Pages found in the post textexternalLinks— external links shared in the post, as the real destination URL (not Facebook'sl.facebook.comtracking redirect)creationTime— Unix timestamp of when the post was publishedauthor—{id, name, url, profileUrlIsFallback};profileUrlIsFallbackistruewhen Facebook didn't expose a direct profile URL and this actor constructed one from the author's numeric ID insteadattachments— media on the post:- Photos:
url,width,height,accessibilityCaption(Facebook's own OCR/alt-text) - Videos/reels:
videoUrlHd,videoUrlSd(direct downloadable MP4 links),thumbnailUrl,durationMs,width,height,isReel,captionsAvailable(list of{locale, languageName, url}), and — whenfetchVideoCaptionsis on —videoTranscript(the real.srtfile content) andvideoTranscriptLocale
- Photos:
reactionsTotal— total reaction countreactionBreakdown—[{type, count}, ...]covering all reaction types Facebook returns for the post (not capped at a fixed set)commentsCount— total comment count (including replies)sharesCount— total share countisAd—trueif Facebook flags the post as sponsoredtopComments— top-level comments (present whenincludeTopCommentsis on):{text, author, createdTime, reactionsTotal, replyCount}allComments— up to 100 top-level comments per post (present whenfetchAllCommentsis on, Page/Profile batches only), same shape astopCommentsinputUrl— the original URL from your inputscrapedAt— ISO 8601 timestamp of when this record was scraped
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [{"url": "https://www.facebook.com/nike"}] | Facebook Page/Profile URLs and/or single post/reel permalink URLs |
maxItems | integer | 20 | Posts to fetch per Page/Profile URL (ignored for single-post/reel URLs) |
onlyPostsNewerThan | string | – | Only posts published after this date: 2026-01-01, full ISO 8601, or relative (1 day, 2 weeks, 3 months) |
onlyPostsOlderThan | string | – | Only posts published before this date, same formats |
includeTopComments | boolean | true | Attach each post's top-level comments (no extra request) |
fetchVideoCaptions | boolean | false | Download the real .srt caption file for video/reel posts as a transcript |
fetchAllComments | boolean | false | Page/Profile batches only: fetch up to 100 top-level comments per post as allComments (one extra request per post) |
Example: recent posts from a Page
{"startUrls": [{ "url": "https://www.facebook.com/nike" }],"maxItems": 30}
Example: a single post by URL
{"startUrls": [{ "url": "https://www.facebook.com/bbcnews/posts/pfbid02wicKt1z7teFytZajyGT72VCz5tcuVQmCZC4HrZTHZZ8SEyxZBgfxMn37pnRey6Sql" }]}
Example: posts from the last 30 days, with video transcripts
{"startUrls": [{ "url": "https://www.facebook.com/nike" }],"onlyPostsNewerThan": "30 days","fetchVideoCaptions": true}
Example: mixing a Page batch and a single reel lookup in one run
{"startUrls": [{ "url": "https://www.facebook.com/nike" },{ "url": "https://www.facebook.com/reel/752115997659579/" }]}
Use cases
- Social media monitoring — track a brand or competitor Page's recent posts and engagement
- Content research — pull a Page's or Profile's post history for analysis
- Fact-checking and journalism — fetch a specific viral post by URL with its exact text, reactions, and comments
- Video content archiving — download direct MP4 links and captions for video/reel posts
- Sentiment and engagement analysis — reaction-type breakdowns and comment data for a batch of posts
- Link and hashtag tracking — structured extraction of hashtags and external links shared in posts
FAQ
Why does a single post URL return results faster than a Page/Profile URL? A post permalink page is fully rendered by Facebook itself, so this actor fetches it directly with a lightweight HTTP request — no browser needed. A Page/Profile URL only shows one post without scrolling, so scraping more requires a real browser session to trigger Facebook's own pagination.
A standalone /reel/... URL sometimes returns nothing — will that be fixed?
This is a genuine, confirmed Facebook restriction, not a bug in this actor: Facebook applies significantly stricter anti-bot checks to a Reel reached by pasting its permalink directly than to the exact same Reel reached by scrolling through a Page's timeline. This actor automatically retries a blocked single-Reel lookup before giving up — but confirmed via live testing across multiple accounts and previously-untouched Reel IDs that Facebook can still block the standalone deep link even after retrying. If you need Reels reliably, scrape them via their Page/Profile URL instead of a standalone /reel/... link — Reels returned as part of a Page/Profile batch (via startUrls) are not affected by this restriction.
Why only 7 reaction types, and why does a post sometimes show fewer?
Facebook has exactly 7 reaction types (Like, Love, Care, Haha, Wow, Sad, Angry). This actor returns whichever of them a post actually received — a post with no Angry reactions simply won't have an Angry entry in reactionBreakdown, not a zero.
Are video view/play counts included? No. Facebook does not reliably expose video view counts on the public post surface this actor reads, so this field is never included — we don't fabricate or guess a number.
Is the video transcript AI-generated?
No — videoTranscript (when fetchVideoCaptions is on) is the real .srt caption file Facebook itself generated for the video, not independent speech-to-text transcription.
Why is a post author's profile URL sometimes constructed rather than a direct Facebook link?
Facebook doesn't always expose a direct profile URL for a post's author. When that happens, this actor builds a valid profile.php?id=... URL from the author's numeric ID and sets profileUrlIsFallback: true so you know it was constructed rather than returned directly by Facebook.
Does this work on private profiles or restricted posts? No — a private, restricted, or removed target simply produces no record for that URL, rather than a fabricated empty-looking result.
Do I need cookies or to log in? No. This actor reads only Facebook's publicly accessible pages — no login, no cookies, ever.
Is this actor affiliated with Facebook or Meta? No. This is an independent, third-party actor that reads Facebook's own publicly accessible pages; it is not affiliated with, endorsed by, or operated by Meta Platforms, Inc.
How fresh is the data? Every run fetches live from Facebook at request time — there's no caching, so results reflect what Facebook shows at the moment the actor runs.
Are the comment/reaction/share counts accurate for posts with thousands of comments?
Yes. These are Facebook's own aggregate totals, not something derived by counting visible items, so they're exact regardless of scale — verified directly against a real, logged-in view of a post with 4,169 comments: commentsCount, reactionsTotal, sharesCount, and every value in reactionBreakdown matched exactly. (The topComments/allComments arrays themselves are intentionally capped previews, not the full comment thread — see the field list above.)