Pricing
from $0.99 / 1,000 results
Facebook Page Posts
Scrape recent public posts from a Facebook page: text, timestamp, reaction count, comment count, and share count.
Pricing
from $0.99 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Facebook Page Posts Scraper
Fetch recent public posts from any Facebook page in bulk โ post text, attachments, reaction count, comment count, share count, permalink, and timestamp โ as a clean structured JSON feed.
Why use this actor
- No account / no login required โ just give it a Facebook page handle (
nasa) or full URL. - No API key needed โ Facebook's public Pages API has been deprecated for years; this actor returns the same data the public web app shows.
- Full post payload โ text body, attached media (images and videos with width/height), permalink, owner name, owner profile picture, and a UTC
createdAttimestamp. - Engagement counters โ
reactionCount,commentCount, andshareCountper post. - Paginated feed โ set
maxPostsand the actor walks the feed cursor automatically until the limit is hit or the page runs out of posts. - Stable JSON output suitable for pipelines, spreadsheets, and databases โ every row carries
_input,_source,_scrapedAtenvelope fields so you can join results back to your input list.
How it works
- You provide a list of Facebook page handles (e.g.
nasa,meta) or full page URLs. - The actor opens each page the same way a logged-out browser would, resolves the page's numeric ID, then walks the posts feed page by page.
- Each post is flattened into one dataset row with text, media, counters, and timestamp.
- Results stream into your dataset, ready to download as JSON, CSV, or Excel.
You do not need to manage scrapers, browsers, or rotating IPs โ all handled internally.
Input
{"pages":["nasa","https://www.facebook.com/meta"],"maxPosts":25,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["DATACENTER"]}}
| Field | Type | Description |
|---|---|---|
pages | array | List of Facebook page handles (nasa) or full page URLs (https://www.facebook.com/meta). Numeric page IDs are also accepted. |
maxPosts | integer | Max posts returned per input page. Default 25, range 1โ200. Pagination is handled automatically. |
proxyConfiguration | object | Apify Proxy settings. Datacenter proxy works for most pages; switch to Residential if a page rate-limits aggressively. |
Output
Input: nasa, maxPosts: 3
{"_input":"nasa","_pageId":"100044561550831","_source":"S1-primary","_scrapedAt":"2026-05-18T11:42:08.187026+00:00","postId":"1524998752328829","ownerId":"100044561550831","ownerName":"NASA","ownerProfileUrl":"https://www.facebook.com/NASA/","ownerImageUrl":"https://scontent.fyyz1-1.fna.fbcdn.net/v/t39.30808-1/...","createdAt":"2026-05-13T15:30:00+00:00","createdAtEpoch":1778506200,"text":"Planning is underway for Artemis III, our next mission to land humans on the Moon...","permalink":"https://www.facebook.com/NASA/posts/1524998752328829","reactionCount":12400,"commentCount":291,"shareCount":409,"attachments":[{"type":"Photo","url":"https://www.facebook.com/NASA/photos/1524998752328829","id":"1524998745662163","imageUrl":"https://scontent.fyyz1-1.fna.fbcdn.net/v/t39.30808-6/...","width":2048,"height":1365}]}
| Field | Type | Description |
|---|---|---|
_input | string | The handle or URL exactly as you supplied it. Use this to join results back to your input list. |
_pageId | string | Facebook's numeric page ID (stable across handle changes). |
_source | string | Internal tag for the path used to fetch the record. S1-primary means the fastest, richest path; values starting with S2-fallback indicate a fallback was used. |
_scrapedAt | string | ISO-8601 UTC timestamp when the record was scraped. |
postId | string | Facebook's numeric post ID. |
ownerId | string | Numeric ID of the page that authored the post. |
ownerName | string | Display name of the page (e.g. NASA). |
ownerProfileUrl | string | Canonical URL of the page. |
ownerImageUrl | string | URL of the page's profile picture. |
createdAt | string | ISO-8601 UTC publication time. |
createdAtEpoch | integer | Same value as createdAt expressed as Unix epoch seconds. |
text | string | Full post body text. null for media-only posts. |
permalink | string | Public URL of this specific post. |
reactionCount | integer | Total reactions (Like, Love, Care, Haha, Wow, Sad, Angry combined). Facebook rounds this for high-volume posts. |
commentCount | integer | Total comments on the post. |
shareCount | integer | Total shares of the post. |
attachments | array | Attached media. Each entry has type (Photo, Video, etc.), url (permalink to the media), id, imageUrl (CDN URL of the image or video thumbnail), and width/height. Empty array for text-only posts. |
Error envelope
Pages that can't be resolved or fetched return a structured error instead of crashing the run:
{"_input":"this-page-does-not-exist-xyz","_error":"page_id_resolve_failed","_errorDetail":"Could not extract numeric page ID from warm HTML","_scrapedAt":"2026-05-18T11:42:09.012345+00:00"}
Common _error values: warm_failed (couldn't load the page), page_id_resolve_failed (page does not exist or is fully gated), fetch_failed (transient network or server-side error), no_posts (page resolved but has no public posts).
Filter on _error to triage failed rows.
Pricing
This actor is billed per result: $6.00 per 1,000 posts (Tier 4). Each post row = 1 result. Error rows are not billed.
Other Sosmed Actors
| Platform | Actor | Best for |
|---|---|---|
| Facebook Page Scraper | Page metadata: name, category, like and follower counts | |
| Facebook Post Detail Scraper | Single-post deep dive with comments preview | |
| Instagram Account Posts Scraper | Recent posts from any public IG account | |
| X / Twitter | X Account Tweets Scraper | Recent tweets for any handle |
| Threads | Threads Account Threads Scraper | Recent threads for any Threads handle |
| Bluesky | Bluesky Account Posts Scraper | Recent posts for any atproto handle |
Browse the full catalog at apify.com/xtracto.
Notes
- Facebook currently returns one post per request on the anonymous public feed, so the actor paginates internally via cursor to satisfy your
maxPostsvalue. Large jobs (e.g.maxPosts: 200) therefore take noticeably longer than a single page's worth of API calls would suggest โ budget accordingly. - Pagination is fully automatic; you do not need to pass or persist a cursor.
reactionCountis rounded by Facebook for high-volume posts (e.g.12K,1.2Mโ the actor returns the rounded integer as Facebook publishes it).- Counters are eventually-consistent and may lag the live page by a few minutes.
- The actor only returns public posts โ content gated behind a login wall or audience restriction is skipped.
- For best reliability on large jobs, leave Apify Proxy enabled. Datacenter proxy is the default and works for most pages; switch to Residential if a specific page returns frequent
fetch_failederrors.
