Facebook Page Post & Comment Scraper avatar

Facebook Page Post & Comment Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Facebook Page Post & Comment Scraper

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

TheDoor

Maintained by Community

Actor stats

11

Bookmarked

1.4K

Total users

178

Monthly active users

11 hours ago

Last modified

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

FieldRequiredDefaultDescription
pageUrlsYes—List of public Facebook Page URLs. Add one or many URLs.
postsToScrapeNo100Maximum number of posts collected per Page.
postsNewerThanNo—Optional date filter. Use a relative value such as 7 days, or an absolute UTC date such as 2026-01-01.
postsOlderThanNo—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).
includeTranscriptNofalseWhen enabled, downloads available Facebook video captions and returns videoTranscript.
includeTopCommentNotrueAdds the top comment available for each post.
fetchAllCommentsNofalseCollects 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.
fetchCommentRepliesNofalseAlso collects replies to each returned comment. Requires fetchAllComments. Collecting replies can make a run take longer.
onlyNewPostsNofalseOnly 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 typeSupported
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

GroupIncludes
postPost ID, type, URL, text, hashtags, thumbnail, and feedback ID
pagePage ID, name, and URL
createdPublication time and Unix timestamp
engagementTotal reactions, comments, shares, views, and reaction breakdown
mediaPhotos, videos, reels, media IDs, URLs, thumbnails, and metadata
videoVideo flag, transcript, music, and live viewer count
shared_contentShared posts, external links, and link URLs
commentsTop comment text and full top-comment data when available; with fetchAllComments, up to 100 comments (and with fetchCommentReplies, their replies) as one flat list
partnershipPaid partnership status and collaborators
adsPage Ad Library information when available
previewAction links and link preview information
referencesText references and detected links
metadataPagination 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

  1. Add one or more public Page URLs.
  2. Choose the number of posts per Page.
  3. Optionally set postsNewerThan and includeTranscript.
  4. Start the Actor and open the Dataset tab when the run completes.

For support, contact tuananhhoangtran2010@gmail.com.