Facebook Posts Scraper
Pricing
from $2.00 / 1,000 posts
Facebook Posts Scraper
Scrape posts from any Facebook Page: text, date, reactions by type, comments, shares, video views, photos, videos, links, collaborators and video transcripts. Filter by date range. No login or cookies needed. Export to JSON, CSV or Excel, or use via API.
Pricing
from $2.00 / 1,000 posts
Rating
0.0
(0)
Developer
Arishma
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
What is Facebook Posts Scraper?
Facebook Posts Scraper collects posts from public Facebook Pages and turns them into clean, structured data. Paste in one or more Page URLs, click Start, and get every post with its text, date, reactions, comments, shares, video views, photos, videos and links. No Facebook login or cookies needed.
- 📝 Scrape posts from many Pages in one run
- 👍 Get engagement: reactions by type (Like, Love, Care, Haha, Wow, Sad, Angry), comments, shares and video views
- 🖼 Get media: photos, albums, videos and reels with thumbnails and video URLs
- 🎥 Get video transcripts (Facebook's captions, including auto-generated ones)
- 📅 Filter by date range: only posts newer than, older than, or between two dates
- 🔓 No login or cookies, so your accounts are never at risk
- 💾 Download the data as JSON, CSV, Excel, XML or HTML, or use it through the API
What data can I extract from Facebook posts?
| 📝 Post text and links in it | 🔗 Post URL and ID |
| 📅 Publication date and time | 👤 Author (Page) name, ID and picture |
| 👍 Total reactions | ❤️ Reactions by type |
| 💬 Number of comments | 🔁 Number of shares |
| ▶️ Video plays and views | 🎥 Video transcript |
| 🖼 Photos with their alt text | 📹 Videos and reels with thumbnails |
| 🌐 Shared external link | 🤝 Collaborators and paid partnership label |
| 📚 Ad Library Page ID |
How do I scrape Facebook posts?
- Create a free Apify account with your email.
- Open Facebook Posts Scraper.
- Add one or more Facebook Page URLs, for example
https://www.facebook.com/humansofnewyork/. - Optionally set Max posts per Page, a date range, and turn on video transcripts.
- Click Start and download your data as JSON, CSV, Excel, XML or HTML, or fetch it through the API.
How much does it cost to scrape Facebook posts?
You pay per post scraped; the platform usage and residential proxies are included. To control costs, set Max posts per Page and a date range, or set a maximum cost per run in the run options. The scraper stops as soon as that limit is reached.
| Apify plan | Price per 1,000 posts |
|---|---|
| Free | $5.00 |
| Starter | $4.00 |
| Scale | $2.50 |
| Business | $2.00 |
Each run also has a $0.001 start fee. Video transcripts cost nothing extra.
Date filter add-on: when you set "Posts newer than" or "Posts older than", each post also costs $2.00 / $1.00 / $0.80 / $0.60 per 1,000 (Free / Starter / Scale / Business).
Failed requests: when Facebook blocks or errors a request and the scraper has to retry it, the Apify Proxy traffic of that failed attempt is charged at $0.008 per MB (billed per 100 KB). Successful requests are covered by the per-post price, and runs that use your own proxies are never charged for traffic. The total is shown as failedRequestsProxyTrafficMB in the run's RUN_SUMMARY. The $5 monthly credit on the Free plan covers about 1,000 posts without a date filter.
⬇️ Input
| Field | Description |
|---|---|
startUrls | Page URLs (https://www.facebook.com/BPP), profile.php?id= URLs or plain Page names. |
resultsLimit | Maximum number of posts per Page. Leave empty for all posts (within the date range). |
onlyPostsNewerThan | Only posts published after this date: 2025-03-12, a UTC timestamp such as 2025-09-23T10:02:01, or a relative period such as 7 days, 2 months or 3 hours. |
onlyPostsOlderThan | Only posts published before this date, same formats. Combine both for a custom date range. |
captionText | Download the transcript of video posts into captionText. Default false. |
proxy | Proxy settings. Residential proxies (the default) work best. You can also use your own proxies in proxyUrls. |
Example input:
{"startUrls": [{ "url": "https://www.facebook.com/BPP" }],"resultsLimit": 1000,"onlyPostsNewerThan": "2025-03-12","captionText": false,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
⬆️ Output
The results are stored in a dataset, which you can find in the Storage tab. Each post is one item. Here are a reel and a photo album (long fields shortened):
[{"facebookUrl": "https://www.facebook.com/SamsoniteCanada","postId": "1663728452429357","pageName": "SamsoniteCanada","url": "https://www.facebook.com/reel/1082907384553622/","time": "2026-09-28T13:00:52.000Z","timestamp": 1790600452,"user": {"id": "100063766545121","name": "Samsonite Canada","profileUrl": "https://www.facebook.com/100063766545121","profilePic": "https://scontent.xx.fbcdn.net/v/t39.30808-1/...png"},"collaborators": [],"text": "Meet your new favourite travel Companions. ✨\n\nVoici vos nouveaux Companions de voyage préférés. ✨","likes": 1,"comments": 0,"shares": 0,"topReactionsCount": 1,"isVideo": true,"viewsCount": 141,"videoPostViewCount": 37,"liveViewerCount": 0,"media": [{"thumbnail": "https://scontent.xx.fbcdn.net/v/t15.5256-10/...jpg","__typename": "Video","id": "1082907384553622","playable_duration_in_ms": 6016,"url": "https://www.facebook.com/reel/1082907384553622/","width": 1080,"height": 1920,"videoDeliveryLegacyFields": {"browser_native_sd_url": "https://video.xx.fbcdn.net/o1/v/t2/f2/m412/...mp4","browser_native_hd_url": "https://video.xx.fbcdn.net/o1/v/t2/f2/m266/...mp4"},"...": "..."}],"feedbackId": "ZmVlZGJhY2s6MTY2MzcyODQ1MjQyOTM1Nw==","reactionLikeCount": 1,"paidPartnership": false,"topLevelUrl": "https://www.facebook.com/100063766545121/posts/1663728452429357","facebookId": "100063766545121","pageAdLibrary": { "id": "303801648645", "pamv_comms_data": null },"inputUrl": "https://www.facebook.com/SamsoniteCanada"},{"facebookUrl": "https://www.facebook.com/SamsoniteCanada","postId": "1660881599380709","pageName": "SamsoniteCanada","url": "https://www.facebook.com/SamsoniteCanada/posts/pfbid0KbCscbDdKvnto8h9iA9EK7Sw3NofzoMyQTcQoC2Yy7DGhhp7URAt5128myaG1w2cl","time": "2026-09-25T22:00:17.000Z","timestamp": 1790373617,"user": { "id": "100063766545121", "name": "Samsonite Canada", "profileUrl": "https://www.facebook.com/100063766545121", "profilePic": "https://scontent.xx.fbcdn.net/..." },"collaborators": [],"text": "Pack beautifully. Travel effortlessly.\n\nEmballez avec élégance. Voyagez sans effort.","likes": 0,"comments": 0,"shares": 0,"topReactionsCount": 0,"media": [{ "mediaset_token": "pcb.1660881599380709", "url": "https://www.facebook.com/SamsoniteCanada/posts/pfbid0KbCscbDdKv...", "comet_product_tag_feed_overlay_renderer": null },{"thumbnail": "https://scontent.xx.fbcdn.net/v/t39.30808-6/...jpg","__typename": "Photo","image": { "uri": "https://scontent.xx.fbcdn.net/v/t39.30808-6/...jpg", "height": 590, "width": 472 },"id": "1660881579380711","url": "https://www.facebook.com/photo/?fbid=1660881579380711&set=pcb.1660881599380709","ocrText": "May be an image of suitcase"}],"feedbackId": "ZmVlZGJhY2s6MTY2MDg4MTU5OTM4MDcwOQ==","paidPartnership": false,"topLevelUrl": "https://www.facebook.com/100063766545121/posts/1660881599380709","facebookId": "100063766545121","pageAdLibrary": { "id": "303801648645", "pamv_comms_data": null },"inputUrl": "https://www.facebook.com/SamsoniteCanada"}]
Other fields, when they apply:
reactionLikeCount,reactionLoveCount,reactionCareCount,reactionHahaCount,reactionWowCount,reactionSadCount,reactionAngryCount: reactions by type (only the types the post received).link: the external link the post shares.textReferences: links and mentions inside the post text.captionText: the video transcript, with Include video transcript turned on (nullwhen the video has no captions).viewsCountis the number of plays;videoPostViewCountthe number of views Facebook shows under the post.
Media URLs are signed by Facebook and expire after a few days, so download the files if you need to keep them.
A summary of each run (which Pages succeeded, failed or were skipped, and why) is saved as RUN_SUMMARY in the run's key-value store.
When a Page cannot be scraped (deleted, age-restricted, not a Page URL, ...), the dataset gets one free item for it with inputUrl, error (the code, e.g. NOT_FOUND) and errorDescription, shown in the Errors view. Such a run still ends as succeeded, with the reasons in its status message; it only fails when the scraper itself could not get through to Facebook.
❓ FAQ
Can I scrape posts from personal profiles?
Only from public profiles that Facebook shows to visitors who are not logged in, such as public figures. Most personal profiles are private and return nothing.
Why does a Page return fewer posts than it has?
Facebook only shows logged-out visitors the posts that are public. Posts limited to a country or age group, and posts the Page has hidden, are skipped. Pinned posts are skipped too, because they would break the date order.
Why does a Page fail as age-restricted?
Pages about alcohol, gambling and similar topics can be age-restricted by their owners. Facebook shows them only to logged-in adults, so the scraper cannot open them and reports them as failed with the code AGE_RESTRICTED right away instead of retrying.
How does the date filter work?
Facebook filters by date on its side, so asking for an old period (for example, posts older than 2024-01-01) does not page through all newer posts first. Dates without a time are read as midnight UTC.
Why are some video view counts empty?
Facebook does not show view counts for some videos, for example videos attached to events or shared from other Pages.
Can I use the scraper through the API?
Yes. Every run can be started, scheduled and monitored through the Apify API, and you can fetch the results from the run's dataset. For Node.js use the apify-client NPM package, and for Python the apify-client PyPI package. The API tab has ready-to-use code examples.
Can I use it with AI agents through MCP?
Yes. Through the Apify MCP server you can let AI assistants such as Claude, or your own agents, run the scraper and read its results.
Do I need proxies?
Facebook blocks most server IPs, so proxies are needed. On the Apify platform residential proxies are used by default and you do not have to set anything up. You can also plug in your own proxies in the Proxy configuration input. If a request fails on your own proxy (blocked, rate-limited, out of traffic, wrong password) or you run without a proxy, the scraper gives it one more try on Apify residential proxy, so the Page is still scraped. That try is billed like any Apify Proxy run: only if it fails, at $0.008 per MB of its traffic.
Can I connect the data to other apps?
Yes. Through Apify integrations you can send the results to Google Sheets, Google Drive, Slack, Make, Zapier, Airbyte, GitHub, Keboola and more, or set up webhooks to act whenever a run finishes.
Is it legal to scrape Facebook posts?
This scraper collects only posts that Pages choose to show publicly, and it never logs in. However, your results may contain personal data, which is protected by regulations such as the GDPR in the European Union. Do not scrape personal data unless you have a legitimate reason to. If you are unsure, consult a lawyer. You can also read the Apify blog post on the legality of web scraping.
Your feedback
If you have technical feedback or found a bug, please open an issue in the Issues tab and include the run link and the Pages you tried.