Facebook Page Post & Comment Scraper
Pricing
from $1.50 / 1,000 results
Facebook Page Post & Comment Scraper
⚡ High-Speed Facebook Page Scraper — 100+ Page URLs in One Run. Collect post text, media, timestamps, authors, engagement metrics, videos, reels, shared posts, and optional transcripts — no login or cookies required. Built for fast bulk scraping and automation.
Pricing
from $1.50 / 1,000 results
Rating
5.0
(2)
Developer
TheDoor
Maintained by CommunityActor stats
11
Bookmarked
1.4K
Total users
178
Monthly active users
11 hours ago
Last modified
Categories
Share
Facebook Page Scraper
Scrape 100+ Facebook Page URLs in one run and collect structured post data for monitoring, research, analytics, and AI workflows.
What you get
- ⚡ Bulk scraping for many public Facebook Pages
- 📝 Post text, hashtags, author, timestamps, and post URLs
- 📊 Reactions, comments, shares, views, and reaction breakdowns
- 🖼️ Photos, videos, reels, thumbnails, media IDs, and media URLs
- 🔗 Shared posts, external links, previews, collaborators, and paid-partnership data
- 🎵 Music metadata when Facebook provides it
- 🎬 Optional video caption transcript
Explore the full Facebook scraping toolkit
Need comments from page posts? Use the Facebook Comment Scraper to collect comments, replies, images, and shared links. For public Facebook Groups, use the Facebook Group Post Scraper to collect structured group posts.
Input
{"pageUrls": ["https://www.facebook.com/newshour/","https://www.facebook.com/nytimes/"],"postsToScrape": 100,"postsNewerThan": "7 days","includeTranscript": false}
Input fields
| Field | Required | Default | Description |
|---|---|---|---|
pageUrls | Yes | — | List of public Facebook Page URLs. Add one or many URLs. |
postsToScrape | No | 100 | Maximum number of posts collected per Page. |
postsNewerThan | No | — | Optional date filter. Use a relative value such as 7 days, or an absolute UTC date such as 2026-01-01. |
postsOlderThan | No | — | Optional date filter: only posts published on or before this date (2026-09-30 includes that whole day, UTC) or relative value such as 30 days. If newer posts must be loaded to reach it, they are charged as out-of-time-frame posts ($1 per 1,000). |
includeTranscript | No | false | When enabled, downloads available Facebook video captions and returns videoTranscript. |
includeTopComment | No | true | Adds the top comment available for each post. |
fetchAllComments | No | false | Collects up to 100 top-level comments of every returned post, in Facebook's "All comments" order. Replies are not included unless fetchCommentReplies is also enabled. |
fetchCommentReplies | No | false | Also collects replies to each returned comment. Requires fetchAllComments. Collecting replies can make a run take longer. |
onlyNewPosts | No | false | Only new posts on your next run: each run on the same Page gets only posts published after your last run. |
Time filter examples
{ "postsNewerThan": "7 days" }
{ "postsNewerThan": "2026-01-01" }
Leave postsNewerThan empty to collect posts without a date filter.
Date range example
{"pageUrls": ["https://www.facebook.com/nytimes/"],"postsNewerThan": "2026-09-01","postsOlderThan": "2026-09-30","postsToScrape": 100}
This returns up to 100 posts published from 1 to 30 September 2026 (both days included, UTC).
Pricing note for postsOlderThan: Facebook usually returns a Page's posts
from your date directly, so nothing extra is loaded. When it does not, the
scraper loads the newer posts first to reach your date. Those posts are not
returned, and each one is charged as an out-of-time-frame post at $1 per
1,000 posts. postsOlderThan cannot be combined with onlyNewPosts.
Only new posts on your next run
{"pageUrls": ["https://www.facebook.com/nytimes/"],"postsToScrape": 100,"onlyNewPosts": true}
Your first run gets posts as usual. Every next run on the same Page gets only
posts published after your last run, never the old ones, so you don't pay for
them twice. This is ideal for scheduled runs that monitor a Page. Each Apify
account keeps its own progress per Page, and different URL forms of the same
Page share it. You can combine it with postsNewerThan.
Transcript example
{"pageUrls": ["https://www.facebook.com/matchroom/"],"postsToScrape": 50,"includeTranscript": true}
Comments and replies example
{"pageUrls": ["https://www.facebook.com/nytimes/"],"postsToScrape": 20,"fetchAllComments": true,"fetchCommentReplies": true}
With fetchAllComments, comments.top_comments holds up to 100 top-level
comments of the post (Facebook's "All comments" order), and with
fetchCommentReplies also their replies, as one flat list.
Replies have is_reply: true, replyto_comment_id (the comment they answer),
and depth (1 for a reply, 2 for a reply to a reply). Without
fetchAllComments, comments.top_comments holds the post's top comment, or
nothing when includeTopComment is false.
"comments": {"top_comment_text": "Great story!","top_comments": [{"id": "1234567890","post_url": "https://www.facebook.com/100059174186752/posts/1522250229757435","comment_url": "https://www.facebook.com/100059174186752/posts/1522250229757435?comment_id=1234567890","text": "Great story!","timestamp": 1792219728,"comment_time": "2026-10-17T06:48:48.000Z","author_name": "Comment author","author_id": "100012345678901","author_profile_picture": "https://scontent.xx.fbcdn.net/author.jpg","author_profile_url": "https://www.facebook.com/profile.php?id=100012345678901","image_url": null,"media": [],"shared_link": null,"shared_post": null,"reactions_count": 12,"reaction_types": { "like": 10, "love": 2 },"replies_count": 1,"is_reply": false,"replyto_comment_id": null,"depth": 0},{"id": "1234567891","comment_url": "https://www.facebook.com/100059174186752/posts/1522250229757435?comment_id=1234567891","text": "Agreed!","author_name": "Reply author","is_reply": true,"replyto_comment_id": "1234567890","depth": 1}]}
Supported URL types
| URL type | Supported |
|---|---|
| Facebook Page username URL | ✅ |
| Numeric Facebook Page URL | ✅ |
| Page post URL | ✅ |
| Photo post URL | ✅ |
| Video URL | ✅ |
| Reel URL | ✅ |
Only public Page content is supported. Private, deleted, unavailable, or login-gated content may return fewer records.
Output
Each dataset item represents one Facebook post and uses grouped fields for easier use in analytics, automation, and AI workflows.
{"post": {"id": "1234567890","type": "regular","url": "https://www.facebook.com/page/posts/1234567890","feedback_id": "...","id_source": "post_id","text": "Post text","hashtags": ["#example"],"thumbnail": "https://scontent.xx.fbcdn.net/preview.jpg"},"page": {"id": "100012345678901","name": "Example Page","url": "https://www.facebook.com/example"},"created": {"time": "Mon, 17 Aug 2026 02:16:58 GMT","timestamp": 1786933018},"engagement": {"reactions": 291,"comments": 4,"shares": 1,"views": null,"reaction_breakdown": {"like": 226,"love": 20,"haha": 45,"wow": null,"sad": null,"angry": null,"care": null}},"media": [],"video": {"is_video": false,"transcript": null,"music": null,"live_viewer_count": null},"shared_content": null,"comments": {"top_comment_text": "Example top comment text","top_comments": []},"partnership": { "paid": false, "collaborators": [] },"ads": { "page_ad_library": null },"preview": null,"references": { "text_references": [] },"metadata": {"page_index": 1,"total_pages": 1,"actors": [],"user": {}}}
Output groups
| Group | Includes |
|---|---|
post | Post ID, type, URL, text, hashtags, thumbnail, and feedback ID |
page | Page ID, name, and URL |
created | Publication time and Unix timestamp |
engagement | Total reactions, comments, shares, views, and reaction breakdown |
media | Photos, videos, reels, media IDs, URLs, thumbnails, and metadata |
video | Video flag, transcript, music, and live viewer count |
shared_content | Shared posts, external links, and link URLs |
comments | Top comment text and full top-comment data when available; with fetchAllComments, up to 100 comments (and with fetchCommentReplies, their replies) as one flat list |
partnership | Paid partnership status and collaborators |
ads | Page Ad Library information when available |
preview | Action links and link preview information |
references | Text references and detected links |
metadata | Pagination and actor metadata |
Fields Facebook does not provide may be null, empty arrays, or empty objects. Engagement values are live and may change between runs.
Notes
- Fields that Facebook does not provide are returned as
null, an empty array, or omitted depending on the field. - Engagement values are live values and may change between runs.
- A Page may return fewer posts than requested if Facebook exposes fewer eligible posts or the selected timeframe is exhausted.
- The dataset contains post records; unavailable Page errors are not represented as post records.
Quick start
- Add one or more public Page URLs.
- Choose the number of posts per Page.
- Optionally set
postsNewerThanandincludeTranscript. - Start the Actor and open the Dataset tab when the run completes.
For support, contact tuananhhoangtran2010@gmail.com.