Facebook Posts Scraper⚡
Pricing
from $2.50 / 1,000 post scrapeds
Facebook Posts Scraper⚡
📊Scrape public Facebook posts from Pages, Profiles, and direct post, video, photo, or share URLs. Get text, media, reactions, comment and share counts, HD/SD video URLs, captions, timestamps, optional comments, replies, share details, date filters, and multi-profile support⚡Facebook Posts Scraper⚡
Pricing
from $2.50 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
Premium Scraper
Actor stats
0
Bookmarked
12
Total users
8
Monthly active users
21 minutes ago
Last modified
Categories
Share
✨ Facebook Posts Scraper | Public Posts, Comments & Shares ⚡
Facebook Posts Scraper collects public Facebook timeline posts and direct Facebook post, video, photo, and share URLs, then optionally expands public comments, replies, and share-detail rows from Facebook's public endpoints.
Facebook Posts Scraper is built for users who want a cleaner public-post dataset, predictable grouped sections, and simpler billing visibility without carrying the full weight of Facebook's raw internal payloads.
The actor is designed for high-signal output:
- Common post fields are surfaced at the top level.
- Engagement, comments, replies, and share details are grouped into predictable sections.
- Raw Facebook payload fields are still preserved when useful.
Highlights
Facebook Posts Scraper highlights the parts of public Facebook content that most downstream users actually need.
- 🚀 Timeline scraping for public profiles and pages
- 🔗 Direct Facebook post, video, photo, and share-style URL support
- 💬 Optional top-level comment collection
- ↪️ Optional per-comment reply expansion
- 🔁 Optional People who shared this post detail collection
- 📅 Optional native date filters
- 💸 Pay-per-event ready billing with clear budget logs
Supported Inputs
Facebook Posts Scraper accepts both timeline targets and direct Facebook post URLs in one actor input.
| Field | Type | Default | What it does |
|---|---|---|---|
username | string[] | — | Facebook usernames such as Cristiano, nike |
facebook_urls | object[] | — | Profile/page URLs, direct post URLs, direct video URLs, direct photo URLs, or share-style post URLs |
posts_count | integer | 10 | Requested number of timeline posts per profile/page |
include_individual_posts | boolean | false | When on, direct post, video, photo, and share URLs in facebook_urls are scraped as standalone posts |
include_comments | boolean | false | When on, top-level comments are collected into comment_details |
comments_limit | integer | 20 | Requested top-level comments per post |
comment_filter | string | most_relevant | Comment ordering: most_relevant, newest, all_comments |
include_comment_replies | boolean | false | When on, replies are collected under each comment in all_replies |
comment_replies_limit | integer | 10 | Requested replies per collected top-level comment |
include_post_share_person_details | boolean | false | When on, public reshare stories are collected into share_details |
share_people_limit | integer | 10 | Requested public reshare-story rows per post |
posts_newer_than | date | — | Optional lower date bound |
posts_older_than | date | — | Optional upper date bound |
At least one of username or facebook_urls is required.
Supported URL Formats
Facebook Posts Scraper supports the following public Facebook URL shapes.
| Input type | Example |
|---|---|
| Username | Cristiano |
| Profile URL | https://www.facebook.com/Cristiano |
| People URL | https://www.facebook.com/people/Page-Name/123456789/ |
| Direct post URL | https://www.facebook.com/Cristiano/posts/pfbid0Dp9Wrmv1NAkFX1nSkKwLEKftjMSHbDYNBZE7L43y8JnTs77USeJ7cpC5FoGgm3inl |
| Direct video post URL | https://www.facebook.com/netflix/videos/2445344335530649/ |
| Direct photo URL | https://www.facebook.com/photo/?fbid=10123456789012345&set=a.2012345678901234 |
| Share-style post URL | https://www.facebook.com/share/p/1aocP4P5eR/ |
Direct post URLs are processed only when include_individual_posts = true.
Output Overview
Facebook Posts Scraper returns one normalized row per scraped Facebook post.
Each dataset item is one Facebook post row.
The actor returns four kinds of data in the same row:
- Top-level convenience fields for the most commonly used values.
- Grouped sections for engagement, comments, replies, and shares.
- Additional endpoint-derived raw rows in
additional_endpoint_datafor data that is not promoted into the main normalized groups. - Preserved raw Facebook fields for the original payload.
Top-Level Common Fields
Facebook Posts Scraper exposes these top-level fields first so the most useful post data is easy to read and export.
These are the fields most users work with first.
| Field | Type | Description |
|---|---|---|
number | integer | Row number inside the current run |
profile_link | string | Source profile URL or direct post source URL |
post_id | string | Facebook numeric post id |
permalink_url | string | Canonical Facebook post URL |
created_at | string | ISO 8601 UTC timestamp |
message_text | string | Plain-text post message when Facebook exposes it |
profile_name | string | Main author/page name |
profile_id | string | Main author/page id |
profile_url | string | Main author/page URL |
profile_picture_url | string | Main author/page profile image URL |
profile_is_verified | boolean | Main author/page verification flag |
reaction_count_total | integer | Total reactions for the post when available |
reaction_count_reduced | string | Short reaction label such as 492K |
comment_count_total | integer | Total comments when available |
comment_count_reduced | string | Short comment label when available |
share_count_total | integer | Total shares when available |
share_count_reduced | string | Short share label when available |
video_view_count_total | integer | Video views when available |
top_reaction_types | array | Reaction names such as Like, Love, Haha |
top_reaction_labels | array | Human labels such as Love ❤️ |
top_reactions_breakdown | array | Reaction-by-reaction counts |
attachment_types | array | Attachment/media types surfaced from the payload |
attachment_count | integer | Total attachment count |
photo_attachment_count | integer | Photo attachment count |
video_attachment_count | integer | Video attachment count |
primary_attachment_type | string | Main attachment type |
primary_attachment_target_url | string | Main attachment target URL |
attachment_target_urls | array | All extracted attachment target URLs |
primary_image_url | string | Main image URL |
image_urls | array | All image URLs |
video_urls_hd | array | All HD video URLs |
video_urls_sd | array | All SD video URLs |
captions_urls | array | All captions URLs |
matched_fragment_count | integer | Present when multiple direct-post fragments were merged |
Long download-style video and captions links are emitted in the array fields (video_urls_hd, video_urls_sd, captions_urls) rather than duplicated as separate single-string fields.
Grouped Sections
Facebook Posts Scraper uses grouped sections to keep engagement, comments, replies, shares, and endpoint extras easy to understand.
post_engagement
Grouped engagement summary for the main post.
| Field | Description |
|---|---|
post_engagement.reactions | Reaction totals |
post_engagement.comments | Comment totals |
post_engagement.shares | Share totals |
post_engagement.video | Video view totals |
The detailed reaction breakdown stays only in the top-level fields top_reaction_types, top_reaction_labels, and top_reactions_breakdown to avoid duplication.
comment_details
In Facebook Posts Scraper, comment_details is the main grouped block for top-level public comment collection.
Returned when comment collection is enabled. When disabled, this field becomes a guidance object.
| Field | Description |
|---|---|
comment_details.enabled | true or false |
comment_details.collection_status | Status message and pagination policy |
comment_details.request | Requested vs returned top-level comment feedback |
comment_details.counts | Total, visible, hidden, and returned comment counts |
comment_details.selected_filter | Ordering mode, token, available modes, and filtering note |
comment_details.all_comments | Array of normalized top-level comments |
comment_details.all_comments[]
Each top-level comment row contains:
| Field | Description |
|---|---|
comment_id | GraphQL comment node id |
comment_legacy_fbid | Legacy Facebook comment id |
depth | 0 for parent comments |
created_at | ISO 8601 UTC timestamp |
message_text | Comment text |
comment_links | Direct comment URLs |
author | Profile name, id, links, avatar links, verification flag |
engagement | Reactions, top reaction breakdown, reply counts, visibility note |
reply_details | Requested vs returned reply feedback for this comment |
attachments | Attachment counts/details for the comment |
all_replies | Full reply rows when reply collection is enabled |
Important:
- There is no top-level
comment_replies_detailsfield. - Full reply rows live only inside each parent comment under
all_replies. - When reply collection is off,
reply_detailsandall_repliesreturn guidance instead of rows.
comment_details.all_comments[].all_replies[]
Each reply row contains:
| Field | Description |
|---|---|
comment_id | Reply node id |
comment_legacy_fbid | Reply legacy id |
parent_comment_id | Parent comment id |
depth | 1 for replies |
created_at | ISO 8601 UTC timestamp |
message_text | Reply text |
comment_links | Direct reply URLs |
author | Reply author details |
engagement | Reply reaction totals and breakdown |
attachments | Reply attachments/media details |
share_details
In Facebook Posts Scraper, share_details is the grouped block for public reshare-story collection.
Returned when share-detail collection is enabled. When disabled, this field becomes a guidance object.
| Field | Description |
|---|---|
share_details.enabled | true or false |
share_details.collection_status | Status message and pagination policy |
share_details.request | Requested vs returned share-person feedback |
share_details.counts | Total shares, preview count, visible rows, hidden rows, returned rows |
share_details.preview_people | Small preview list from the tooltip |
share_details.all_share_people | Full normalized reshare-story rows |
share_details.all_share_people[]
Each public reshare-story row contains:
| Field | Description |
|---|---|
post_id | Reshare post id |
permalink_links | Permalink URLs for the reshare story |
created_at | ISO 8601 UTC timestamp |
message_text | Reshare text |
profile | Sharer profile details |
engagement | Reactions, comments, shares, video views when available |
attachments | Media details for the reshare story |
additional_endpoint_data
This section keeps only endpoint-derived extra data that is not already represented by the top-level fields, comment_details, share_details, or post_engagement.
Typical contents include:
share_endpoint_data.share_people
Each share_endpoint_data.share_people[] row is intentionally compact and keeps only extra share-story context such as:
story_idstory_typeshould_host_actor_link_in_watchfuture_of_feed_infoattached_story
The nested attached_story summary keeps links in array fields such as permalink_links, image_urls, video_urls_hd, video_urls_sd, and captions_urls when Facebook exposes them.
Raw Facebook Fields
Facebook Posts Scraper still preserves the useful raw Facebook payload fields that commonly matter for downstream work, including fields such as:
actorsattachmentsattached_storycomet_sectionsfeedbackfeedback_summaryidmessageownerpermalink_urltitleurl- video-specific delivery fields for video posts
The exact raw field set varies by post type:
- Standard timeline story rows include story/feed metadata.
- Direct video rows include video-delivery fields, playback/caption URLs, dimensions, and video ids.
- Share-style rows can include different permalink and attached-story structures.
Requested vs Returned Feedback
Facebook Posts Scraper does not silently hide shortfalls.
Facebook Posts Scraper also surfaces requested-versus-returned feedback so users can see when Facebook exposed fewer public rows than requested.
When you request more rows than Facebook publicly exposes, the actor tells you that directly in the grouped sections:
comment_details.requestcomment_details.all_comments[].reply_details.requestshare_details.request
That feedback shows:
- requested count
- returned count
- available count signal when Facebook exposes one
- whether more public data may still exist
- a human-readable message explaining why fewer rows were returned
Billing and Maximum Cost
Facebook Posts Scraper is designed for Apify pay-per-event billing.
Important behavior:
- Timeline profile/page rows charge once per returned post, and direct URLs charge once per returned individual post.
- Turning on comment, reply, or share-detail collection does not charge by itself. Billing applies only to returned comment rows, reply rows, and share-person rows.
- Non-default comment ordering (
newest,all_comments) still adds the separate per-post comment-filter surcharge. - Applying date filters still adds the separate per-post date-filter surcharge.
- Maximum Cost Per Run only works when the actor is actually running under
PAY_PER_EVENTpricing.
Run Logs
Facebook Posts Scraper uses short operational logs so a run is easier to follow.
| Emoji | Meaning |
|---|---|
🧭 | Run configuration |
👥 / 👤 | Profile queue or current profile |
🔗 | Direct-post queue or current direct post |
💬 | Comment collection |
↪️ | Reply collection |
🔁 | Share-detail collection |
📚 | Pagination policy |
📅 | Date-filter state |
💸 | Billing mode or per-event count summary |
🛡️ | Secret handling |
✅ | Step completed |
⚠ / 🛑 | Warnings and stop conditions |
🏁 | Run completion |
Facebook Posts Scraper FAQ
Why did I get fewer comments, replies, or share-person rows than I requested?
Because Facebook stopped exposing more public rows. The actor reports that clearly in the relevant request block instead of silently pretending the request was fulfilled.
Custom Solutions?
Need a tailored Facebook Posts Scraper setup with custom fields, higher volume, scheduled runs, or integrations with your existing pipeline?
✉️ Contact premiumscraper@gmail.com
Privacy & Compliance
Facebook Posts Scraper collects only publicly available Facebook data and is designed to avoid storing request secrets in exported output.
Use Facebook Posts Scraper responsibly and make sure your collection workflow matches applicable laws, privacy obligations, and platform terms.
- The actor collects only publicly available Facebook data.
- No Facebook login, cookies, or private API token is required from the user.
- No private messages, friend lists, or non-public content are accessed.
- Facebook request tokens used during scraping stay in memory only and are never written to logs or dataset rows.
- Proxy credentials and authorization headers are never exposed in actor output.
- When PAY_PER_EVENT monetization is active, user spending limits are respected and the run stops on budget; when PPE is inactive, the actor logs that maximum cost cannot be enforced for that run.
- Always ensure your use of scraped data complies with applicable laws and platform terms of service.
