Facebook Posts Scraper - Page & Profile Posts, No Login
Pricing
from $3.40 / 1,000 posts
Facebook Posts Scraper - Page & Profile Posts, No Login
Facebook posts scraper for public pages and profiles. Returns every post with text, date, reactions by type, comments, shares, video views, photos, video files and links, newest first. Filter by date range, monitor for new posts only. No login, no cookies, no browser, from $0.0034 per post.
Pricing
from $3.40 / 1,000 posts
Rating
0.0
(0)
Developer
Ben
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
📰 Facebook Posts Scraper
Returns the posts of public Facebook pages and profiles without a login, a cookie or a browser. Enter page links, names or ids and get one row per post: text, date, reactions by kind, comments, shares, video views, pictures, video and link. Read a page newest first, cut out a date range, or run it on a schedule and receive only the posts that are new.
Price: $4.00 per 1,000 posts on the Apify Free plan, down to $3.40 from the Gold plan up. A page Facebook does not show to visitors costs nothing. Export to JSON, CSV or Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.
❓ How do I scrape posts from a public Facebook page without logging in?
Paste the page link or name into pages, set maxResults, and run. The Actor returns one row per post with its text, date, reaction counts by type, comments, shares, video views and media links. No Facebook account, cookie or browser is involved. The default run reads 15 posts of a sample page in 9 to 30 seconds; 360 posts from six pages took 57 to 75 seconds on Apify.
How it compares with other Facebook post scrapers
| This Actor | Apify's own Facebook Posts Scraper | |
|---|---|---|
| Login or cookies | None | None |
| Price per post, Free plan | $0.004 | $0.005, plus $0.002 more when a date filter is used |
| Date range | postedAfter and postedBefore at no extra charge; Facebook starts the list at the upper date, so an old month is read without scrolling to it | Date filter is a paid add-on |
| New posts only | onlyNewPosts with a monitorId, built in | Check its input page |
| Memory | 512 MB, no browser | Larger runs |
| Input names | Also reads startUrls, resultsLimit, onlyPostsNewerThan, onlyPostsOlderThan | Own names |
Prices are the Store prices on October 28, 2026. Reviews of the larger Actors mention missing older posts, date filters that miss posts, and pages reported as blocked. Where this Actor cannot read a page, it says so in the status message and does not charge for it.
🔎 What is the Facebook Posts Scraper?
A public page shows its posts to any visitor, three at a time, while you scroll. This Actor makes the same requests the page makes and reads several pages side by side: 360 posts from six pages in a little over a minute. Your own Facebook account is never involved, so nothing can happen to it.
What data does it extract?
- Post: id, link, text, publication time, and its type (video, photo, link, event, share or text)
- Engagement: reactions in total and by kind (like, love, care, haha, wow, sad, angry), comments, shares, video views
- Media: every picture, the video file with its length, a preview picture, and the outside link of a link post with its headline
- Shares: the link, author and text of the post that was shared
- Page: id, name and link on every row
How it reads the site
The Actor does not open a browser. It sends the page's own data requests directly, so a run needs 512 MB of memory instead of the gigabytes a browser takes, and several pages are read side by side. Facebook accepts a date with these requests: a week from last year is read without scrolling through the months after it. A limit is exact: with maxResults 4, four rows per page are saved and charged, although Facebook hands out posts in threes.
⬇️ Input
| Field | Type | Default | What it does |
|---|---|---|---|
pages | array | Links of public pages or profiles, their names (NASA) or numeric ids. An empty input reads a sample page | |
maxResults | integer | 15 | Posts to save per page, up to 2,000 |
postedAfter | string | empty | Lower date limit: a day (YYYY-MM-DD) or a period back from now (3 days, 2 weeks, 6 months) |
postedBefore | string | empty | Upper date limit, same forms. The read starts there instead of paging down to it |
onlyNewPosts | boolean | false | Skip every post an earlier run with the same monitor name delivered |
monitorId | string | empty | Name of that memory |
Links of the forms facebook.com/NASA, facebook.com/profile.php?id=…, facebook.com/people/Name/id and facebook.com/p/Name-id are understood, with or without a trailing path such as /posts.
Example input
The latest 100 posts of three pages:
{"pages": ["https://www.facebook.com/NASA","https://www.facebook.com/bbcnews","natgeo"],"maxResults": 100}
One week from a year ago. The read starts at September 7, so only that week is fetched and charged:
{"pages": ["NASA"],"postedAfter": "2025-09-01","postedBefore": "2025-09-07","maxResults": 200}
A daily watch that delivers only new posts:
{"pages": ["bbcnews", "natgeo"],"maxResults": 60,"onlyNewPosts": true,"monitorId": "news-pages"}
Coming from another Facebook posts Actor?
The input names startUrls, resultsLimit, onlyPostsNewerThan and onlyPostsOlderThan are read as well, so an input written for one of the common Facebook posts Actors runs here unchanged:
{"startUrls": [{ "url": "https://www.facebook.com/natgeo" }],"resultsLimit": 50,"onlyPostsNewerThan": "2 days"}
⬆️ Output
One row per post. A video post of a page (the two media links are shortened here):
{"postId": "1645617416933628","url": "https://www.facebook.com/reel/1665351285019129/","pageId": "100044561550831","pageName": "NASA - National Aeronautics and Space Administration","pageUrl": "https://www.facebook.com/NASA","type": "video","text": "This October, you can look forward to these sights in the night sky:\n- A good look at Saturn\n- The Orionid meteor shower peaks mid-month\n- The Moon passes by the Seven Sisters\n\nLearn the tricks to spotting these celestial treats: https://go.nasa.gov/4z9LlWU","title": null,"createdAt": "2026-10-02T14:15:12+00:00","authorName": "NASA - National Aeronautics and Space Administration","authorId": "100044561550831","authorUrl": "https://www.facebook.com/NASA","reactions": 2048,"reactionCounts": { "like": 1671, "love": 320, "care": 32, "wow": 15, "haha": 10 },"comments": 53,"shares": 233,"videoViews": 19991,"imageUrls": [],"videoUrl": "https://video-iad6-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQPpeR0gP4nq8obbaWrZPWtxkSEH….mp4?…","videoSeconds": 162.4,"thumbnailUrl": "https://scontent-iad6-1.xx.fbcdn.net/v/t15.5256-10/831402639_1080742941480555_4837841491824040290_n.jpg?…","linkUrl": null,"isShare": false,"sharedPost": null,"position": 2,"scrapedAt": "2026-10-04T08:53:50.272784+00:00"}
A link post fills title with the headline and linkUrl with the outside page; an event post puts the event's name into title. A share fills sharedPost with the link, author and text of the original post. position is the post's place in the page's feed, newest first. The run also writes a SUMMARY record that names the pages that were not shown or had no posts and the reason a run stopped.
💰 What a run costs
| Apify plan | Per 1,000 posts |
|---|---|
| Free | $4.00 |
| Bronze | $3.80 |
| Silver | $3.60 |
| Gold, Platinum, Diamond | $3.40 |
Apify's standard start event ($0.00005) is the only other charge; proxies are included. Not charged: a page Facebook does not show to visitors, a page that does not exist, a post already delivered in only-new mode, and posts outside your date range. Set the run's maximum charge and the Actor stops at it with the rows it has saved.
⏱️ Measured on Apify (October 4, 2026)
| Run | Posts | Time |
|---|---|---|
| Empty input (sample page), twelve runs | 15 | 9 to 30 s, half of them under 14 s |
| Six pages, 60 posts each, four runs | 360 | 57 to 75 s |
| One busy page (BBC News), three runs | 300 | 155 to 194 s |
| One week of one page from a year earlier | 4 | 14 s |
| A profile back to November 2021 | 342 | 10 min |
| Only-new watch on one page, second run | 0 new | 9 s |
All at 512 MB. An aborted and resumed run of 630 posts saved no post twice.
Recent posts arrive within one or two seconds per request. Older posts come slower: in the profile test above, half of the requests took more than 4.5 seconds and some took 16, so a long history is a job for a date range or a longer run. At the very end of a page's history Facebook can take half a minute to confirm that nothing older exists.
🔔 Watching pages for new posts
Turn on onlyNewPosts, give the watch a monitorId and put the run on a schedule. The first run delivers the latest posts up to maxResults. Later runs read each page from its newest post and stop when they reach posts they have already delivered, so a quiet page costs nothing. The memory is a key-value store named facebook-posts-monitor in your own account; delete a record there to start a watch over.
🤖 For AI agents
Smallest useful call:
{"pages": ["https://www.facebook.com/NASA"], "maxResults": 30}
Each row is one post with text, createdAt, type, reactions, reactionCounts, comments, shares, videoViews, imageUrls, videoUrl, linkUrl and url. pages takes several entries at once. A page that is not shown to visitors returns no rows; the status message and the SUMMARY record name it. No credentials are needed.
💡 Use cases
- 📊 Competitor and brand tracking: what a company posts, how often, and which posts get reactions, comments, shares and views.
- 📰 Media monitoring: new posts of publishers and institutions as a daily feed.
- 🎬 Content research: which formats (video, photo, link) work on the pages of your market.
- 🗂️ Archiving and reporting: the posts of a campaign period, cut out by date.
⚠️ Limits, stated plainly
- Public pages and profiles only. Facebook shows some pages only to logged-in users, for example pages with an age or country limit such as alcohol brands. Those are reported as not shown; this Actor does not log in.
- Three posts per request. That is what Facebook gives a visitor. One page yields about 100 recent posts a minute (300 posts of BBC News took a little under three minutes); several pages run side by side.
- Comments are counted, not exported. The number of comments is on every row; the comment texts are not part of this Actor. The Facebook Comments Scraper returns them when you give it the
urlof a post, reel, video or photo row. - No keyword search and no groups. This Actor reads pages you name. For groups there is the Facebook Groups Scraper.
- 2,000 posts per page and run. For more, run again with
postedBeforeset to the day of the oldest post you have. That day's posts are delivered again;postIdidentifies them. - Video views appear where Facebook shows them. In a test of 193 video posts, 187 carried a view count.
- Media links are Facebook's own and expire after a few days. Download pictures and videos soon after the run if you need the files.
- Facebook limits how often one address may ask. The Actor changes addresses by itself. If Facebook stops answering in the middle of a page, the rows saved so far stay and the status message names the page.
❓ FAQ
Do I need a Facebook account or cookies? No. The Actor reads public pages the way a visitor without an account sees them.
Does it work for personal profiles? For profiles whose posts are public to everyone, such as public figures. Posts that only friends can see are not visible to a visitor and are not returned.
Why is a page reported as "not shown to visitors"? The page does not exist under that name, or Facebook asks visitors to log in before showing it. Open the link in a private browser window: if Facebook shows a login form or "This content isn't available" instead of the page, no visitor can read it.
Why are there fewer posts than I asked for? The page has fewer public posts, or your date range was reached. The status message says what happened.
How do I get posts from a certain period? Set postedAfter and postedBefore. Facebook starts the list at the upper limit, so a month from two years ago costs only that month.
Does it return the comments? The count, not the texts. For the texts, pass the url of a row to the Facebook Comments Scraper.
Can the same post appear twice? No. Facebook sometimes lists a post a second time further down a page; the Actor saves it once.
Can I run it every hour? Yes. With onlyNewPosts a page without new posts is left after its two newest pages of posts.
How do I call it from code? With the Apify API or the Python and JavaScript clients; every run returns a dataset you can fetch as JSON or CSV. It also works as a tool through Apify's MCP server.
What is the best way to export Facebook page posts to CSV or Excel? Run the Actor, open the dataset and pick CSV or Excel under Export. Every post is one row, with reactions, comments, shares and video views as columns.
How much does it cost to scrape 1,000 Facebook posts? $4.00 on the Free plan and $3.40 from the Gold plan up. Pages Facebook does not show to visitors are not charged.
Can I get only the posts published since my last run? Yes. Turn on onlyNewPosts, name the watch with monitorId and schedule the run.
Is it legal? The Actor reads what Facebook shows to everyone without a login. Posts can contain personal data: GDPR, CCPA and similar rules apply to how you store and use them, and Facebook's terms apply to you as well. Collect only what you need.
🔗 You might also like
- Facebook Comments Scraper: the comments and replies under a post
- Facebook Groups Scraper: posts of public Facebook groups
- Facebook Pages Scraper: business information and contacts of public pages
- Meta Ad Library Scraper: the ads a brand runs on Facebook and Instagram
- Instagram Posts Scraper: posts of public Instagram accounts with likes and comments
Keywords: facebook posts scraper, facebook page posts, scrape facebook page, facebook page scraper, facebook posts export, facebook post engagement, facebook reactions data, facebook video views, facebook page monitoring, competitor facebook posts, facebook posts by date, facebook posts csv, facebook posts api alternative, no login facebook scraper, public facebook pages, social media monitoring