Facebook Post Scraper
Pricing
from $2.10 / 1,000 results
Facebook Post Scraper
Scrape public Facebook posts from pages, profiles, groups and post links. Get text, date, author, reactions by type, comments with replies, shares, photos, videos, views and transcripts as clean JSON. Date filters, live results, no account or cookies needed.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Insights Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
๐ What is Facebook Post Scraper?
Facebook Post Scraper lets marketers, researchers and analysts scrape public Facebook posts from pages, profiles, public groups and single post links. Just paste one or more Facebook URLs and click Start. For each post you get text, publish time, author, reaction counts by type, comments with replies, shares, photos and videos, video views and transcripts. No Facebook account, no login and no coding are needed.
It works as a Facebook scraper for public content only: it reads what a logged-out visitor can see, so you can scrape Facebook posts and comments without a developer app or API token. One tool covers three jobs: a Facebook page scraper, a Facebook group scraper, and a Facebook posts scraper for single links. Because each post arrives with its comments and replies, it also works as a Facebook post and comment scraper.
- Monitor brands and competitors: follow what pages publish and how people react, for Facebook page competitor analysis.
- Social listening: collect posts from public groups for Facebook social listening and community research.
- Measure engagement: get likes, comments, shares, all seven reaction types and an engagement rate for Facebook post analytics.
- Analyze comments: collect comment threads and replies as input for Facebook comment sentiment analysis.
- Archive content: keep post text, media links and video transcripts in a structured Facebook post dataset.
- Feed AI and data pipelines: send clean JSON to an LLM, a vector store or a BI dashboard.
What can Facebook Post Scraper do?
- ๐ Mix many sources in one run: pages, profiles (including
profile.php?id=links), public groups and direct post, reel, video, photo, share and event links. - ๐
Filter by date: an absolute date (
2026-01-01) or a relative one (30 days,2 months). - ๐ฌ Collect comments and replies: choose the comment order and how many comments and replies to keep per post.
- ๐ฌ Add video details: exact view and play counts for videos and reels, plus the auto-generated transcript when Facebook has one.
- ๐ธ Get full photo albums: feeds show at most 5 photos per album; the Actor can collect the rest.
- ๐ Add page or group details: followers, likes, category and verification for pages, or members and privacy for groups.
- โก See results live: each post is saved to the dataset as soon as it is ready, not at the end of the run.
- ๐ฆ Export anywhere: download JSON, CSV, Excel, XML or HTML, run it via API, schedule runs, monitor them and connect Make, Zapier, Google Sheets and more.
๐ What data can Facebook Post Scraper extract?
Facebook Post Scraper is a Facebook post extractor that returns one dataset item per post. These are the main fields (names as in the output):
๐ Post link and ID: url, postId, facebookUrl | ๐
Publish time: time, timestamp |
๐ Post text: text, hashtags, mentions, links | ๐ค Author: user, pageName, collaborators |
โญ Totals: likes (all reactions), comments, shares | ๐ฎ Reaction types: reactionLikeCount, reactionLoveCount, reactionHahaCount, reactionWowCount, reactionSadCount, reactionAngryCount, reactionCareCount, reactionsBreakdown, topReactionsCount |
๐ Engagement: engagement, engagementRate | ๐ฌ Comments and replies: topComments |
๐ธ Media: media, albumPhotoCount, albumTruncated | ๐ฌ Video: isVideo, viewsCount, videoPostViewCount, playCount, liveViewerCount, videoTranscript |
๐ Links and previews: link, actionLink, previewTitle, previewDescription, previewSource, previewTarget | ๐ Shares: sharedPost |
๐ท๏ธ Type: postType, sourceType, storyTitle, paidPartnership | ๐ Source details: sourceInfo, group |
๐ Backdating: timeCreated, timestampCreated | ๐๏ธ Other: textReferences, feedbackId, scrapedAt |
What some fields mean:
likesis the total number of reactions. The sevenreactionโฆCountfields split it by type,reactionsBreakdownalso lists reaction types outside those seven, andtopReactionsCountis the sum of all reported types.engagementis likes + comments + shares.engagementRateis engagement divided by the page's followers (or the group's members) ร 100, so you can compare the Facebook post engagement rate across pages of different sizes.postTypeis one oftext,photo,album,video,reel,link,shareorevent.sourceTypeisprofile(page or person),grouporpost.mentions,textReferencesandcollaboratorsare lists of objects (name, id, URL and type), not plain text.- Each comment in
topCommentshasid,text,time,author,reactionCount,commentCount,depth,parentId,replyToNameandurl, plusreplieswhen replies were collected.
Note: Fields are
nullor empty when Facebook does not provide them for a post. Video counts (viewsCount,playCountand similar) can benull.videoTranscriptexists only when Facebook generated a transcript.sourceInfoandengagementRatearenullfor direct post links, because no page or group follower count is read for them.groupis filled only for posts from a group source.timeCreatedis filled only for backdated posts. Follower and member counts come from Facebook's rounded labels (for example "17M"), so they are approximate.
What data can't Facebook Post Scraper extract?
- Posts in private groups or other content that needs a login
- Facebook search results (search URLs are rejected)
- Lists of the people who reacted or shared (you get the counts)
- Marketplace listings, Ads Library entries and group member lists
For comments and replies on another social platform, see TikTok Comments & Replies Scraper.
๐ How to scrape Facebook posts
Facebook Post Scraper is designed for an easy start, even if you've never extracted data from the web before.
- Create a free Apify account using your email.
- Open Facebook Post Scraper.
- Paste one or more Facebook URLs into ๐ Facebook URLs.
- Click Start and wait for the run to finish. Posts appear in the Output tab while the run is going.
- Download your data in JSON, CSV, Excel, XML or HTML.
โ ๏ธ The first run looks small on purpose: ๐ข Max posts per source is 10 by default. Raise the cap when you want more.
How long does a run take? It depends on the source and your settings, so time your first 10-post run. Comments, replies, video details and full albums add requests, so they make runs longer. To scrape Facebook posts on a schedule, see Integrations and API.
๐ฒ Facebook Post Scraper pricing: how much does it cost to scrape Facebook?
Facebook Post Scraper uses pay-per-event pricing. Your bill has three parts:
| Part | Price | When it is charged |
|---|---|---|
| ๐ฒ Results | $2.99 per 1,000 results ($0.00299 per result) on the Free plan (lower on paid plans, see below) | Once for each post saved to the dataset |
| ๐ Actor start | $0.00005 per GB of run memory | Once per run. At the default 1 GB memory this is $0.00005 per run |
| โ๏ธ Platform usage | Apify platform rates | The server time the run uses (memory ร run time) plus Apify Proxy traffic, billed on top of the event prices |
| Apify plan | Price per post | Price per 1,000 posts |
|---|---|---|
| Free | $0.00299 | $2.99 |
| Starter | $0.0027 | $2.70 |
| Scale | $0.0024 | $2.40 |
| Business and higher | $0.0021 | $2.10 |
The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.
What counts as a result: one result = one post. Comments, replies, media and page details are stored inside the post's item and are not charged separately. Only saved posts are charged: a source that returns no posts (for example, a private group or a page that was not found) adds no result charges.
Example result charges at the Free plan price:
| Posts saved | Results | + start fee | Event total |
|---|---|---|---|
| 10 | $0.0299 | $0.00005 | about $0.03 |
| 100 | $0.299 | $0.00005 | about $0.30 |
| 1,000 | $2.99 | $0.00005 | about $2.99 |
Platform usage comes on top. In plain words, it is what Apify charges for the server and network the run uses: the run's memory multiplied by how long it runs, plus the traffic that goes through Apify Proxy. It depends on your settings, so there is no fixed number per post. Comments, replies, video details and full albums mean extra requests per post, and group details mean one extra request per group, so they add usage and make runs longer.
To estimate your total bill:
- Start a run with your real settings and Max posts in total set to
10. - When it finishes, open the run in Apify Console and read its total cost on the run page (it includes results, the start fee and platform usage).
- Divide that cost by the number of posts saved, then multiply by the number of posts you plan to scrape.
Use the same test run to see how long your runs take.
To cap spending, set the maximum charge limit when you start a run. When it is reached, the Actor stops cleanly and keeps the posts it already saved.
See the pricing tab for the current events and prices.
Is scraping Facebook free?
You can try it on the Apify Free plan, which gives you $5 of monthly credit. Free-plan runs work the same as paid runs. The credit pays for result charges and platform usage together, so set a maximum charge limit when you start a run and do a small test run first.
โฌ๏ธ Facebook Post Scraper input
To run Facebook Post Scraper, you only need ๐ Facebook URLs (urls). Everything else has a sensible default. Set the input in the Actor's form or send it as JSON via the API.
Here's an example that collects up to 10 recent posts of a public page, with comments, replies and video details turned on (the defaults):
{"urls": ["https://www.facebook.com/mrbeast/"],"maxPostsPerSource": 10}
See the input tab for a full description of all fields.
Settings most people change
| Form title | JSON name | Default | What it does |
|---|---|---|---|
| ๐ Facebook URLs | urls | required | Pages, profiles, public groups and post links. Bulk input, mixed freely. |
| ๐ข Max posts per source | maxPostsPerSource | 10 | Posts per page, profile or group. 0 = no per-source cap. Ignored for direct post links (one post each). |
| ๐งฎ Max posts in total | maxPostsTotal | 0 | Posts for the whole run. 0 = no run cap. |
| ๐ Only posts newer than | onlyPostsNewerThan | empty | Keep posts published after this date. |
| ๐ Only posts older than | onlyPostsOlderThan | empty | Keep posts published before this date. |
| ๐ Max comments per post | maxCommentsPerPost | 5 | Top-level comments per post. 0 = all available. |
| ๐งพ Output format | outputFormat | full | full = nested JSON; flat = simple columns for CSV and Excel. |
Advanced settings
| Form title | JSON name | Default | What it does |
|---|---|---|---|
| ๐ Group feed order | groupSort | new_posts | Newest posts first (new_posts), Recent activity or Most relevant. Used for group sources; pick the option in the form or see the input tab for the JSON values. |
| ๐ฌ Collect comments | includeComments | on | Read each post's comment thread instead of only the few comments shown in the feed. |
| ๐ Comment order | commentsSortOrder | all | all, most_relevant or newest. |
| ๐งต Collect replies | includeReplies | on | Replies under each comment, nested replies included. Switches comments on. |
| ๐ช Max replies per comment | maxRepliesPerComment | 2 | 0 = all available. |
| ๐ฌ Exact video views | includeVideoDetails | on | Exact view and play counts for videos and reels. One extra request per video. |
| ๐ Video transcript | includeVideoTranscript | on | Facebook's auto-generated transcript, when one exists. Uses the same request as "Exact video views". |
| ๐ธ Full photo albums | includeFullAlbums | on | Collect every photo of an album, not just the 5 shown in the feed. |
| ๐ Page or group details | includeSourceInfo | on | Followers, likes, category and verification, or group members and privacy, on each post. |
Facebook URLs
Paste any mix of public Facebook links. Mobile links (m.facebook.com) work too.
- โ
Page:
https://www.facebook.com/mrbeast/ - โ
Personal profile:
https://www.facebook.com/profile.php?id=<number>(public posts only) - โ
Public group:
https://www.facebook.com/groups/<group-name>/ - โ
Single post:
https://www.facebook.com/<page-name>/posts/<post-id>or a group posthttps://www.facebook.com/groups/<group-name>/posts/<post-id> - โ
Share link:
https://www.facebook.com/share/p/<code>/(the Actor opens it and reads the post it points to) - โ
Reel or video:
https://www.facebook.com/reel/1635638018279834/,/videos/andfb.watchlinks - โ
Event post:
https://www.facebook.com/events/<event-id>/(read like a single post link) - โ Bad:
https://www.facebook.com/search/posts?q=coffee(search URL), a link to a private group
โ ๏ธ Search URLs and non-Facebook links are rejected. Private groups return no posts because the Actor does not log in.
Date window
Use YYYY-MM-DD, a full ISO date, or a relative value such as 3 days or 2 months.
- โ
Good:
"onlyPostsNewerThan": "30 days" - โ Bad:
"onlyPostsNewerThan": "last month"
โ ๏ธ "Only posts newer than" must be earlier than "Only posts older than", otherwise the run stops with an input error. For groups, the date window can stop the feed early only with Newest posts first (
new_posts).
Comments and replies
0 means "all available" for comments and replies. More comments mean more requests per post, so longer runs and more platform usage (the per-result price stays the same).
โ ๏ธ To skip reading comment threads, turn off both "๐ฌ Collect comments" and "๐งต Collect replies". Replies need comments, so leaving "Collect replies" on (the default) keeps comments on.
topCommentsthen holds only the few comments Facebook shows in the feed, if any.
โฌ๏ธ Facebook Post Scraper output
Results are stored in a dataset. You can see them in the Output tab while the run is going, view them as a table or JSON, and pick only the fields you need. To download, open Storage โ Datasets, choose the dataset and click Export to get JSON, CSV, Excel, XML or HTML. This is how you export Facebook post data for your own tools.
The Output tab groups the data into seven views: Overview, Engagement, Content, Media, Video, Comments (one row per comment) and Source. A RUN_SUMMARY record shows the per-source results of the run. To open it, go to Storage โ Key-value stores, open the run's store and click RUN_SUMMARY (or open the run and use its Storage tab).
When optional fields are filled:
topCommentsholds the collected comment thread when "Collect comments" is on and the post has comments. It can be an empty list if Facebook does not return the comments for a post.- Video fields are filled for video and reel posts; exact counts need "Exact video views".
videoTranscriptis present only when "Video transcript" is on.sourceInfois present only when "Page or group details" is on (andnullfor direct post links).
JSON example
Shortened example for one MrBeast reel from the input example above (values from the schema examples, with isVideo and engagement worked out from them; most fields are left out to keep it short):
{"facebookUrl": "https://www.facebook.com/mrbeast/","postId": "1672376377590626","url": "https://www.facebook.com/reel/1635638018279834/","time": "2026-10-10T16:00:45.000Z","timestamp": 1791648045,"text": "I Handcuffed 10 Guys Together","pageName": "MrBeast","likes": 2931,"comments": 761,"shares": 23,"isVideo": true,"postType": "reel","sourceType": "profile","engagement": 3715}
postId is Facebook's ID for the post. For reels and videos, the link in url contains the video's ID instead, so the two numbers can differ. That is expected.
Comment structure
Each entry in topComments looks like this. This shows the structure only: the values in angle brackets are placeholders, not real data. replies appears only on comments whose replies were requested, and it can be empty. Replies have the same fields except replies (they have no list of their own); nested replies sit in the same list and are marked by parentId and replyToName:
{"id": "<comment ID>","text": "<comment text>","createdAt": "<Unix timestamp>","time": "<ISO 8601 time>","author": {"name": "<name>","id": "<ID>","gender": "<as provided by Facebook>","url": "<profile URL>","profilePicture": "<image URL>","shortName": "<short name>","isVerified": "<true or false>"},"reactionCount": "<number>","commentCount": "<number of replies>","depth": "<nesting level>","parentId": "<parent comment ID, or null for top-level comments>","replyToName": "<name of the person replied to>","url": "<comment URL>","replies": ["<reply objects with the same fields, without replies>"]}
Flat format for spreadsheets
With outputFormat set to flat, nested objects become simple columns, so you can export Facebook comments to Excel or CSV in one file. For example, user becomes userName, userUrl and a user ID column; media becomes mediaCount, mediaUrls and mediaTypes; and comments become topCommentsCount and topCommentsText. Use the full format when you need each comment's author and replies.
๐ก Tips and advanced usage
How many results can you scrape with Facebook Post Scraper?
Every Apify plan works the same way, the Free plan included: you control the volume with Max posts per source and Max posts in total. The exact number depends on how many posts the source shows to logged-out visitors, your date window, and Facebook's availability during the run. Very large sources may stop before the end of the feed. Like any Facebook post scraper tool that works without a login, it only sees what Facebook shows to logged-out visitors. The best way to know for your use case is a quick test run.
How to get faster or cheaper results
- Turn off what you don't need. Comments, replies, full albums, video details and transcripts (one shared request per video, so turning off transcripts alone saves nothing while "Exact video views" is on), and group details (one extra request per group) each add requests. Page details need no extra request.
- Keep
maxCommentsPerPostandmaxRepliesPerCommentsmall unless you need full threads. - Use a date window to stop at the posts you care about.
- Set
maxPostsTotaland a maximum charge limit for predictable costs.
Scrape Facebook group posts
Add the public group URL to urls. With groupSort set to new_posts, a date window lets the Actor stop early once posts get too old. With Recent activity or Most relevant, the date window still filters posts, but it can't stop the feed early, so runs read more posts. So when you set up a Facebook group post scraper run with a date window, choose Newest posts first. Turn on "Page or group details" to add members and privacy (group details take one extra request per group).
Scrape Facebook page posts
Add page or profile URLs. Page and profile feeds are read newest first, so a date window stops early on its own. Page details (followers, likes, category, verification) come from the same page with no extra request. Setup is the same whether you need a Facebook page post scraper for brand pages or a Facebook profile post scraper for public personal profiles.
Known issues
- Private groups and login-only content can't be read.
- If Facebook doesn't offer the chosen comment order for a post type, Facebook's default order is used.
- Very large albums may not be complete;
albumTruncatedistruewhen fewer photos were collected than the album holds.
๐ Integrations and API
Can I use Facebook Post Scraper as an API?
Yes. The Apify API gives you programmatic access to Facebook Post Scraper, so you can use it as a Facebook posts API: start runs, schedule them and fetch results. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. See the API tab for ready-to-use code.
This is a Facebook post scraper API built on the Apify API. It is not Facebook's official Graph API, and it doesn't need a Facebook developer app. You can use it as a Facebook public posts API for any public page, profile or group, or as a general Facebook scraper API in your own backend.
How to use Facebook post scraper Python code
Install apify-client with pip install apify-client, then run:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("insights_data/facebook-post-scraper").call(run_input={"urls": ["https://www.facebook.com/mrbeast/"],"maxPostsPerSource": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["postId"], item["likes"], item["text"])
The client starts the run, waits for it to finish and then reads the dataset.
Can I integrate Facebook Post Scraper with other apps?
Yes. Connect Facebook Post Scraper with almost any cloud service through Apify integrations: Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain and more. Use webhooks to trigger actions when a run finishes.
Example workflow: schedule a daily run on your competitors' pages with "onlyPostsNewerThan": "1 day", then send new posts to Google Sheets and post a Slack message when the run finishes.
Can I use Facebook Post Scraper with AI agents (MCP)?
Yes. Connect Facebook Post Scraper to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps.
๐ Other social media scrapers
More social media scrapers from the same developer, for posts, comments and profiles on other platforms:
| ๐ต TikTok Profile Scraper: videos, reposts, stories and playlists with views, likes, comments and shares | ๐ฌ TikTok Comments & Replies Scraper: comments and replies from videos, photo posts and profiles |
| ๐ Weibo Scraper โ Posts, Comments, Profiles & Hot Search: Sina Weibo posts, comments, profiles and hot search boards | ๐ Stocktwits Scraper: stock and crypto messages with bullish/bearish sentiment |
โ FAQ
Is it legal to scrape Facebook?
Scraping publicly available data is generally legal, but how you collect and use it matters. Facebook Post Scraper reads only public content, without logging in. Posts and comments can contain personal data, so collect it only with a legitimate reason and follow data protection laws such as the GDPR. Also take Facebook's Terms of Service into account. This is not legal advice; if you're unsure, ask a lawyer.
How does Facebook Post Scraper work?
It works like you browsing Facebook while logged out, only faster. For each URL it checks whether it's a page or profile, a group or a single post. It then reads the feed newest first (or in your chosen group order) and applies your date window and caps. If you turned them on, it also reads each post's comments and replies, exact video views and transcript, the rest of the photo album, and the page or group details. Each finished post is saved to the dataset right away.
How is Facebook Post Scraper different from copying posts by hand?
| Facebook Post Scraper | Copying by hand | |
|---|---|---|
| Many pages, groups and posts at once | โ Bulk URL list | โ One at a time |
| Reaction types, engagement rate, video views | โ Structured fields | โ Read and type each number |
| Export to JSON, CSV, Excel | โ One click | โ Manual spreadsheet |
| Scheduling and API | โ | โ |
| Cost | $2.99 per 1,000 posts on the Free plan, down to $2.10 on Business, + start fee + platform usage | Your time |
Why scrape Facebook posts?
- Content research: see which topics and formats get the most Facebook post reactions on pages you follow.
- Competitor tracking: compare posting frequency and engagement across pages.
- Community insight: read what members discuss in public groups.
- Comment analysis: collect comments for sentiment or topic analysis.
- Video research: pull view counts and the Facebook video transcript of reels and videos.
- Data science: build training or evaluation data from public posts.
How to scrape Facebook comments?
Turn on "๐ฌ Collect comments" (on by default), set "๐ Max comments per post" (0 = all), and keep "๐งต Collect replies" on if you want replies. Each post's comments are stored in topComments, with replies nested inside each comment. Comments arrive together with their post, so you don't need a separate Facebook comments scraper.
Can I use it as a Facebook post comments scraper for one post?
Yes. Paste the post's direct link into urls. The run returns that one post with its comments and replies, up to your comment and reply limits.
How do I export Facebook comments to CSV or Excel?
Set outputFormat to flat for one row per post with the comment texts joined in topCommentsText. Or keep the full format and open the Comments view, which shows one row per comment, then export it. Both ways give you a Facebook post comments export that opens in any spreadsheet app.
Can I scrape Facebook reels and videos?
Yes. Paste reel or video links directly, or scrape a page, and any reels and videos Facebook shows in its feed come with the other posts (postType is reel or video). As a Facebook reels scraper it adds exact views and plays when "Exact video views" is on, and the transcript when Facebook has one.
Do I need a Facebook account?
No. Facebook Post Scraper is a Facebook public post scraper: it reads public pages, profiles, groups and posts while logged out. It has no login option, so private groups can't be scraped.
Why am I getting fewer results than expected?
Check these, in order:
- Caps: "Max posts per source" is 10 by default, and "Max posts in total" may be set.
- Date window: your dates may exclude most posts.
- Source access: private groups, login-only pages and unavailable pages return no posts. Open the
RUN_SUMMARYrecord to see the result for each source. - Spend limit: the run stops when your maximum charge limit is reached.
- Duplicates: a post that appears under two of your sources is saved once.
Can I schedule a Facebook post data scraper?
Yes. Schedule the Actor in Apify Console (for example daily) with a relative date window like 1 day. Each run creates a fresh dataset you can fetch via API or send to Google Sheets.
Can Facebook Post Scraper scrape a whole page?
Yes. To scrape Facebook page content, add the page URL: the Actor collects the page's posts and adds page details to each post. Set "Max posts per source" to 0 (no cap) or to a number, and add a date window if you only need recent posts. It doesn't scrape a page's About section, photos tab or reviews on their own; it collects posts.
๐ง Support and feedback
Found a bug or have a feature request? Please create an issue on the Issues tab.
Need a custom solution, more fields or a different data source? Contact us at hello.insights.data@gmail.com.
Built and maintained by insights_data.