Facebook Posts Scraper avatar

Facebook Posts Scraper

Pricing

from $3.00 / 1,000 facebook results

Go to Apify Store
Facebook Posts Scraper

Facebook Posts Scraper

Scrape public Facebook page posts with text, timestamps, reactions, comments, shares, video views, and follower counts. Supports cursor pagination, multi-session completeness checks, and standalone profile follower extraction.

Pricing

from $3.00 / 1,000 facebook results

Rating

0.0

(0)

Developer

Scraper Creator

Scraper Creator

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Facebook Page Statistics

Collect public Facebook page posts, engagement statistics, and exact follower counts without supplying login cookies or an API token.

How to use

  1. Add 1–5 public Facebook page URLs under Page URLs.
  2. Set Posts per page (resultsLimit, default 100, maximum 10,000). Choose a limit large enough to cover the accessible feed: the Actor must reach the end and verify matching post IDs across independent sessions.
  3. Keep the default Malaysian (MY) residential proxy or supply your own supported proxy configuration. Cloud runs require a proxy; residential traffic adds cost.
  4. Start the Actor and wait for verification. It reads the feed at least twice, so results may not appear immediately.
  5. Check the run status and RUN-SUMMARY, then export the dataset or retrieve it through the Apify API. Use successful runs for complete snapshots.

For followers only, switch to JSON input and use the profile example below. Remove resultsLimit; setting it to zero does not select followers-only mode.

Run memory defaults are managed in Apify Console under Actor Settings. The source does not declare defaultMemoryMbytes; explicit run, task, or API memory settings can override the cloud default. Memory is a run option, not an input JSON field.

Input

Example

{
"startUrls": [{ "url": "https://www.facebook.com/facebook" }],
"resultsLimit": 100
}

Fields

FieldRequiredDescription
startUrlsYesArray of 1–5 objects containing a public page url. Plain URL strings are not accepted.
resultsLimitFor postsMaximum posts per page, from 1 to 10,000. The form prefills 100. Remove this field for followers-only mode.
proxyConfigurationNoDefaults to an Apify MY residential proxy. Cloud runs reject an explicit no-proxy setting.

Use a page URL such as https://www.facebook.com/facebook. Numeric page URLs using /profile.php?id=... are also accepted. Individual post, Reel, group, and watch URLs are not supported.

Followers-only input

For profile followers, omit resultsLimit:

{
"startUrls": [{ "url": "https://www.facebook.com/facebook" }]
}

Followers-only mode returns one profile row per page and no post rows.

Output

Each dataset row represents one post.

Example

The following is a synthetic example, not live statistics:

{
"postId": "123",
"facebookId": "456",
"facebookUrl": "https://www.facebook.com/example",
"followers": 59,
"inputUrl": "https://www.facebook.com/example",
"url": "https://www.facebook.com/example/posts/123",
"topLevelUrl": "https://www.facebook.com/456/posts/123",
"user": {
"id": "456",
"name": "Example"
},
"text": "Title\nBody #example",
"time": "2026-10-19T00:00:00.000Z",
"timestamp": 1792368000,
"likes": 0,
"comments": 0,
"shares": 0,
"viewsCount": 5,
"hashtags": [
"#example"
],
"scrapedAt": "2026-10-19T06:00:00.000Z",
"warnings": []
}

Fields

FieldDescription
postId, facebookId, facebookUrl, inputUrlPost and page identity, page URL, and requested source.
url, topLevelUrlPost permalink and URL built from the verified numeric page/post IDs.
user.id, user.nameAuthor identity and name.
text, hashtagsPost text and hashtags.
time, timestamp, scrapedAtPublication time and collection time.
likes, comments, shares, viewsCountTotal reactions, comments, shares, and video plays. Plays are not a separate video-view metric.
followers, warningsCurrent exact page follower count, repeated on its posts, and data notices.

Followers-only rows contain pageId, facebookId, pageUrl, facebookUrl, inputUrl, followers, and scrapedAt. Use this mode for a page with no posts. Counts are snapshots and may change after collection.

Data accuracy

Unavailable metrics remain null; confirmed zero remains 0. Text-only and photo posts can have no play count. Missing or rounded followers fail the target rather than returning an estimate. Only English follower labels are supported.

Viewing and exporting results

Open the run's dataset to view the returned rows. Export JSON to preserve nested fields such as user and arrays such as hashtags, or use a tabular export for spreadsheet analysis. API integrations can retrieve items from the run's default dataset.

Open RUN-SUMMARY in the run's default key-value store to check each requested page. A dataset containing rows does not by itself mean the whole run completed successfully.

Pricing

Check the Actor page for current prices. In pay-per-event runs, each returned result is billable. Proxy usage may add separate charges. Results delivered before a failure or budget stop may already be charged; a failed run does not mean no cost.

Post verification reads the feed at least twice and consumes proxy traffic before output. A low result budget does not cap those verification costs.

Limits and failures

  • Posts must reach end-of-feed and pass independent verification before they are returned. Reaching resultsLimit before end-of-feed fails the run with RESULTS_LIMIT_BEFORE_END_OF_FEED in RUN-SUMMARY. That profile is not retried and its buffered posts are not published or charged as results; the attempt still incurs platform usage. Increase the limit to cover the accessible feed, up to 10,000. A page ending exactly at the limit can succeed after the usual matching complete traversals.
  • Inconsistent results produce COMPLETENESS_UNVERIFIED. Inaccessible feeds, invalid required data, interrupted collection, and storage errors can also fail the run. Previously written verified results may remain; import successful runs only.
  • Verification reduces transient omissions but cannot prove that all historical posts are public or accessible. Compare with your own saved post list when full historical coverage matters.
  • A budget stop produces an incomplete, failed run with partial: true and stopReason: MAX_TOTAL_CHARGE_REACHED in RUN-SUMMARY.
  • Cloud runs require a proxy. If you see PROXY_REQUIRED, restore the default MY residential proxy or provide a supported configuration. Proxy access is not guaranteed.
  • Private analytics, comment bodies, media downloads, video transcription, and individual-post refresh are not supported.

Refreshing statistics

Start a new run with the same input and a fresh dataset. Posts mode collects and verifies the accessible feed again; it does not refresh individual post URLs. For a follower-only update, use the profile input above.

For API compatibility and operator setup, see DEVELOPMENT.md.