Facebook Posts Scraper - Pages, Profiles & Reactions
Eimantas V · @amethyst
Scrape posts from public Facebook Pages and profiles: text, date, reactions by type, comments, shares, video views and media. Date filters and new-post alerts.

About
Facebook Posts Scraper extracts posts from public Facebook Pages and profiles. Paste Page links, usernames or IDs, get one row per post with its text, date, reactions by type, comment, share and view counts, the top comments, photos with image descriptions, videos and reels with direct file links, link previews and reshared posts. No login, no cookies, no browser.
{
"postId": "1670768087751894",
"url": "https://www.facebook.com/reel/4075684206061398/",
"date": "2026-10-29T11:49:38.000Z",
"text": "NASA astronaut Anil Menon and Canadian Space Agency astronaut Joshua Kutryk are getting ready to head out of the International Space Station! ...",
"authorName": "NASA - National Aeronautics and Space Administration",
"reactionCount": 957,
"reactions": { "like": 809, "love": 112, "care": 19, "haha": 11, "wow": 5, "sad": 0, "angry": 1 },
"commentCount": 81,
"shareCount": 89,
"viewCount": 18067,
"playCount": 102934,
"mediaType": "reel",
"videoDurationSecs": 39.4
}
90 posts from 3 Pages in 28 seconds, the latest post of 20 Pages in 20 seconds: no login, no browser.
What does Facebook Posts Scraper do?
It reads a Page's or profile's timeline the way Facebook's own website loads it for a visitor who is not logged in, and returns every post as a clean row you can export or feed to other tools. Limit by date, jump straight to any period of a Page's history, or keep a schedule running that only ever returns new posts.
- Every way to name a Page. Page URLs (facebook.com/nasa), profile links (facebook.com/profile.php?id=...), usernames, numeric IDs, for brand Pages and public personal profiles alike. Inputs written for apify/facebook-posts-scraper (
startUrls,resultsLimit,onlyPostsNewerThan,onlyPostsOlderThan,captionText) work unchanged. - Engagement in detail. Reactions split into like, love, care, haha, wow, sad and angry; comment and share counts; views and plays for videos and reels; the 1-2 comments Facebook shows under each post, with author, date, reactions and replies.
- All the media. Photos and albums with image descriptions, videos and reels with a direct MP4 link, length, thumbnail and caption languages, link previews with title, description and site, reshared posts with their text and author.
- Video transcripts. Turn on "Include video transcripts" and every captioned video or reel gets its captions as plain text.
- Any date range. "Posts newer than" stops at the first older post. "Posts older than" makes Facebook jump straight to that date, so posts from 2019 cost the same as this week's.
- Monitoring built in. "Only posts not seen in earlier runs" remembers the newest post delivered for each Page, so a daily schedule returns only what is new and never delivers the same post twice.
- Page details on every row. Page name, ID, username, picture, verified badge, and the Page's Meta Ad Library ID (to look up its ads).
- Clear errors. Pages that are private, missing or cannot be read return an error row instead of failing the run.
Why it is fast and cheap
There is no browser to start. The Actor calls the same timeline endpoint Facebook's website uses for logged-out visitors, three posts per request. Facebook answers timelines only to residential addresses, so the Actor uses the platform's residential proxy by default and moves to a fresh address whenever Facebook refuses one.
What data can you extract from Facebook posts?
| Group | Fields |
|---|---|
| Post | postId, url, shortUrl, date, timestamp, text, hashtags, mentions, links, position |
| Engagement | reactionCount, reactions (by type), commentCount, shareCount, viewCount, playCount, topComments |
| Media | mediaType, imageUrls, imageDescriptions, photoCount, videoUrl, videoThumbnailUrl, videoDurationSecs, videoCaptionLocales, videoTranscript |
| Links and shares | linkUrl, linkTitle, linkDescription, linkDomain, sharedPostUrl, sharedPostText, sharedPostAuthorName |
| Page | authorName, authorId, authorUsername, authorUrl, authorPictureUrl, authorIsVerified, adLibraryPageId, isBusinessPageActive, collaborators |
How to scrape Facebook posts
- Click Try for free and paste Page links, usernames or IDs into Facebook Pages or profiles, one per line.
- Set Posts per Page and Max posts in total. These also cap the run's compute and proxy traffic.
- Optionally set Posts newer than and Posts older than for a date range, or turn on Only posts not seen in earlier runs for a schedule. Click Start. Each Page gives about 3 posts a second; Pages run in parallel.
- Open the Output tab, or read the dataset as JSON.
How much does it cost to scrape Facebook posts?
One flat monthly rental, shown on this page, with a free trial. There is no per-post fee: scrape as many posts as you need.
Runs use your credits for compute and proxy traffic, as every Actor does. Facebook answers timelines only to residential addresses, so the residential proxy is part of every run. Measured on Bytewells: the last 20 posts of NASA's Page in 18 seconds at 512 MB, with about 1 MB of residential traffic, for $0.006 of credits: about $0.30 per 1,000 posts, almost all of it proxy traffic.
Input
{
"targets": [
"https://www.facebook.com/NASA",
"natgeo",
"https://www.facebook.com/profile.php?id=100064277875532"
],
"maxPostsPerPage": 50,
"maxItems": 1000,
"postsNewerThan": "30 days",
"includeVideoTranscripts": false
}
| Field | Default | Notes |
|---|---|---|
| Facebook Pages or profiles | Page or profile URLs, usernames or IDs, one per line. Public Pages and profiles only | |
| Posts per Page | 20 | Newest first; Facebook serves 3 posts per request |
| Max posts in total | 1000 | Across all Pages: your cost cap |
| Posts newer than | A date (2026-01-31) or a period ("7 days"). Paging stops at the first older post | |
| Posts older than | A date. Facebook jumps straight to it; combine with the field above for a range | |
| Only posts not seen in earlier runs | off | For schedules: returns only posts newer than the last run delivered, per Page |
| Include video transcripts | off | Captions of captioned videos and reels as plain text |
| Proxy | Residential | Keep it: Facebook refuses timelines from other addresses |
Output
Each post is one row in the dataset. The Overview view shows the key columns, and the Engagement, Media and Pages views group the rest; every export includes all fields.
{
"recordType": "post",
"input": "https://www.facebook.com/NASA",
"postId": "1670768087751894",
"url": "https://www.facebook.com/reel/4075684206061398/",
"shortUrl": "https://www.facebook.com/100044561550831/posts/1670768087751894",
"date": "2026-10-29T11:49:38.000Z",
"timestamp": 1793274578,
"text": "NASA astronaut Anil Menon and Canadian Space Agency astronaut Joshua Kutryk are getting ready to head out of the International Space Station! ... Tune into today's spacewalk: https://www.youtube.com/live/hv867HnY4j4",
"authorName": "NASA - National Aeronautics and Space Administration",
"authorId": "100044561550831",
"authorUsername": "NASA",
"authorUrl": "https://www.facebook.com/NASA",
"authorPictureUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-1/...",
"authorIsVerified": true,
"adLibraryPageId": "54971236771",
"isBusinessPageActive": false,
"collaborators": [],
"reactionCount": 957,
"reactions": { "like": 809, "love": 112, "care": 19, "haha": 11, "wow": 5, "sad": 0, "angry": 1 },
"commentCount": 81,
"shareCount": 89,
"viewCount": 18067,
"playCount": 102934,
"topComments": [
{
"commentId": "1434787351418028",
"text": "They're the real astronauts... me, I'm just a fan of space and NASA!",
"date": "2026-10-29T12:50:18.000Z",
"authorName": "A. Commenter",
"authorId": "1000943384...",
"authorPictureUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-1/...",
"reactionCount": 6,
"replyCount": 2,
"url": "https://www.facebook.com/reel/4075684206061398/?comment_id=1434787351418028"
}
],
"mediaType": "reel",
"imageUrls": [],
"imageDescriptions": [],
"photoCount": null,
"videoUrl": "https://video.xx.fbcdn.net/o1/v/t2/f2/m366/...mp4",
"videoThumbnailUrl": "https://scontent.xx.fbcdn.net/v/t15.5256-10/...jpg",
"videoDurationSecs": 39.4,
"videoCaptionLocales": [],
"videoTranscript": null,
"linkUrl": null,
"linkTitle": null,
"linkDescription": null,
"linkDomain": null,
"sharedPostUrl": null,
"sharedPostText": null,
"sharedPostAuthorName": null,
"hashtags": [],
"mentions": ["Canadian Space Agency", "International Space Station"],
"links": ["https://www.youtube.com/live/hv867HnY4j4"],
"position": 4,
"feedbackId": "ZmVlZGJhY2s6MTY3MDc2ODA4Nzc1MTg5NA==",
"scrapedAt": "2026-10-30T11:27:08.957Z"
}
A Page that cannot be read becomes a row with "recordType": "error" and an errorCode instead of failing the whole run:
errorCode | Meaning |
|---|---|
NOT_FOUND | No public Page or profile at this address, or the ID does not exist |
NOT_A_PAGE | The address is a group or a single post, or the ID belongs to a group |
NO_POSTS | The Page or profile shows no posts to visitors who are not logged in |
RATE_LIMITED | Facebook refused every address tried; run the Page again later |
FACEBOOK_ERROR | Facebook rejected the request itself (it may have changed its site) |
Tips and limits
- Public Pages and profiles only. Posts visible only to friends or followers who are logged in cannot be read, and this Actor never logs in.
- Groups and single posts are not covered: this Actor reads Page and profile timelines.
- Top comments, not all comments. Facebook shows 1-2 comments per post on the timeline. Each post carries those top comments, not the full thread.
- Pinned posts are read in their place on the timeline, not first, so date limits work.
- Albums carry their first few photos on the timeline;
photoCountsays how many the album has. - Image and video links are temporary Facebook CDN links: download what you need soon after the run.
FAQ
Is it legal to scrape Facebook posts?
This Actor collects only data that Facebook shows publicly to visitors who are not logged in. Posts and comments can still contain personal data, which laws such as the GDPR protect. Scrape personal data only for a legitimate purpose, and ask a lawyer if you are unsure. Facebook is a trademark of Meta Platforms; this Actor is not affiliated with or endorsed by Meta.
Do I need a Facebook account or cookies?
No. Nothing is logged in, and no cookies or tokens are needed. That is also why only public Pages and profiles can be scraped.
How do I monitor Pages for new posts?
Turn on Only posts not seen in earlier runs and run the Actor on a schedule. Each run returns only the posts published since the newest one the previous runs delivered, per Page, and stops reading there, so a quiet day costs almost nothing. The memory is a key-value store in your account named facebook-page-monitor-state.
Can I use it through the API?
Yes. Every run can be started through the API and returns the dataset as JSON. Runs can also be scheduled and followed with webhooks.
Can AI agents use it?
Yes. Agents connected to the Bytewells MCP server can find and run this Actor as a tool.
Why did I get fewer posts than I asked for?
The Page has fewer posts than your limit (or fewer in your date range), or the run reached its timeout. The log says which, and nothing collected before that is lost.
Related scrapers
- Facebook Pages Scraper: emails, phones, followers and ratings of the Pages themselves.
- Meta Ads Library Scraper: the ads a Page runs on Facebook and Instagram, by its
adLibraryPageId.
FAQ
- What data does it return for each Facebook post?
- Text, date, reactions by type, comment and share counts, video views, the top comments, photos, videos, reels and links, plus the Page or profile it came from. Albums carry their first photos and a photoCount.
- Do I need a Facebook account or cookies?
- No. Nothing is logged in and no cookies or tokens are needed. That is also why only public Pages and profiles can be scraped.
- How do I monitor Pages for new posts?
- Turn on Only posts not seen in earlier runs and run the Actor on a schedule. Each run returns only the posts published since the newest one delivered before, per Page, and stops reading there, so a quiet day costs almost nothing.
- How much does it cost?
- One flat monthly rental, shown on this page, with a free trial and no per-post fee. Facebook answers timelines only to residential addresses, so runs use your Bytewells credits for compute and residential traffic. Measured on Bytewells: NASA's last 20 posts in 18 seconds for $0.006, about $0.30 per 1,000 posts.
- Does it get every comment on a post?
- No. Facebook shows 1-2 top comments per post on the timeline, and each post carries those, not the full thread.
- Can it scrape Facebook groups or single post links?
- No. It reads the timelines of public Pages and profiles. Groups and single post URLs are not covered.
- Can I use it through the API or from AI agents?
- Yes. Start runs through the Bytewells API (bytewells.com/docs/api), schedule them and read the dataset as JSON; webhooks work too. The API is Apify-compatible, so apify-client works with the Bytewells base URL. AI agents can run it as a tool through the Bytewells MCP server (bytewells.com/docs/mcp).
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
targetsOne per line. Page or profile URLs (facebook.com/nasa, facebook.com/profile.php?id=100044561550831), usernames (nasa) or numeric ids. Public Pages and public profiles only.
startUrlsThe same Pages in the URL-list shape other Actors output (and that apify/facebook-posts-scraper takes), so a previous Actor's results can be fed straight in. Use this or the field above.
maxPostsPerPagePosts to collect from each Page or profile, newest first. Facebook serves 3 posts per request (about a second), so 300 posts take about 2 minutes per Page; Pages run in parallel.
maxItemsStop after this many posts across all Pages. You pay per post, so this is also your cost cap for the run.
postsNewerThanOptional. Keep only posts published on or after this date, e.g. 2026-01-31 or "7 days" for the last week. Posts are read newest first and each Page stops at the first older one, so old posts are neither fetched nor charged. Free.
postsOlderThanOptional. Keep only posts published before this date, e.g. 2024-01-01. Facebook jumps straight to that date, so a Page's history from 2019 costs no more than its newest posts. Combine with the field above for a date range. Free.
onlyNewPostsFor scheduled runs: the Actor remembers the newest post it delivered for each Page and next time returns only posts published after it, so you are never charged twice for a post. The memory is a named key-value store in your account (facebook-page-monitor-state).
includeVideoTranscriptsFor video and reel posts with captions, add the captions as plain text (videoTranscript). One small download per captioned video from Facebook's file server, no proxy traffic: no extra charge. Videos without captions have none.
The defaults are tuned for speed and cost. Change them only if you know why.
proxyConfigurationKeep the default (Apify residential). Facebook answers timelines only to residential addresses: Apify's own and datacenter addresses are refused on the first request. Residential traffic is included in the price per post.
maxConcurrencyHow many Pages are processed at the same time. Each Page's posts are read one request after another.
requestTimeoutSecsHow long to wait for one response before giving up on it (and moving to another address).
maxRetriesRetries for failed connections when no proxy is used. With a proxy, a refused or failed request moves to another address instead.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is amethyst/facebook-page-monitor (or amethyst~facebook-page-monitor in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"targets": [
"https://www.facebook.com/NASA"
],
"maxPostsPerPage": 20,
"maxItems": 1000,
"onlyNewPosts": false,
"includeVideoTranscripts": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
},
"maxConcurrency": 5,
"requestTimeoutSecs": 30,
"maxRetries": 2
};
const run = await client.actor('amethyst/facebook-page-monitor').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"targets": [
"https://www.facebook.com/NASA"
],
"maxPostsPerPage": 20,
"maxItems": 1000,
"onlyNewPosts": False,
"includeVideoTranscripts": False,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": [
"RESIDENTIAL"
]
},
"maxConcurrency": 5,
"requestTimeoutSecs": 30,
"maxRetries": 2
}
run = client.actor("amethyst/facebook-page-monitor").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/amethyst~facebook-page-monitor/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"targets":["https://www.facebook.com/NASA"],"maxPostsPerPage":20,"maxItems":1000,"onlyNewPosts":false,"includeVideoTranscripts":false,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]},"maxConcurrency":5,"requestTimeoutSecs":30,"maxRetries":2}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

Facebook Pages Scraper - Emails, Phones & Followers
Eimantas V · @amethyst
Scrape Facebook Pages by link, username or ID: email, phone, website, address, exact followers, category, rating and social links. No login or cookies.
Lead generationSocial mediaMarketing$19/mo7-day free trial
Instagram Profile Scraper - Followers, Posts & Emails
Eimantas V · @amethyst
Scrape Instagram profiles by username or URL: exact followers, following and posts, bio, links, emails and phones from bios, engagement rate, latest posts.
Social mediaLead generationMarketing$19/mo7-day free trial
Instagram Search Scraper - Users, Hashtags, Places
Eimantas V · @amethyst
Search Instagram by keyword without logging in: profiles with exact followers, hashtags with post counts, places with addresses, and popular reels.
Social mediaMarketingLead generation$19/mo7-day free trial
TikTok Creator & Profile Scraper
Eimantas V · @amethyst
Scrape TikTok creator profiles in bulk: exact followers, likes and video counts, verified and business flags, Shop seller status, bio links and bio emails.
Social mediaMarketingLead generation$19/mo7-day free trial
Facebook Ads Library Scraper - Meta Ads, All Countries
Eimantas V · @amethyst
Scrape the Facebook Ads Library in any country: ad copy, images, videos, landing pages, CTAs, run dates and advertiser Pages. No login, no token needed.
MarketingSocial mediaBusiness$29/mo7-day free trial
Google Search Results Scraper - SERP API
Eimantas V · @amethyst
Scrape Google search results by keyword: organic results with ranks, places, top stories, knowledge panel, related searches, News and Videos. Any country.
SEO toolsMarketingLead generation$19/mo7-day free trial