Facebook Page Posts Scraper - Text, Reactions & Media avatar

Facebook Page Posts Scraper - Text, Reactions & Media

Pricing

from $2.55 / 1,000 post delivereds

Go to Apify Store
Facebook Page Posts Scraper - Text, Reactions & Media

Facebook Page Posts Scraper - Text, Reactions & Media

Scrape public Facebook Page posts by Page link or username, no login: text, date, reactions, comments, shares, photos, video links, shared links and shared posts, plus Page name, id, category and followers. Date filter and onlyNew for schedules. Error rows are free.

Pricing

from $2.55 / 1,000 post delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Facebook Page Posts Scraper: posts, reactions, comments, shares and media of any public Page

Facebook Page Posts Scraper collects the posts of the public Facebook Pages you give it, without a Facebook account, cookies or a browser. Each post comes back as one clean row: the full text, when it was published, the reaction, comment and share counts, every photo and the video file link, the external link it points to, the post it shares (if any), and the Page's name, id, category and follower count.

It is used to track what brands, media outlets and public organizations publish, to benchmark engagement against competitors, to feed social listening and reporting dashboards, to archive a Page's content, and to build datasets for AI and content research.

At a glance

WhatPrice
Post deliveredUS$ 3.00 per 1,000 posts (US$ 0.003 each)
Run startUS$ 0.005 per run
  • 5 Pages with 20 posts each = 100 posts = US$ 0.305.
  • Error rows, duplicates, posts outside your date filter and posts already delivered in earlier runs (onlyNew) are never charged.
  • maxPostsPerPage and maxItems are hard caps, and a spending limit set on the run stops it cleanly with everything delivered so far.
  • Proxy is included. The Actor starts on datacenter IPs and moves to residential IPs on its own only if Facebook refuses them.

Quick start

{
"startUrls": ["https://www.facebook.com/NASA"],
"maxPostsPerPage": 20
}

Several Pages, only the last 7 days:

{
"startUrls": [
"https://www.facebook.com/NASA",
"https://www.facebook.com/nike",
"https://www.facebook.com/Starbucks"
],
"maxPostsPerPage": 50,
"onlyPostsNewerThan": "7 days"
}

Daily monitoring of a list of Pages, new posts only (run it on a schedule):

{
"pages": ["NASA", "natgeo", "cnn"],
"maxPostsPerPage": 30,
"onlyNew": true
}

Input

FieldWhat it does
startUrlsFacebook Page links, one per line. A post link of the Page, a profile.php?id= link or a numeric Page id also work.
pagesPage usernames instead of links (nike, Starbucks): the part after facebook.com/.
maxPostsPerPageNewest posts per Page, in timeline order (default 20; 0 = as far back as the timeline goes).
maxItemsOptional cap for the whole run, across all Pages.
onlyPostsNewerThanA date (2026-10-01) or a period (7 days, 24 hours, 2 weeks, 1 month). Older posts are skipped for free.
onlyNewDeliver only posts not delivered in earlier runs (memory kept per Page in your account).
proxyConfigurationApify datacenter proxy by default, with automatic residential fallback.

startUrls also accepts objects like {"url": "https://www.facebook.com/NASA"}, and resultsLimit, maxPosts, urls and pageUrls are accepted too, so inputs written for other Facebook tools keep working.

Output

One row per post (type: post):

FieldWhat it is
postId, urlFacebook post id and the post link (a /posts/, /reel/, /videos/ or /events/ link)
textFull post text as written by the Page (null for media-only posts and plain shares)
hashtagsHashtags found in the text
publishedAt, timestampPublication time in UTC (ISO 8601) and as a Unix timestamp
reactionsCount, commentsCount, sharesCountEngagement counts as Facebook shows them at run time
isVideoTrue for videos and reels
mediaEvery photo or video of the post: type (photo, video, linkPreview), url (image or MP4 file), thumbnailUrl, pageUrl, width, height, durationMs
imageUrls, videoUrlShortcuts: all photo links, and the video file link
linkExternal link the post points to (link card or link in the text), unwrapped from Facebook's redirect
isShare, sharedPostWhether the Page shared another post, and that post's id, link, Page, text, date, media and link
pageName, pageUrl, pageId, pageProfileIdThe Page, its classic Page id and its profile id
pageCategory, pageFollowersPage category and exact follower count
authorNameName shown as the author of the post
positionOrder of the post in the Page timeline during this run
sourceThe link or username you sent
scrapedAtWhen the row was collected (UTC)

One real row (text and media links shortened):

{
"type": "post",
"postId": "1658860588942644",
"url": "https://www.facebook.com/reel/1557618349384047/",
"pageName": "NASA - National Aeronautics and Space Administration",
"pageUrl": "https://www.facebook.com/NASA",
"pageId": "54971236771",
"pageCategory": "Government organization",
"pageFollowers": 28744320,
"text": "The aircraft lineup just keeps getting bigger. MAX POWER, a new aerospace expo, is set for Nov. 7-8 at NASA's Kennedy Space Center in Florida...",
"publishedAt": "2026-10-16T19:37:44Z",
"timestamp": 1792179464,
"reactionsCount": 969,
"commentsCount": 19,
"sharesCount": 79,
"isVideo": true,
"media": [
{
"type": "video",
"url": "https://video.xx.fbcdn.net/o1/v/t2/f2/m366/...mp4",
"thumbnailUrl": "https://scontent.xx.fbcdn.net/v/t15.5256-10/...jpg",
"pageUrl": "https://www.facebook.com/reel/1557618349384047/",
"durationMs": 17770,
"width": 1080,
"height": 1920
}
],
"link": "https://www.nasa.gov/maxpower/",
"isShare": false,
"sharedPost": null,
"source": "https://www.facebook.com/NASA"
}

In the local test of 17 Oct 2026 (NASA, Nike and Starbucks, 20 posts each), every row had the post id, link, date, Page id and the three engagement counts; 92% had text (the rest were media-only posts or plain shares).

Date filter and timeline order

A Page timeline is mostly newest first, but Facebook sometimes shows an older highlighted post near the top. The date filter is applied post by post, so those older posts are skipped (and not charged) while newer posts below them are still delivered. A Page stops once several posts in a row are older than your date, so a "last 7 days" run only reads what it needs.

Only new posts (schedules)

With onlyNew on, the Actor stores the ids of the posts it delivered for each Page in a named key-value store of your account. The next run skips those ids for free and stops reading a Page as soon as it reaches posts you already have. A typical setup: maxPostsPerPage 30, onlyNew on, a schedule every few hours or once a day. Runs with nothing new cost only the run start.

Errors you may see

Every error is a row with errorCode and is never charged:

errorCodeMeaning
INVALID_INPUTNot a Facebook Page link or username (groups, events and search links are not Pages), or a wrong date or number
NOT_FOUNDThe Page does not exist, was removed, or is restricted by age or country (those need a login)
NOT_A_PAGEThe link is a personal profile; only public Pages are supported
NO_POSTSThe Page opened but shows no public posts without login
BLOCKEDFacebook refused every attempt for this Page; run it again in a few minutes
NOT_REACHEDThe run timeout, the spending limit or the cost guard arrived before this Page

Integrations, scheduling and AI agents

  • Schedule the same Pages hourly or daily in Apify schedules with onlyNew on to get each new post once, with its engagement at that moment.
  • Export as JSON, CSV, Excel or XML, or read the dataset from the Apify API.
  • Connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook through Apify integrations, for example to post every new competitor post in a Slack channel.
  • AI agents: call it as a tool through the Apify MCP server in Claude, ChatGPT, Cursor or any MCP client, for example "get the last 30 posts of these 5 brand Pages and tell me which topics get the most shares".

FAQ

Do I need a Facebook account or cookies? No. The Actor reads what Facebook shows to logged-out visitors of public Pages. Nothing is posted, liked or followed.

How far back can it go? As far as the Page timeline goes for a logged-out visitor. In tests, NASA returned six months of posts (211 posts) and Nike went back years. Set maxPostsPerPage to 0 or a large number, or use onlyPostsNewerThan.

Can I search posts by keyword or find Pages by name? No. Facebook does not show search results to logged-out visitors. Paste the Page links you want to follow.

Does it collect the comments or who reacted? No. It returns the counts only: reactionsCount, commentsCount and sharesCount. No list of people is collected.

Why is text empty on some posts? The Page posted only a photo or video, or shared another post without adding text. In a share, the original text is in sharedPost.text.

Do the media links expire? Photo and video links come from Facebook's CDN and are signed; they work for some days. Download the files soon after the run if you need to keep them.

Is it legal? The Actor reads public Page content only and returns no emails, phone numbers or personal profiles. You are responsible for how you use the data under the laws that apply to you.

Something broke or a field is missing? Open an issue on the Actor page; issues are answered within a day.

Limitations

  • Public Pages only. Personal profiles, groups, and Pages restricted by age or country are not supported.
  • Engagement counts are the ones Facebook shows at the moment of the run.
  • Reaction types (like, love, haha...) are not split; reactionsCount is the total.
  • Live videos that are not processed yet may come without the video file link (the thumbnail and link are there).

Changelog

  • 17 Oct 2026: first version: posts of public Pages by link or username, text, date, reactions, comments, shares, photos and video files, shared links and shared posts, Page id, category and followers, date filter, onlyNew.