Facebook Posts Scraper avatar

Facebook Posts Scraper

Under maintenance

Pricing

from $6.00 / 1,000 posts

Go to Apify Store
Facebook Posts Scraper

Facebook Posts Scraper

Under maintenance

Scrape public Facebook posts, reels, videos, and visible engagement data from pages, profiles, and public groups. Unofficial actor, not affiliated with Facebook or Meta.

Pricing

from $6.00 / 1,000 posts

Rating

5.0

(1)

Developer

Netdesignr

Netdesignr

Maintained by Community

Actor stats

2

Bookmarked

130

Total users

8

Monthly active users

9 days ago

Last modified

Categories

Share

Scrape public Facebook posts, reels, videos, and engagement data from pages, profiles, and public groups. This Apify actor is designed for lower-cost public-surface extraction, cleaner pricing, and API-first workflows without requiring a Facebook login.

Pages, profiles, groups, reels | No login | Keyword filters | API-ready | AI workflow friendly

Why use this Facebook scraper

  • Extract public Facebook posts from pages, profiles, and public groups.
  • Capture reels and video post URLs alongside captions, thumbnails, and visible engagement.
  • Filter by keyword and date without making users pay an extra add-on for date filtering.
  • Choose fast, balanced, or full extraction depending on cost and depth.
  • Export results to JSON, CSV, Excel, XML, RSS, or any dataset format supported by Apify.
  • Run on demand, schedule recurring runs, or call it through the Apify API from your own app.

What data can I extract with Facebook Posts Scraper?

Use this actor to collect the public post data most teams actually need for monitoring, reporting, and content analysis.

Source and post identityContent and mediaEngagement and diagnostics
Source type such as page, profile, or groupPost text and reel captionsVisible reaction totals
Source name and canonical Facebook URLHashtags, links, and visible text referencesVisible comment counts
Post ID and clean post URLImage URLs, thumbnails, and media assetsVisible share counts
Publish time and visible time label like 19h or 2dVideo metadata when Facebook exposes itTop comment previews when enabled
Page or profile details such as category, intro, and websiteReel, photo, video, and mixed-media post coverageHashtag trend summary for recurring content analysis

Detailed output fields include sourceType, sourceName, canonicalSourceUrl, postId, postUrl, time, timeText, text, textReferences, hashtags, totalReactions, comments, shares, media, thumbnails, video, topCommentsPreview, page, and warnings.

What makes this actor different

  • Public-surface first: built around logged-out Facebook pages, profiles, reels, and groups that are visible without a session.
  • Cleaner pricing model: meant to launch with one simple per-result price instead of charging extra for date filters.
  • Better control: fast, balanced, and full modes let users tune speed and cost.
  • Better observability: every run stores RUN_META so operators can audit empty runs, retries, failures, and whether hashtag reporting was generated.
  • Better output hygiene: tracking parameters are removed from Facebook URLs before results are stored.
  • Built-in hashtag analytics: optionally writes a HASHTAG_TREND_SUMMARY key-value record for trend spotting, competitor monitoring, and campaign reporting.

Example workflows and case-study use cases

  • Brand monitoring: track the latest posts and reels from competitor pages each morning and export them into Slack, Sheets, or your warehouse.
  • Hospitality marketing: monitor hotel, resort, and venue pages to compare post cadence, reel usage, and visible engagement across markets.
  • Lead research: pull public posts from local businesses, creators, or communities and use visible links and hashtags to enrich outreach lists.
  • AI knowledge pipelines: schedule daily runs and feed cleaned Facebook post data into retrieval, summarization, or agent workflows.

How to scrape Facebook posts

  1. Open this actor in Apify Store and click Try for free.
  2. Paste one or more Facebook page, profile, or group URLs into startUrls.
  3. Set maxPosts and choose fast, balanced, or full.
  4. Optionally add keywordFilter, dateFrom, dateTo, or top comment previews.
  5. Start the run and export the dataset in the format you need.

Input parameters

ParameterTypeDefaultDescription
startUrlsarray[]Main list of Facebook pages, profiles, or public groups
pageOrProfileUrlsarray[]Shortcut list for pages and profiles
groupUrlsarray[]Shortcut list for public Facebook groups
maxPostsinteger5Maximum posts emitted across all targets
dateFromstringnoneKeep posts on or after YYYY-MM-DD
dateTostringnoneKeep posts on or before YYYY-MM-DD
keywordFilterarraynoneOnly keep posts whose visible text matches one of the keywords
extractionModestringfastfast, balanced, or full
includeTopCommentsbooleanfalseInclude visible top comments when Facebook shows them
commentPreviewLimitinteger2Max visible comment previews per post
includeTranscriptsbooleanfalseBest-effort video transcript extraction in richer runs
deduplicatebooleantrueRemove duplicates across overlapping sources
proxyConfigurationobjectnoneOptional user-supplied proxy configuration; no proxy is used by default
residentialProxyFallbackModestringoffAutomatic residential fallback is disabled for cost control; legacy retry inputs are treated as off
includeHashtagTrendSummarybooleantrueSave a HASHTAG_TREND_SUMMARY record with top hashtags and engagement totals
debugModebooleanfalseAdds extra diagnostics for troubleshooting
emptyRunPolicystringretry_then_failControls the final outcome when zero posts are emitted after retry

Example input

{
"startUrls": [
{ "url": "https://www.facebook.com/NASA" }
],
"maxPosts": 5,
"extractionMode": "fast",
"dateFrom": "2026-03-01",
"keywordFilter": ["design", "launch", "website"],
"includeTopComments": false,
"commentPreviewLimit": 2
}

Output example

{
"sourceType": "page",
"sourceName": "NetDesignr",
"canonicalSourceUrl": "https://www.facebook.com/netdesignr",
"postId": "pfbidExample123",
"postUrl": "https://www.facebook.com/netdesignr/posts/pfbidExample123",
"time": "2026-03-17T18:40:00.000Z",
"timeText": "19h",
"text": "We just launched a new website performance and UX audit workflow for growing brands.",
"hashtags": ["website", "performance"],
"totalReactions": 14,
"comments": 3,
"shares": 1,
"warnings": ["timestamp_estimated_from_relative_time"],
"scrapedAt": "2026-03-18T17:42:00.000Z"
}

Facebook scraper API examples

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('netdesignr/facebook-posts-scraper').call({
startUrls: [{ url: 'https://www.facebook.com/NASA' }],
maxPosts: 5,
extractionMode: 'fast',
includeTopComments: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("netdesignr/facebook-posts-scraper").call(run_input={
"startUrls": [{"url": "https://www.facebook.com/NASA"}],
"maxPosts": 5,
"extractionMode": "fast",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/netdesignr~facebook-posts-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.facebook.com/NASA"}],
"maxPosts": 5,
"extractionMode": "fast"
}'

Pricing and monetization

This actor uses simple per-result pricing based on dataset items. The pricing model is designed to stay straightforward, with no separate add-on fee for date filtering.

FAQ

Can I scrape Facebook pages without logging in?

Yes, for public surfaces that Facebook exposes to logged-out browsers. Private or restricted pages, groups, and profiles may return partial or empty data.

Does this actor support Facebook reels?

Yes. Reels are extracted as Facebook post URLs and marked as video media when they are visible on the public page.

Can I filter by date?

Yes. dateFrom and dateTo use the best available publish time. The actor first uses GraphQL creation times matched to the post id, then exact dates from permalink labels, tooltips, or abbr/time elements. If only a relative label such as 19h is available, it stores an estimated timestamp with timestamp_estimated_from_relative_time in warnings.

The actor scrolls incrementally and brings the last post into view to trigger lazy loading. Feed collection has a 45-second budget per target and allows up to four consecutive iterations without new posts, using 2.25-second waits when the feed stalls. It stops as soon as filtered, deduplicated results reach maxPosts. Navigation and optional detail enrichment can add runtime. Media-only posts retain text: "" when a post permalink identifies them.

Do I need proxies?

Not always. Many public pages work without them, and this actor never enables residential proxies automatically. Add an explicit proxy configuration only when the reliability need justifies the extra traffic cost.

Yes. By default the actor stores a HASHTAG_TREND_SUMMARY key-value record that ranks hashtags by post volume and engagement, plus source coverage and latest seen time.

Can I use this as a Facebook API alternative?

Yes, for public post collection, competitor monitoring, research, content analysis, and hashtag trend reporting. This actor is useful when you need public Facebook post data without building and maintaining your own scraper stack.

What are the main limitations?

Exact timestamps, full reaction breakdowns, and transcripts depend on what Facebook exposes publicly. The actor does not invent missing values and reports partial-visibility warnings instead.

Use this actor only for data you have the right to collect and process. Respect Facebook's terms, local law, privacy obligations, and any downstream compliance requirements such as GDPR or CCPA. Review Apify's documentation and your legal requirements before using scraped public data in production.

Empty-run policy

emptyRunPolicy defaults to retry_then_fail. After the existing retry attempts, zero result items fail the run with a clear status message. Choose retry_then_warn to exit successfully with WARNING: 0 items when the actor has not hit a technical-failure condition. Original technical-failure conditions still force exit 1 regardless of this policy. Older saved retry_then_succeed inputs normalize to retry_then_warn. RUN_META retains actor telemetry and records itemsEmitted, requested, emptyRun, emptyRunPolicy, nonEmptySuccess, technicalSuccess, exitCode, and warnings. Summary-only output does not count as scraped results.