Facebook Page Posts Scraper - Reactions, Comments & Dates
Pricing
from $1.20 / 1,000 post scrapeds
Facebook Page Posts Scraper - Reactions, Comments & Dates
Scrape the public posts of any Facebook Page, newest first: text, links, date, reactions by type, comments, shares, video views, photos and videos, a top comment and the Page's followers. Date window, filters and monitor mode for new posts. Many Pages per run. No login or cookies.
Pricing
from $1.20 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
Top Api
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
What does Facebook Page Posts Scraper do?
Facebook Page Posts Scraper collects the public posts of any Facebook Page, newest first, and turns each one into a structured row: the full text and its links, the publish date, reactions by type, comments, shares, video views and plays, photos and videos, a top comment, and the Page's own name, id and follower count. Give it a list of Pages and it reads each timeline the way a signed-out visitor sees it - no login, no cookies, no API key.
Facebook Page Scraper - Facebook Posts Scraper - Facebook Page Timeline API - Facebook Page Monitor
- Any public Page, many per run: paste Page URLs, usernames or numeric ids; each Page is read newest post first, with Facebook's own date window.
- Every engagement number: reactions with the like / love / care / haha / wow / sad / angry breakdown, comments, shares, video views and plays - filled on 100% of a 150-post test run.
- Page context on every row: Page id, name, URL, followers, "talking about this" and the Page's Ad Library id, so posts from different Pages compare directly (
engagement_rate). - Links, mentions and rich text: outbound links unwrapped from Facebook's redirect, mentioned Pages, hashtags, and
message_richwith the links kept as HTML. - Filters: date window, post type, minimum reactions, minimum comments and a keyword filter.
- Monitor mode: remembers each Page's newest post and returns only newer ones - pair it with a schedule for a feed of new posts.
- Export anywhere: JSON, CSV, Excel, XML, RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack, the Apify API and MCP.
What data can you get from a Facebook Page?
| ๐ Post URL and id (`url`, `post_id`) | ๐ Full text (`message`) and `message_rich` | ๐ Publish date (`timestamp`, `published_at`) |
| ๐ Page id, name, URL (`source_id`, `source_name`, `source_url`) | ๐ฅ Page followers, talking about, were here | ๐ฃ Page Ad Library id (`page_ad_library_id`) |
| ๐ Reactions total and by type (`reactions`) | ๐ฌ Comments and shares (`comments_count`, `reshare_count`) | ๐ Engagement and engagement rate |
| โถ๏ธ Video views, plays, duration, thumbnail, captions | ๐ผ๏ธ Photos and albums (`image`, `images`, `image_alt`) | ๐ Outbound link and preview (`external_url`, `external_link`) |
| ๐ Shared post URL and author (`attached_post`) | ๐ท๏ธ Hashtags, mentioned Pages, collaborators | ๐ฌ A top comment on every row; ~10 with the details add-on |
On a 150-post test run (Starbucks, The New York Times, Red Bull; 50 each) every row had the text or media, date, Page followers, reactions by type, comments and shares; 48% were videos (views and plays on every one), 20% carried a link preview, 82% came with a top comment.
How to scrape Facebook Page posts with Facebook Page Posts Scraper
- Create a free Apify account - $5 of monthly credit, no card needed.
- Open Facebook Page Posts Scraper and click Try for free.
- Paste your Pages into Facebook Pages (one per line) and set Max posts per Page.
- Optionally set Posted after / Posted before, a post type or minimum reactions.
- Click Start. Rows stream into the dataset as each part of each timeline arrives.
- Open the Storage tab and Export as JSON, CSV or Excel - or let a schedule run it for you.
โฌ๏ธ Input
| Parameter | Type | Description |
|---|---|---|
| ๐ What to scrape | ||
startUrls | List | Required (defaults to the sample Page NASA). Page URLs, usernames or numeric ids, e.g. https://www.facebook.com/NASA, starbucks, 100044561550831; profile.php?id= and /people/<name>/<id> links work too. |
| ๐ฏ Filters (sent to Facebook as its timeline window) | ||
startDate | String | 2026-09-01, 24 hours, 7 days, 3 weeks, 2 months. Facebook starts the timeline there; every post is re-checked. |
endDate | String | 2026-06-30 (the whole day included) or relative, e.g. 30 days. |
| โ๏ธ Refine results | ||
postType | Select | all, photo, video, link, text, event or share. |
minReactions | Integer | Keep only posts with at least this many reactions. Default 0. |
minComments | Integer | Keep only posts with at least this many comments. Default 0. |
keywordFilter | String | Keep only posts whose text, link title or event name contain a word (sale, discount = any). |
| โ Extra data | ||
includePostDetails | Boolean | Adds top_comments (up to about 10), video_files (SD/HD) and the view count from each post's public page - charged as post-details per post that gets details. |
| ๐ Monitoring | ||
monitorMode | Boolean | Return only posts newer than the newest one already read, per Page. Pair with a schedule. |
monitorStoreName | String | Key-value store that keeps the per-Page memory. Default facebook-page-posts-monitor. |
| ๐ฆ Output | ||
maxPostsPerPage | Integer | Default 20; 0 = the whole public timeline, up to 2,000 per Page. |
maxItems | Integer | Hard cap for the whole run. 0 = none. |
compact | Boolean | Core fields only, sized for AI agents and MCP. |
| โ๏ธ Advanced | ||
proxyConfiguration | Object | Residential US by default (see below). |
maxConcurrency | Integer | Pages read in parallel. Default 3, max 8. |
Input JSON
{"startUrls": ["https://www.facebook.com/Starbucks", "nytimes", "https://www.facebook.com/redbull"],"startDate": "30 days","minReactions": 100,"maxPostsPerPage": 50,"monitorMode": false}
Give the Page itself, not a post or a group
Any address that leads to a Page works: the Page URL, its username (redbull), its numeric id, or a post URL of that Page (its timeline is read). Group URLs are not Pages and are reported as invalid input, as are search, event and Watch links. A Page that does not exist or is shown only to signed-in users (some age-restricted brands) ends as not_found or login_required in the run summary and costs nothing.
Use the date window instead of a big cap
startDate and endDate go to Facebook as its own timeline window, so the run reads only the posts inside it: a run for 1-15 September 2026 on NASA's Page read 9 posts in 3 requests to deliver 8. A large maxPostsPerPage without a window reads the timeline from today backwards until the cap.
Keep the residential proxy for timelines
Facebook rate-limits Page timelines on Apify's datacenter and direct IPs (measured: every request refused), and it hides news Pages from visitors in some countries (Canada). The default residential US proxy served every timeline tested; the actor rotates to a fresh session when Facebook refuses one.
โฌ๏ธ Output
Every post becomes one dataset item. Here is the table view of a run for Starbucks, The New York Times and Red Bull:
And one real row from that run (trimmed):
{"post_id": "1582731997219696","type": "status","url": "https://www.facebook.com/Starbucks/posts/pfbid0DJSiUv3UQpCbAxHvVgqDF5pXfr882F6XX3vJdyrHgFmdBkgfRMvp5EPCmofarNDAl","message": "October 1st and Iโm emotionally available for pumpkin everything.","published_at": "2026-10-01T11:57:25.000Z","source_type": "page","source_id": "100064487329582","source_name": "Starbucks","source_url": "https://www.facebook.com/Starbucks","page_followers": 34082879,"page_ad_library_id": "22092443056","reactions_count": 18785,"comments_count": 900,"reshare_count": 2784,"reactions": { "like": 12890, "love": 5377, "haha": 323, "care": 172, "wow": 12, "sad": 6, "angry": 5 },"engagement_count": 22469,"engagement_rate": 0.06592}
Facebook Page post fields
| Field | Type | What it is | Fill on the 150-post run |
|---|---|---|---|
post_id, url, story_id, comments_id | string | Post id, permalink, story id, feedback id | 100% |
type | string | video, link, photo, album, event, share, marketplace or status | 100% |
message, message_rich | string | Full text; the same text as HTML with its links (message_rich only when the text has links) | 99% / 31% |
timestamp, published_at | integer, ISO 8601 | Publish time | 100% |
source_type, source_id, source_name, source_url, input_url | string | The Page the post came from and your input line | 100% |
page_followers, page_talking_about, page_were_here | integer | The Page's counters (were here = places only) | 100% / 100% / 33% |
page_ad_library_id, page_ad_library_active | string, boolean | The Page id Meta's Ad Library uses and Facebook's business-active flag | 99% |
author | object | id, name, url, profile_picture_url, type, is_verified | 100% |
reactions_count, comments_count, reshare_count, engagement_count | integer | Totals; engagement = reactions + comments + shares | 100% |
reactions | object | like, love, care, haha, wow, sad, angry; an unlisted type is 0 when the listed ones add up to the total, else null | 100% |
engagement_rate | number | Engagement as a % of the Page's followers | 100% |
video_view_count, video_play_count, video, video_id, video_thumbnail, video_duration_ms, video_captions_url | mixed | Video posts | 48% (every video post) |
image, images, album_count, image_alt | object, array | First image, every image of an album, accessibility caption | 82% / 15% |
external_url, external_link, links | string, object, array | Outbound link (unwrapped), its preview card, every link in the text | 33% / 20% / 13% |
attached_post_url, attached_post | string, object | The original post when this one is a share | 2% |
event, location, collaborators | object, array | Event posts, tagged place, co-authors | as published |
hashtags, mentions | array | Hashtags and the Pages or profiles mentioned in the text | 1% / 17% |
top_comment | object | The top comment Facebook prints with the post: text, date, author, reactions | 82% |
top_comments, video_files, details_status | array, object | Up to ~10 comments and the video SD/HD files - details add-on | details on 11 of 12 posts of a platform test: comments on 7 of 7 regular posts, files on 5 of 6 videos |
How can I use Facebook Page posts data?
- ๐ Competitor benchmarking - run your competitors' Pages weekly and compare
engagement_rate,reactionsby type and posting frequency. - ๐ฐ Media and news monitoring - follow publishers' Pages with
monitorModeand get every new post, its link and its engagement. - ๐ฏ Social media reporting - pull a client's Page for last month with
startDate/endDateand chart reactions, comments, shares and views. - ๐ฃ Ad and creative research -
page_ad_library_idtakes you to the Page's ads in Meta's Ad Library;postType: videowithminReactionsfinds the creatives that work. - ๐ Content discovery - sort a Page's history by
reshare_countorvideo_play_countto see which formats travel. - ๐ค AI and research teams - feed
compactrows to an LLM for summaries, topic tagging or sentiment;top_commentadds the audience's voice.
How much does it cost to scrape Facebook Page posts?
Facebook Page Posts Scraper is pay-per-result: $1.20 per 1,000 posts, no start fee. You only pay for the posts you get. The optional post details are $1.00 per 1,000 posts that receive them.
| Posts | Cost | With post details |
|---|---|---|
| 10 | $0.012 | $0.022 |
| 100 | $0.12 | $0.22 |
| 1,000 | $1.20 | $2.20 |
| 10,000 | $12.00 | $22.00 |
Apify platform usage (compute and residential proxy) is included in these prices. Measured on the platform: 10 posts in 6-10 seconds, 60 posts from two Pages in 21 seconds (256 MB, the default), 150 posts from three Pages in 30 seconds, 300 posts from one Page in 159 seconds (512 MB), with a peak of 42-81 MB of memory.
Facebook Page posts in your tools: integrations, API, scheduling & MCP
- Schedules: run it hourly, daily or weekly from the Schedules tab; with
monitorModeeach run returns only the posts published since the previous one. - Webhooks: fire a URL when a run finishes - push new posts to your CRM, Slack or a sheet.
- No-code: Make, Zapier, n8n, Google Sheets, Airtable, Slack via Apify integrations.
- API: call it from Node.js or Python with
apify-client- code on the API tab and the Apify API reference. - MCP / AI agents: connect Claude, Cursor or any MCP client through the MCP tab and ask for a Page's latest posts in plain language; set
compact: trueto keep rows small.
More social media scrapers by TopApi
| ๐ Facebook Search Posts Scraper - public posts found by keyword, any Page or group | ๐ Facebook Marketplace Scraper - listings, prices and sellers by city and keyword | ๐ธ Instagram Scraper - posts, reels, hashtags and profiles |
| ๐ต TikTok Scraper - videos, hashtags, profiles and search | ๐ฌ TikTok Video Scraper - single videos with stats and downloads | ๐ฆ X Profile Scraper - X (Twitter) profiles and counters |
| โถ๏ธ YouTube Shorts Scraper - Shorts by channel, hashtag or search | ๐ Google Maps Reviews Scraper - reviews, ratings and owner replies | ๐ผ Indeed Jobs Scraper - job listings with descriptions |
| ๐ Similarweb Scraper - website traffic and competitors | ๐ All TopApi actors - monitor-ready scrapers for schedules, APIs and AI agents |
Limits & empty runs
- Speed: Facebook serves a Page timeline 3 posts per request after a first page of about 12, so a deep run takes time - 300 posts from one Page took 159 seconds (98 requests, none refused). Several Pages run in parallel (
maxConcurrency). - Depth: up to 2,000 posts per Page per run. How far back that reaches depends on the Page: 300 NBA posts covered one week, 3 Coca-Cola posts went back to 2022. The date window is the cheaper way to reach older posts.
- Pinned posts: the timeline Facebook shows a signed-out visitor leaves out the Page's pinned post, so there is no pinned flag.
- Reactions by type are the types Facebook lists on the post; when they do not add up to the total, the unlisted types are
null, not zero. - Comments: each row carries one top comment; the details add-on adds the top-level comments Facebook shows a visitor (up to about 10), not the full thread. Reels show no comment list to visitors, and event posts have no post page, so they get video files or
details_status: unavailableand the add-on is not charged for an unavailable one. - Empty dataset: the Page has no public posts in your window, every post was removed by your filters, or monitor mode found nothing new - the status message says which, and nothing is charged.
- Not available signed-out: private profiles, restricted-audience posts, full comment threads, reactor lists. Media and avatar URLs are signed CDN links that expire after a few hours.
FAQ
How many posts can Facebook Page Posts Scraper collect from one Page?
Up to 2,000 per Page per run (maxPostsPerPage: 0), for as many Pages as you list, within the run's time limit. On the platform 300 posts from one Page took 159 seconds and 150 posts from three Pages 30 seconds.
Can I run Facebook Page Posts Scraper on a schedule to get new posts automatically?
Yes. Save your input as a task with monitorMode: true, open Schedules and pick the cadence. Each run asks Facebook only for posts newer than the newest one it already read, so a check with nothing new reads a few hundred bytes per Page and delivers nothing. Give each feed its own monitorStoreName.
Can I scrape Facebook Page posts from a date range?
Yes. startDate and endDate accept absolute dates or relative values such as 30 days. The window is sent to Facebook, which starts the timeline inside it, and every post is re-checked before delivery.
Does Facebook Page Posts Scraper return comments?
Every row has comments_count and one top_comment. With includePostDetails the actor adds top_comments (the top-level comments Facebook shows signed-out, up to about 10, with text, date, author and reactions) plus video_files and the view count for videos.
Can I scrape several Facebook Pages in one run?
Yes. Put one Page per line in startUrls; maxPostsPerPage caps each Page and maxItems the whole run. Every row carries source_name, source_url and input_url, so the Pages stay apart in one dataset.
Can I integrate Facebook Page Posts Scraper with other apps?
Yes - Make, Zapier, n8n, Google Sheets, Slack and more via Apify integrations, or use webhooks to trigger an action when a run finishes.
Can I use Facebook Page Posts Scraper with the Apify API?
Yes. Use apify-client for Node.js or Python; the API tab has ready-to-paste code for starting runs and fetching datasets.
Can I use Facebook Page Posts Scraper through an MCP server?
Yes. Open the MCP tab, connect your MCP client (Claude Desktop, Cursor and others) and ask for a Page's recent posts in plain language. compact: true keeps each row to the core fields.
Do I need a Facebook account, cookies or an API key for Facebook Page Posts Scraper?
No. The actor reads only what Facebook shows a signed-out visitor; you pass Page addresses and nothing else. It never asks for your cookies or session.
Why did my Facebook Page Posts Scraper run return no results?
Most often the date window held no posts, every post was removed by a filter (the status message lists the counts), or monitor mode had nothing new. A Page that does not exist or needs a login is listed as not_found / login_required in the run summary. Changing the proxy away from residential makes Facebook refuse the timeline.
Is it legal to scrape Facebook Page posts?
Facebook Page Posts Scraper extracts only publicly available posts; it does not log in or collect private data. Results may still contain personal data (for example in top comments), which is regulated by laws such as GDPR. Make sure you have a legitimate purpose before you use it, and consult a lawyer if you are unsure.
Your feedback
We keep improving Facebook Page Posts Scraper. Found a bug or missing a field? Open an issue on the Issues tab.

