Facebook Posts Scraper ($2/1000 results)
Pricing
from $2.00 / 1,000 results
Facebook Posts Scraper ($2/1000 results)
π Scrape public Facebook page posts, captions, and engagement data in a few clicks.
Pricing
from $2.00 / 1,000 results
Rating
5.0
(3)
Developer
API ninja
Maintained by CommunityActor stats
13
Bookmarked
337
Total users
62
Monthly active users
8 days ago
Last modified
Categories
Share
What does Facebook Posts Scraper do?
Facebook Posts Scraper lets you extract posts from public Facebook pages and individual post URLs in a repeatable, API-friendly way. Paste one or more Facebook page URLs, page IDs, or direct post links, choose how many results you want, optionally add a date range, and run the Actor to collect post data into an Apify dataset.
This Actor is built for teams and individuals who need public Facebook page content, engagement metrics, and structured output without building and maintaining their own scraper pipeline. Because it runs on the Apify platform, you also get scheduling, monitoring, logs, integrations, and API access out of the box.
What can this Facebook Posts Scraper do?
- Extract posts from public Facebook pages
- Accept Facebook page URLs, numeric page IDs, and individual post URLs
- Fetch one post directly from its URL, without resolving a page ID or collecting its feed
- Collect paginated results automatically
- Limit output with
maxResultsor keep going withparseAllResults - Filter posts by optional
startDateandendDate - Return structured post data including message text, author info, URLs, timestamps, and engagement counts
- Save results to an Apify dataset that you can export as JSON, CSV, Excel, XML, or HTML
This Actor is especially useful if you want a Facebook page posts API workflow combined with Apify features such as:
- Scheduling recurring runs
- API access for automation
- Run history and logs for monitoring
- Integrations with Make, Zapier, webhooks, and custom systems
- Scalable execution without managing infrastructure
Why use Facebook Posts Scraper?
If you work with social media data, public content monitoring, reporting, or research, this Actor gives you a practical way to turn Facebook page activity into structured data.
Common use cases include:
- Tracking brand pages over time
- Monitoring competitors' posting activity
- Collecting post engagement metrics for reporting
- Building internal dashboards for content analysis
- Archiving public page content for research or audits
- Feeding public Facebook page data into ETL and BI pipelines
Instead of manually checking pages or building your own collection process, you can use this Actor as a reusable data source inside the Apify platform.
What data can Facebook Posts Scraper extract?
The Actor returns one dataset item per post. Depending on the post, the output can include core content, author fields, engagement totals, media references, and attached objects.
| Field | Description |
|---|---|
post_id | Unique Facebook post identifier |
type | Post type |
url | Direct URL to the Facebook post |
message | Main post text |
message_rich | Rich-text post message when available |
timestamp | Post timestamp in Unix seconds |
comments_count | Number of comments |
reactions_count | Total number of reactions |
reshare_count | Number of reshares |
reactions | Breakdown of reactions such as like, love, care, haha, wow, sad, angry |
author.id | Facebook page ID of the author |
author.name | Facebook page name |
author.url | Facebook page URL |
author.profile_picture_url | Profile image URL |
image | Attached image data when present |
video | Attached video data when present |
external_url | External link attached to the post when present |
How to scrape Facebook page posts or individual posts
Using this Actor is straightforward:
- Open Facebook Posts Scraper in Apify Console.
- In the Input tab, add public Facebook page URLs, numeric page IDs, or individual post URLs. You can mix them in one run.
- Set
maxResultsif you want to cap the number of saved posts per page. - Turn on
parseAllResultsif you want the Actor to paginate until no more posts are available. - Optionally set
startDateand/orendDateinYYYY-MM-DDformat. - Click Start.
- Review the dataset in the Storage tab or access it via API.
This flow works well for both no-code users and developers. Non-technical users can run it directly in the Apify Console. Developers can trigger runs and download results programmatically through the Apify API.
Input
The Actor input is designed to be simple:
urls: Required. A list of Facebook page URLs, numeric page IDs, or individual post URLs.maxResults: Optional. Maximum number of posts to save per input page.parseAllResults: Optional. When enabled, the Actor keeps paginating until there are no more results.startDate: Optional. Start of the date range inYYYY-MM-DDformat.endDate: Optional. End of the date range inYYYY-MM-DDformat.
Direct post URLs return one dataset item per input link. The Actor fetches post details and logs βPost details retrieved and savedβ after saving the result. maxResults, parseAllResults, startDate, and endDate apply only to page feeds; direct posts are retrieved regardless of their publication date.
If both startDate and endDate are provided, the Actor validates that the start date is not later than the end date.
Example input:
{"urls": ["https://www.facebook.com/facebook/","100064860875397","https://www.facebook.com/sugoimedia/posts/pfbid0G3toRTS8i1VEp81CG8h6gURB1RWkkuHVUHL1jnYA7EoFQMpiyDxaehLsiQvMtL1Hl"],"maxResults": 100,"parseAllResults": false,"startDate": "2026-05-08","endDate": "2026-05-14"}
Recognized individual post URL formats
The Actor identifies content links by their path and identity query parameters. The /page/posts/post-id format also appears in Apple's FacebookPost documentation. Common formats include:
| Format | Example |
|---|---|
Page post (numeric ID or pfbid...) | https://www.facebook.com/sugoimedia/posts/pfbid... |
| Post permalink | https://www.facebook.com/permalink.php?story_fbid=456&id=123 |
| Mobile post | https://m.facebook.com/story.php?story_fbid=456&id=123 |
| Group post | https://www.facebook.com/groups/123/posts/456/ or /groups/123/permalink/456/ |
| Photo post | https://www.facebook.com/photo.php?fbid=456 or /photo/?fbid=456 |
| Page photo | https://www.facebook.com/example/photos/a.123/456/ |
| Video post | https://www.facebook.com/example/videos/456/ (also /videos/title/456/) |
| Watch/video link | https://www.facebook.com/watch/?v=456 or /video.php?v=456 |
| Reel | https://www.facebook.com/reel/456/ |
| Shared post, video, or reel | https://www.facebook.com/share/p/TOKEN/ (also /share/v/ and /share/r/) |
| Short video link | https://fb.watch/TOKEN/ |
Facebook subdomains such as m.facebook.com, mbasic.facebook.com, and web.facebook.com are recognized. Query parameters that identify a post are preserved. Page tabs such as /example/posts/ and /example/videos/ remain page inputs because they do not identify an individual post. Numeric inputs remain page IDs, not post IDs.
These formats are routed to the post-details service. Recognizing a link does not guarantee that the upstream service can retrieve it: private, deleted, restricted, or unsupported content may fail. For shared or short links that fail, try the full post permalink. Ephemeral Facebook Stories and generic /share/TOKEN/ links are not supported as direct post inputs.
Output
The Actor stores results in the default dataset. Direct post links save the returned post object in the same dataset format as page posts; additional fields such as authors, media details, and top_comments are included when the service returns them. You can download the dataset in various formats such as JSON, HTML, CSV, Excel, XML, or RSS depending on your workflow.
Example output:
[{"post_id": "1486934193478596","type": "post","url": "https://www.facebook.com/facebook/posts/pfbid0YYGLM1J7LhQafNHkQ7HngKyAMVrW1ednAunWsVbTLc6MpDT1Grsmqx48sx626unPl","message": "This is your sign to spend some time outside today π","message_rich": "This is your sign to spend some time outside today π","timestamp": 1776870303,"comments_count": 7637,"reactions_count": 49639,"reshare_count": 4159,"reactions": {"angry": 45,"care": 1109,"haha": 331,"like": 36638,"love": 11356,"sad": 39,"wow": 121},"author": {"id": "100064860875397","name": "Facebook","url": "https://www.facebook.com/facebook","profile_picture_url": "https://example.com/profile.jpg"},"external_url": null,"comments_id": "1486934193478596","shares_id": "1486934193478596","associated_group_id": null}]
How much does it cost to scrape Facebook page posts?
The cost depends on:
- how many Facebook pages or direct post links you process
- how many posts you request per page
- whether you enable full pagination with
parseAllResults - how often you run the Actor
If you only need recent posts from a small set of pages, costs stay low. If you run large historical collections across many pages with full pagination, usage will increase accordingly.
To keep costs predictable:
- start with a small
maxResults - test on one or two pages first
- only enable
parseAllResultswhen you need the full archive available through pagination - use date filters to reduce unnecessary collection
For many users, the fastest way to estimate cost is to run a small sample and then scale up based on the number of pages and posts actually needed.
Tips and advanced options
- Use numeric page IDs when you already have them. This reduces one resolution step before post collection begins.
- Use date filters when you need a specific reporting period.
- Use
maxResultswhen you only need recent or representative samples. - Use
parseAllResultswhen completeness matters more than speed. - Check the run logs to review request parameters, pagination progress, retries, and saved item counts.
- Use the Apify API if you want to trigger this Actor from your own app or data workflow.
FAQ
Can I scrape personal Facebook profiles?
Personal profile feeds are not supported. Page feed scraping is designed for public Facebook pages. Individual post links are fetched through the post-details service when the content is publicly accessible.
Can I use both URLs and numeric IDs in one run?
Yes. The urls input can contain a mix of public Facebook page URLs, numeric page IDs, and direct post URLs.
For Facebook URLs in the form profile.php?id=<numeric ID>, the Actor uses the ID directly and skips the page ID lookup. This does not add support for personal profile feeds.
Can I collect all available posts from a page?
Yes. Turn on parseAllResults and the Actor will continue paginating until no more results are available.
Can I filter by date?
Yes, for page feeds. Direct post URLs always fetch the requested post regardless of date. You can provide startDate, endDate, or both. If both are provided, the Actor validates the date range before the run proceeds.
What if a request fails?
The Actor makes up to four attempts per request. For HTTP 429 rate limits, it waits 1, 3, and 5 seconds between attempts, plus up to 250 milliseconds of random jitter. When the provider supplies a valid Retry-After header, the Actor uses that cooldown instead. Explicit quota exhaustion stops retries immediately. Cooldowns longer than 60 seconds stop the request with a clear error so you can retry later. Other request failures retain the one-second retry delay. Logs include the HTTP status, and monitoring records selected numeric rate-limit diagnostics without storing provider response bodies.
A successful first page with no posts and no cursor gets one confirmation request after 3 seconds. If it is still empty, the run finishes successfully with zero posts. Later empty pages without a cursor end pagination immediately; empty pages with a cursor continue to the next page. HTTP failures during the confirmation request follow the error retry policy above.
Can I export the data to spreadsheets or BI tools?
Yes. Dataset results can be exported in common formats, and you can also consume them through the Apify API.
Disclaimers and support
This Actor is intended for collecting publicly available Facebook page data. Make sure your use complies with the target website terms and with the laws and regulations that apply in your jurisdiction.
If you run into an issue, check:
- the Actor input for invalid URLs or date ranges
- the run logs for request and pagination details
- the Issues tab for feedback and known limitations
If you need custom fields, custom transformations, or a broader Facebook data workflow, this Actor can be extended into a more tailored solution.
