Facebook Posts Scraper - Public Page Posts, No Login avatar

Facebook Posts Scraper - Public Page Posts, No Login

Pricing

from $1.99 / 1,000 posts

Go to Apify Store
Facebook Posts Scraper - Public Page Posts, No Login

Facebook Posts Scraper - Public Page Posts, No Login

Pricing

from $1.99 / 1,000 posts

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Security

Limited permissions

Share

Give it Facebook Page URLs or names and get each Page's public posts back: text, publish time, reaction, comment and share counts, photo and video links, and the Page's name and IDs. No Facebook login, no cookies, no account of your own. $1.99 per 1,000 posts plus $0.005 per run. See Pricing.

What makes it different

  • Your limit is a hard limit. maxPosts is never exceeded, and you are never charged for more posts than you asked for.
  • No duplicates. Posts are deduplicated across the whole run by Facebook's own post ID; a Page given twice is read once.
  • Blocked, missing and failed is free - and labelled. Every input gets a free input_status row. A Page Facebook hides behind its login page, one that does not exist, or one cut short by a limit is marked partial: true (and blocked: true when Facebook refused us) with a reason - never reported as "zero posts".
  • The date filter works. newerThan keeps only posts published since that date; older posts are skipped and not charged.
  • Real timestamps. publishedAt is Facebook's own publish time; collectedAt is when this run read the post.

Input

{
"startUrls": [{ "url": "https://www.facebook.com/nike" }],
"pages": ["bbcnews"],
"maxPosts": 20,
"newerThan": "30 days"
}
FieldWhat it does
startUrlsPage URLs: https://www.facebook.com/nike, https://www.facebook.com/profile.php?id=<number>.
pagesPage names instead of URLs: nike, @bbcnews, or a numeric Page ID.
maxPostsPosts per Page, newest first. Default 20, up to 1,000.
newerThan2026-10-01, an ISO time, or 7 days / 2 weeks / 3 months.
maxUpstreamRequestsOptional hard ceiling on requests. By default the Actor works one out from your input, so a run is never unbounded.
proxyConfigurationProxy for each Page's first request (Apify datacenter by default). Timeline requests always use Apify residential proxy, the only IPs Facebook answers them on.

Output

Every row has a recordType. Dataset views: Posts, Input status.

post

{
"recordType": "post",
"postId": "1096426988518676",
"url": "https://www.facebook.com/nike/posts/pfbid02crEqAFcDiSVrDXAevm1sMzJwiCv2ajpCaWWotsSk7btboXoFe1kReAzJqBFrNvB3l",
"text": "Nice finishes first. @janniksin takes home his second Grand Slam title of the year. ...",
"publishedAt": "2024-09-08T20:38:04.000Z",
"publishedAtEpoch": 1725827884,
"reactionCount": 9480,
"commentCount": 4094,
"shareCount": 1569,
"viewCount": null,
"media": [
{ "type": "photo", "id": "1096426958518679", "imageUrl": "https://scontent-....fbcdn.net/...", "videoUrl": null }
],
"imageUrls": ["https://scontent-....fbcdn.net/..."],
"videoUrls": [],
"sharedPostId": null,
"pageName": "Nike",
"pageProfileId": "100044541544829",
"pageId": "15087023444",
"pageUrl": "https://www.facebook.com/nike",
"inputValue": "https://www.facebook.com/nike",
"rank": 7,
"partial": false,
"partialReason": null,
"collectedAt": "2026-10-31T14:40:12.511Z"
}
  • reactionCount is all reactions together (Like, Love, Haha, ...), as Facebook shows it. commentCount and shareCount are Facebook's own totals; comment text is not collected.
  • media lists each photo and video with its Facebook media ID: imageUrl is the photo (or the video's thumbnail), videoUrl the playable video file where Facebook gives one to logged-out visitors. Links only - nothing is downloaded. Facebook's media links expire after some days.
  • viewCount is filled only where Facebook shows it logged-out, otherwise null. No field is ever estimated: what Facebook does not show is null.
  • pageProfileId is the ID Facebook's timeline is keyed on; pageId is the classic numeric Page ID where Facebook gives one.

input_status (free) - one per input: pageName, pageId, postsReturned, rowsCharged, duplicatesSkipped, olderSkipped, partial, blocked, partialReason and a plain-English statusText.

RUN_SUMMARY (free) - the last row, and the same object in the key-value store: totals, incomplete inputs by reason, requests sent, and why the run stopped if it stopped early.

Partial reasons

partialReasonblockedMeaning
login_wallyesFacebook sent us to its login page: the Page does not exist under that name, is a personal profile, or is age- or region-restricted.
blockedyesFacebook rate-limited or refused the requests, also on fresh IPs. Not an empty result.
not_availablenoFacebook says "This content isn't available right now": the Page was deleted, never existed, or is shown only to some people.
invalid_inputnoNot a Facebook Page name or URL (for example a different website, a group or an event). Nothing was requested.
upstream_error / unexpected_shapenoA request failed, or the answer was not in a shape the Actor knows. Not an empty result.
upstream_request_capnoThe run reached maxUpstreamRequests.
charge_limit_reachednoThe maximum charge you set for the run was reached.
not_collectednoThe run stopped before reaching this input.

Limits, stated up front

  • Public Pages only, no login. Personal profiles, groups, events, Marketplace, Stories and anything that needs a Facebook account are out of scope.
  • Comments are counted, not collected. This Actor returns each post's comment count, not the comments themselves.
  • Order. Posts come in the order Facebook's timeline lists them to a logged-out visitor: newest first, with now and then an older post in between. Pinned posts are left out by Facebook in this view.
  • End of the list. When Facebook stops listing a Page's posts to logged-out visitors before maxPosts, the Page's statusText says so.
  • Speed. Facebook gives 3 posts per request, so 100 posts take about 34 requests.

Pricing

Pay per result: $1.99 per 1,000 posts, plus $0.005 per run (start fee). A result is one post row. input_status rows, the run summary, duplicates, posts older than newerThan, and anything a Page could not return are free, so a blocked, missing or empty Page costs nothing beyond the start fee. Example: 10 Pages x 50 posts = 500 posts = $0.995 + $0.005.

How it works

Plain HTTP requests to the same public endpoints Facebook's own logged-out Page view uses: the Page itself (name, IDs and newest post), then the Page timeline's next pages, 3 posts at a time, through Apify residential proxy. A rate-limited request is retried on a new IP. No browser, no login, no cookies of your own.