Scrape publicly available Facebook posts at scale, including text, images, videos, timestamps, reactions, comments, and post URLs. Perfect for research, marketing analysis, sentiment tracking, and dataset creation. Fast, reliable, and ideal for automated Facebook insights.
All notable changes to this actor are documented here.
0.2 — 2026-08-29
Fixed — 0 results on every run
Root cause: The actor's timeline GraphQL request (POST /api/graphql/
with doc_id + Relay variables) was being rejected by Facebook on
every single request with:
{"errors":[{"message":"A server error missing_required_variable_value occured...",
"code":1675012, ...}]}
This is a stale-payload bug, not a login/cookie requirement. Facebook's
ProfileCometTimelineFeedRefetchQuery / PageCometTimelineFeedRefetchQuery
GraphQL query declares a fixed set of Relay providedVariables
(__relay_internal__pv__*relayprovider flags baked into the current web
JS bundle). The actor's hardcoded list in src/main.py
(_TIMELINE_RELAY_VARS) had drifted out of sync with what Facebook's live
bundle now requires:
Missing entirely:__relay_internal__pv__StoriesShouldEnablePhotosensitiveContentWarningrelayprovider
— never sent at all.
Wrongly omitted:__relay_internal__pv__CometUFICommentAutoTranslationTyperelayprovider
— a previous fix intentionally left this out on the assumption it wasn't
required; it is in fact a required provided-variable (the live bundle's own
fallback value is the string "ORIGINAL").
Stale/no-op (removed for cleanliness):FeedDeepDiveTopicPillThreadViewEnabledrelayprovider,
FBReels_enable_meta_ai_label_gkrelayprovider, StoriesArmadilloReplyEnabledrelayprovider
— no longer present in Facebook's providedVariables map, so sending them
was harmless but pointless.
Because every timeline page request failed with this error before a single
post could ever be parsed, the actor always produced 0 results regardless of
target page, proxy, or input settings.
Verification method: Live-tested against real public Facebook pages
(facebook.com/nytimes, facebook.com/cocacola) with no login cookies of
any kind. Confirmed:
Anonymous (logged-out) requests to these pages do not hit a login wall —
full page HTML and real post content are served without authentication.
The exact current providedVariables map was extracted directly from
Facebook's live JS bundle (fetched via the same script-URL discovery the
actor already does) to identify precisely which variables were missing or
wrong, rather than guessing.
After the fix, both targets returned real posts end-to-end — text,
timestamps, reactions (like/love/haha/care/sad/wow/angry), comments,
shares, media, and working cursor-based pagination all populated
correctly, using scrape_one_page() exactly as the actor's normal run
path calls it.
Fix: Updated _TIMELINE_RELAY_VARS in src/main.py to match Facebook's
current live providedVariables requirements: added the missing
StoriesShouldEnablePhotosensitiveContentWarningrelayprovider (False),
added back CometUFICommentAutoTranslationTyperelayprovider ("ORIGINAL"),
and dropped the three stale flags no longer recognized by the query.
No changes were needed to src/html_loader.py (page bootstrap / entity id /
doc_id discovery all still work correctly against current Facebook HTML) or
to the input schema — this actor does not need and was not given a login
cookie field, and does not need one for public page posts.