Facebook Posts Scraper avatar

Facebook Posts Scraper

Pricing

from $1.80 / 1,000 posts

Go to Apify Store
Facebook Posts Scraper

Facebook Posts Scraper

Scrape posts from Facebook profiles and pages by URL or numeric id. Pushes one dataset item per fetched feed batch.

Pricing

from $1.80 / 1,000 posts

Rating

0.0

(0)

Developer

Harpoon

Harpoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

Extract posts from Facebook profiles, pages, and public groups — captions, media, publish time, and full engagement (reactions, comments, shares, views) — as clean, ready-to-use rows.

  • Every post, not just the latest. Walk a profile's history forward or bound it to a date range.
  • Public groups too. Add a group URL to the same list and pull its discussion feed the same way.
  • Public data only. No login, cookies, or account required.
  • Engagement included. Reactions, comments, shares, views, media URLs, and author details in the same row.
  • One row per post. Export to JSON, CSV, Excel, or XML straight from the dataset.

Built for content research, competitor tracking, influencer analysis, community research, brand monitoring, and AI/LLM datasets.

What can Facebook Posts Scraper do?

TargetWhat it does
users (profile / page / public group URLs)Fetch posts from profiles, pages, and public groups.
Numeric idsTarget a profile or page by its numeric Facebook id.

You control how many posts come back (max_posts) and can narrow the run with date bounds. Profiles and pages are fetched fast in parallel time windows; group feeds can be ordered by new posts, top posts, or recent activity.

Every run also gives you export to JSON / CSV / Excel / XML, API and webhook access, scheduled runs, and MCP access for AI agents.

What data can you get?

One row per post, with these fields:

📦 Group🔎 Fields
Identitypost_id, feedback_id, permalink_url, seo_title
Contenttext, media_type, media_url, is_video, is_text_only_story
Timingcreation_time, publish_time, published_at, created_at
Engagementlikes, views, comments, shares, video_view_count, video_post_view_count
Authoractors.id, actors.name, actors.url, actors.profile_picture
Detailsengagement.*, media[], story_media_metadata.*, collaborators, interesting_top_level_comments
Flagssponsored_data, paid_partnership

How to use Facebook Posts Scraper

  1. Create a free Apify account.
  2. Open Facebook Posts Scraper in Apify Console.
  3. Paste one or more profile, page, or public group URLs into Profiles / Pages / Groups.
  4. Optionally set Max posts per target and date bounds.
  5. Click Start and wait for the run to finish.
  6. Download from Storage ▸ Dataset as JSON, CSV, Excel, or XML.

Input

There are two ways to identify a target — use either (they can be mixed in the same list):

  • URL — paste the profile, page, or public group URL, e.g. https://www.facebook.com/zuck or https://www.facebook.com/groups/dataminers.
  • Numeric id — a profile/page numeric id, e.g. 4. To target a group by id, use its /groups/<id> URL.

All targets go in the same Profiles / Pages / Groups list; group URLs are detected automatically.

Results

  • max_posts — hard cap on posts per profile, page, or group (default 20). The final batch is trimmed so exactly up to this many posts are returned.

Time frame

  • after_time — only posts published on or after this point (profiles/pages only).
  • before_time — only posts published on or before this point (profiles/pages only).

Each field has an Absolute / Relative switch: Absolute takes a date (2024-01-01) or full timestamp (2024-01-01T12:00:00); Relative takes a rolling window like 3 days, 2 weeks, or 1 month. Times are UTC.

Public group feeds have no server-side date filtering, so group posts ignore after_time/before_time — every fetched post is returned up to max_posts.

Group post order

  • group_sort — order for group feeds: CHRONOLOGICAL (default, newest first), TOP_POSTS (Facebook's ranking), or RECENT_ACTIVITY (bumped by new comments, so old posts can appear).

Language

  • language — locale used when requesting the posts.

Example input

{
"users": [
"https://www.facebook.com/zuck",
"https://www.facebook.com/groups/dataminers"
],
"group_sort": "CHRONOLOGICAL",
"max_posts": 20,
"language": "en"
}

See the Input tab above for every field and its default.

Output

Results land in the default dataset under Storage ▸ Dataset. Built-in Overview and Engagement views make the data readable immediately. Download as JSON, CSV, Excel, or XML.

Sample post

{
"post_id": "10117934760258471",
"feedback_id": "ZmVlZGJhY2s6MTAxMTc5MzQ3NjAyNTg0NzE=",
"permalink_url": "https://www.facebook.com/reel/2281597032594351/",
"text": "...",
"creation_time": 1788893848,
"publish_time": 1788892763,
"published_at": "2026-01-15T12:00:00Z",
"media_type": "Video",
"media_url": "https://...",
"likes": 10000,
"views": 0,
"comments": 29370,
"shares": 9583,
"is_video": true,
"actors": { "id": "4", "name": "Mark Zuckerberg", "url": "https://www.facebook.com/zuck", "profile_picture": "https://..." },
"engagement": {
"reaction_count": 10000,
"comment_count": 29370,
"share_count": 9583,
"top_reactions": [ { "localized_name": "Like", "reaction_count": 9032 } ]
},
"media": [ { "browser_native_hd_url": "https://...", "thumbnail_image": "https://...", "width": 1080, "height": 1920 } ]
}

Field names follow Facebook's own lowercase snake_case names.

Use cases

  1. Content and cadence research — pull a page's recent posts and analyze posting frequency, formats, and topics.
  2. Competitor benchmarking — compare engagement (likes, comments, shares, views) across pages.
  3. Influencer vetting — check post reach and reaction mix before a partnership.
  4. Brand monitoring — track your own posts over a date range and export to your BI tool.
  5. AI / LLM datasets — use captions, media URLs, and engagement as structured training or RAG data.

How much does it cost?

Facebook Posts Scraper is priced per result (pay-per-result) at $2.00 per 1,000 posts ($0.002 each), plus a small Apify platform fee. Starting a run is free.

  • 1,000 posts ≈ $2.00 in actor cost.
  • 5,000 posts ≈ $10.00.
  • Filtered-out or failed items are not charged.

See the Pricing tab for plan discounts.

FAQ

Do I need a Facebook account, login, or cookies? No. The actor reads publicly available posts — no login, cookies, or account required.

Can it get posts from public groups? Yes. Add public group URLs to users (for example https://www.facebook.com/groups/dataminers) — they are detected automatically. Private groups are not supported; only posts that are visible without logging in are returned.

Can it get posts from private profiles or groups? No. It only returns posts that are visible publicly.

How many posts can I get? max_posts (default 20) caps the total per profile, page, or group. Raise it for more, but large pulls take longer.

Why do the numbers differ from what I see when logged in? Public views can show different reaction or view counts than a logged-in session. The dataset reflects what is publicly available at run time.

Is it legal to extract this data? Results may contain personal data, which is protected by GDPR and similar laws. Only scrape personal data when you have a legitimate reason, and follow the terms of the data source and your local laws.

Can I use it from the API, SDKs, or an AI agent? Yes — use the API tab for JavaScript, Python, REST, and CLI examples, or connect the Apify MCP server to call it from Claude, ChatGPT, or another MCP client.

Something isn't working. Check that each entry is a valid profile/page URL or numeric id. If it still fails, open an issue in the Issues tab with your input JSON.

Notes and limitations

  • Public content only — private profiles, private/restricted groups, and login-walled posts are not available.
  • max_posts is a hard cap — the final batch is trimmed so the total is never exceeded.
  • Parallel time windows — profiles/pages are fetched as parallel weekly windows and stitched newest-first. A post sitting exactly on a window boundary can occasionally be skipped.
  • Groups walk the feed sequentially — public group feeds have no date-range support, so they are walked page by page (with group_sort).
  • Group date bounds are ignoredafter_time/before_time only apply to profiles and pages. Public group feeds are not filtered by date, so every fetched post is returned up to max_posts. Old posts can still appear because group_sort: RECENT_ACTIVITY/TOP_POSTS surface posts by engagement or comments; use group_sort: CHRONOLOGICAL for newest-first ordering.
  • Counts can differ from the logged-in view — hidden or viewer-specific metrics won't appear.
  • Personal data — posts and author details may contain personal data. Handle the results accordingly.

Integrations

Call the actor from your own code or an AI agent — see the API tab for JavaScript, Python, REST, and CLI. MCP clients can add the actor via the Apify MCP server. Schedule runs or trigger them with webhooks from Apify Console.

Support

Found a bug or have feedback? Open an issue in the Issues tab, or email islam.tazerout@outlook.com.