

Extract posts from public Facebook Pages into structured data — post text, timestamps, reactions, comments, shares, author info, media attachments, and more. No Facebook login or API token required.
Facebook Posts Scraper automatically extracts posts from public Facebook Pages into structured data — post text, timestamps, engagement metrics, author details, media attachments, and more. No Facebook login or API token is required; just enter one or more public Page URLs and the scraper does the rest.
📝 Post body text (text) | #️⃣ Hashtags, @mentions, and external links extracted from text (textReferences) |
🕒 Publish time as ISO8601 string (time) and Unix timestamp (timestamp) | 🔗 Post permalink (url) and source Page URL (facebookUrl) |
� Author profile ID, name, URL, and avatar (userId, userName, userProfileUrl, userProfilePic) | 👥 Co-authors / collaborators (collaborators) |
�👍 Total reaction count (likes) | ❤️ Reaction breakdown: Like, Love, Care, Haha, Wow (reactionLikeCount, etc.) |
💬 Comment count (comments) | 🔁 Share count (shares) |
🖼️ Media attachments — images and videos with URLs, thumbnails, dimensions, and type (media) | Primary external link shared in the post (link) |
👁️ Video view count when available (viewsCount) | 📋 Original input URL for data traceability (inputUrl) |
startUrlsOne or more public Facebook Page URLs to scrape. Each URL should point to a publicly accessible Facebook Page (brand, creator, public figure, etc.). The scraper opens each URL in a headless browser, dismisses any login modal that appears, intercepts GraphQL responses, and falls back to DOM parsing when needed.
Supported URL formats:
https://www.facebook.com/humansofnewyork/https://www.facebook.com/nasahttps://www.facebook.com/Meta/Not supported: Private profiles, closed groups, event pages, or personal timelines — this scraper is designed exclusively for public Page timelines.
The startUrls field accepts a JSON array. Each element can be a plain URL string or an object with a url property.
Example — single URL:
Example — multiple URLs:
resultsLimitMaximum number of posts to extract per start URL. Set to 0 to scrape all available posts (the scraper will keep scrolling until no new posts are found). Default value is 20.
| Value | Behavior |
|---|---|
0 | Unlimited — scrape all posts found on the Page |
20 | Stop after collecting 20 posts (default) |
100 | Stop after collecting 100 posts |
captionTextWhen enabled, the scraper attempts to extract subtitle/transcript text from video posts. This is a best-effort feature — subtitle availability depends on whether Facebook's GraphQL response includes caption data for a given video. Default is false.
Tip: Most public video posts do not include transcript data in the GraphQL response. Enable this option when you specifically need video text content, but expect that many videos may not have transcript data available.
Use these two parameters to narrow down which posts to extract based on their publish time. You can use them individually or combine both to define a specific time window.
onlyPostsNewerThanOnly keep posts published on or after this time. Posts published before this time are skipped. Supports the following formats:
| Format | Example |
|---|---|
| Date (YYYY-MM-DD) | 2025-01-15 |
| ISO 8601 datetime | 2025-01-15T00:00:00Z |
| Relative time (English) | 3 months, 2 weeks, 1 day, 6 hours |
| Relative time (Chinese) | 3个月, 2周, 1天, 6小时 |
| Unix timestamp (seconds) | 1736899200 |
Relative expressions are calculated from the current time. For example, 3 months means "from 3 months ago until now".
onlyPostsOlderThanOnly keep posts published on or before this time. Posts published after this time are skipped. Accepts the same formats as onlyPostsNewerThan.
Example — scraping posts from a specific date range:
Example — scraping recent posts only:
After each successful run, result data is generated in the Output panel. It is shown as a table by default, with category tabs for grouped browsing. You can also switch to JSON view with one click.
For export, you can download CSV, JSON, JSONL, XLS, XLSX, HTML, XML, or RSS. Before exporting, you can select or deselect specific fields, or download the complete view with all related data.
When the scraper processes a post, a complete record is returned. Here is a representative example showing the full output structure:
| Field | Type | Description |
|---|---|---|
facebookUrl | string | Source Page URL (the input Page URL) |
postId | string | Unique post ID from the GraphQL response |
pageName | string | Page or account display name |
url | string | Direct post permalink |
time | string | Publish time as ISO8601 string |
timestamp | number | Publish time as Unix seconds |
text | string | Post body text; empty string when absent |
textReferences | array | Extracted hashtags, @mentions, and external links from the body |
likes | integer | Total reaction count |
comments | integer | Comment count |
shares | integer | Share count |
media | array | Image/video list; each item has url, thumbnail, width, height, type |
userId | string | Author profile ID |
userName | string | Author display name |
userProfileUrl | string | Author profile URL |
userProfilePic | string | Author avatar URL |
user | object | Author backup object {id, name, profileUrl, profilePic} |
link | string | Primary external link in the post |
reactionLikeCount | integer | Like reaction breakdown |
reactionLoveCount | integer | Love reaction breakdown |
reactionCareCount | integer | Care reaction breakdown |
reactionHahaCount | integer | Haha reaction breakdown |
reactionWowCount | integer | Wow reaction breakdown |
viewsCount | integer | Video view count (when available) |
collaborators | array | Co-authors |
inputUrl | string | Original input URL (provenance) |
Note: Not all fields are guaranteed for every post. Fields like
viewsCount,collaborators, andlinkare best-effort and may benullwhen the data is not available in the GraphQL response. Reaction breakdowns (reactionLikeCount, etc.) are best-effort;likes(total reaction count) is more reliably populated.
The scraper connects to a headless browser (Camoufox or Chrome WebSocket), opens each Facebook Page URL you provide, and automatically dismisses any login modal that appears — Facebook's login prompt is a closable modal, not an authentication wall, so public Page content loads normally after dismissal.
Once the Page loads, the scraper intercepts Facebook's internal GraphQL API responses in real time to extract structured post data. It then scrolls down the Page to trigger additional GraphQL requests and load more posts. If GraphQL interception yields no results (for example, due to Facebook's internal response format changes), the scraper falls back to parsing the page's DOM for embedded JSON data.
All data is extracted without requiring a Facebook account, login credentials, or API token.
No. The scraper works entirely without login. It handles Facebook's login modals by dismissing them automatically, which is sufficient for accessing public Page content.
You can scrape any publicly accessible Facebook Page. This includes brand Pages, creator Pages, public figure Pages, and organization Pages. The key requirement is that the Page must be publicly viewable without login.
Private profiles, closed groups, personal timelines, and event pages are not supported by this scraper.
There is no hard limit. The resultsLimit parameter controls how many posts are collected per run. Set it to 0 for unlimited — the scraper will keep scrolling until it runs out of new posts or hits the internal scroll limit. For most public Pages, you can expect to collect several hundred to a few thousand posts in a single run.
Speed depends on the number of posts you want, the Page's loading speed, and network conditions. A typical run collecting 50–100 posts from a single Page completes in a few minutes. Scraping multiple Pages runs them sequentially, so total time scales with the number of URLs.
When you open a Facebook Page, the browser makes API calls to Facebook's internal GraphQL endpoints to load post data. The scraper listens for these API responses in real time and extracts the structured JSON data directly from them. This is more reliable than parsing the rendered HTML, since the data comes straight from Facebook's data layer.
If no GraphQL responses are intercepted (which can happen if Facebook changes its internal API structure), the scraper automatically falls back to DOM parsing. It reads the page's HTML, extracts embedded JSON blobs from script tags, and parses them for post data. This fallback is best-effort but ensures the scraper remains functional even when Facebook's frontend changes.
Facebook shows a login modal when unauthenticated users visit a Page. This modal is not an authentication wall — it's a dismissible dialog. The scraper clicks the close button (or presses Escape), removes any remaining dialog overlays via JavaScript, and unlocks page scrolling. This allows the Page content to load normally without requiring any credentials.
The scraper scrolls up to 30 times per Page URL. If 3 consecutive scrolls yield no new posts, the scraper stops scrolling for that URL. This prevents infinite scrolling on Pages with limited post history while still maximizing data collection for active Pages.
Yes. Use the onlyPostsNewerThan and onlyPostsOlderThan parameters to define a time window. The scraper filters posts by their publish timestamp and stops scrolling early once it encounters posts outside the window, which also improves efficiency.
You can download results in 8 formats: CSV, JSON, JSONL, XLS, XLSX, HTML, XML, and RSS. Choose the format that best fits your workflow — CSV or XLSX for spreadsheets, JSON/JSONL for programmatic processing, XML/RSS for feeds, and HTML for quick viewing.
Yes. You can use the CoreClaw REST API to run this scraper programmatically. The base URL is https://openapi.coreclaw.com, and every endpoint path starts with /api/v2. Authenticate with Authorization: Bearer YOUR_API_KEY.
A typical API workflow is:
GET /api/v2/workers/{workerId}/input-schema.POST /api/v2/workers/{workerId}/runs, passing inputs under input.parameters.custom.data.run_slug.GET /api/v2/worker-runs/{runId} to check run status.GET /api/v2/worker-runs/{runId}/result to fetch results, or GET /api/v2/worker-runs/{runId}/result/export to export a file.For full details, see the CoreClaw API documentation.
Yes. You can use the CoreClaw REST API or MCP server to integrate with automation tools like Make, Zapier, n8n, or your own workflows. Use webhooks to trigger downstream actions when a scrape run completes.
No. This scraper is included in your CoreClaw plan. For details on plan limits and pricing, see the CoreClaw pricing page.
Scraping publicly available data is generally permissible in many jurisdictions, but legality depends on the specific data, your jurisdiction, your purpose, and how you handle personal information. This scraper only accesses publicly visible Page content without authentication. Always respect personal data and intellectual property rules, scrape only when you have a legitimate reason, and review Facebook's Terms of Service for your use case.
We are continuously improving this scraper's performance and coverage. If you find a bug or notice missing fields, please provide the input settings you used, the approximate runtime, and a small output sample. You can reach us through the website live chat or by email at support@coreclaw.com so we can reproduce and fix the issue.
Explore more popular scrapers from our marketplace
by CoreClaw
Extract data in real time via URLs, easily capture posts, shares and engagement metrics, free from complex infrastructure maintenance and IP blocks. One-click CSV/JSON export supported.
by CoreClaw
Extract public Facebook event data in bulk via URLs, including details, attendance and organizer info. One-click CSV/JSON export, no coding required.
by CoreClaw
Scrape Facebook profiles by inputting a profile URL, including basic user information, work experience, education background, contact information, etc., and output them in CSV or JSON format.
by CoreClaw
Extract public Facebook event data in bulk from event list URLs, including basic info, organizer and participant data. Export CSV/JSON with one click, no coding required.