Facebook Page Posts Scraper
Pricing
Pay per event
Facebook Page Posts Scraper
Read the posts on any public Facebook page: text, posting date, exact and displayed reaction and share counts, attachment type and whether the post is sponsored. Paste page handles or links. No login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Read the posts on any public Facebook page as structured data: the text, when it was posted, how many reactions and shares it got, what kind of attachment it carries, and whether it was a paid placement.
Paste page handles or links. No login, no API key, no browser.
What you get per post
text— the post as writtenposted_at— a UTC timestampreaction_countandreaction_count_displayshare_countandshare_count_displaymedia_type— Photo, Video, or whatever Facebook calls the attachmentlink— where the post points, when it points somewhereis_sponsored— true for paid placementspage,page_name,page_id,url,post_id
Two numbers for every count, on purpose
Facebook publishes each count twice: 4715 and "4.7K". They are not
alternatives and neither is derived from the other.
The rounded one is what a visitor sees on the page, so it is the honest answer
to "what does this post say it got". The exact one is the only one you can add
up, average, or sort reliably: parse "4.7K" into 4700 and you have silently
replaced a real figure with a guess, and lost the real one.
So both are returned, named for what they are. reaction_count for arithmetic,
reaction_count_display for quoting.
There is no comment column, and that is deliberate
Reactions and shares are in the page's data. Comment counts are not — they are rendered separately and never appear as a number.
Rather than ship a comment_count column full of zeroes, there is no such
column. A post with 190 comments reported as 0 is worse than one that never
claims to know, because a zero survives into a spreadsheet, gets averaged, and
nobody questions it. The run summary states the absence once, with
commentCountsAvailable: false.
Which links work
A page handle (nasa), a page link (https://www.facebook.com/nasa), or a
numeric profile link all work.
Groups, events, Watch and Marketplace links are refused by name. They are different surfaces with different payloads, and attempting them would spend a page budget to produce an unhelpful error. A rejected line is reported with the line in it, so a run of fifty tells you exactly which one was wrong.
How much you get
A page returns roughly 20 posts in one request, newest first. Maximum posts is a ceiling across all the pages in the run, so three pages at 45 posts gives you the newest 20, 20 and 5 rather than a third of each.
postsPerPage in the summary breaks it down, which is the quick way to spot a
page that returned less than it should have.
Three pages and 45 posts took twelve seconds in testing, and every page tested came back on the first attempt.
About the country you search from
Facebook localises what a page shows. The Search from country input pins where the request appears to come from and is recorded with every run, so two runs a week apart are comparable rather than accidentally different.
What people use this for
Competitor monitoring. Run a set of pages on a schedule and keep the rows.
Because posted_at and both counts are on every row, posting frequency and
engagement per post fall straight out of the table.
Engagement benchmarking. Reactions against shares, by attachment type, across many pages, is the comparison that tells you what actually travels on Facebook rather than what gets a passive like.
Brand and PR tracking. New posts mentioning a topic, with the page they came from and how far they spread.
Content research. media_type next to the counts answers whether photos or
videos work better for a given page, on that page's own audience rather than in
the abstract.
Ad detection. is_sponsored separates what a page paid to show from what it
posted, which changes how you read every other number on the row.
What this does not do
No groups, no comments, no profiles. This reads pages. Facebook groups are a different surface with a different payload; personal profiles are not public in the way pages are; and comments are not published as text or as a count here. Each of those is a separate problem rather than a switch on this one.
No search. There is no keyword search over Facebook posts without an account. You name the pages you care about, and that is the honest shape of what is reachable.
Reactions are not broken down by type. Facebook publishes the total and, in this payload, not the split between like, love, angry and the rest. The total is what you get.
Notes
Only public pages can be read. A page that is restricted, age-gated or removed is reported by name rather than returned as an empty result you would have to interpret.
Counts move constantly on popular posts, so a run is a snapshot. That is why the posting date is on every row.
Posts come from the page's own feed, so this returns what the page published, not what it was tagged in and not its comments.