Facebook Profile Scraper (Private & Public)
Pricing
$15.00/month + usage
Facebook Profile Scraper (Private & Public)
Facebook scraper for profile posts, comments, media, links, engagement totals, and date-filtered monitoring. Run anonymously for public content or use authorized cookies for account-visible posts. Export JSON, CSV, Excel, API, or MCP-ready data for research and monitoring.
Pricing
$15.00/month + usage
Rating
3.0
(7)
Developer
Iñigo Garcia Olaizola
Maintained by CommunityActor stats
12
Bookmarked
2.9K
Total users
45
Monthly active users
7.4 hours
Issues response
a day ago
Last modified
Categories
Share
Facebook Profile Scraper — Public Posts, Comments & Media
Scrape Facebook profile posts for social listening, content monitoring, competitor research, and historical archives. Download structured post data with authors, dates, text, media, links, engagement totals, and optional comments.
🤖 What does Facebook Profile Scraper do?
The Facebook Profile Scraper collects posts from public Facebook profiles and from profiles your authorized account can view. Each result includes the post details and the engagement totals shown to that visitor.
It supports:
- Profile timelines — collect posts from one or more profile URLs.
- Comments — include visible comments with authors, dates, and text.
- Date ranges — focus on a period or divide a historical collection into smaller runs.
- Media and links — keep image, video, and link references attached to each post.
- Anonymous or authenticated access — choose the mode that matches the content you are allowed to view.
Great for: social listening, competitor monitoring, campaign research, content archives, and academic research.
SEO keywords: Facebook scraper, Facebook profile scraper, scrape Facebook posts, Facebook comments scraper, Facebook API alternative, Apify Actor.
💡 Why scrape Facebook?
- 📈 Monitor publishing activity — follow new posts from brands, pages, creators, or public figures.
- 💬 Understand conversations — collect visible comments for research and reporting.
- 🔎 Compare competitors — review posting frequency, formats, links, and engagement totals.
- 🗂️ Build an archive — preserve public post information for later analysis.
🧠 Scraping modes
Anonymous mode
Leave cookies empty to collect content Facebook shows to logged-out visitors. This is the simplest choice for public profiles and quick tests, and it does not require a Facebook login.
Authenticated mode
Provide cookies from a Facebook account you control when you need content visible only to that account. The actor uses the account’s existing permissions and does not bypass Facebook privacy settings.
To provide a session:
- Log in to Facebook in your browser.
- Export the cookies with a trusted cookie-export tool such as Cookie-Editor.
- Paste the complete exported cookie array into the
cookiesinput.
🔐 Security note: Cookies can grant access to your account. Never share them publicly, and only use a session you are authorized to use. The actor does not need your Facebook password.
Authenticated runs use a more careful request pace. If Facebook rejects the session, the run stops so you can refresh the session instead of repeatedly retrying it.
🚀 Quick start
- Open the actor — Add Facebook Profile Scraper to your Apify account.
- Add profile URLs — Enter one or more URLs such as
https://www.facebook.com/zuck. - Choose access — Leave
cookiesempty for public content, or add cookies from your authorized account. - Set limits — Choose
maxItems,maxComments, and an optional date range. - Choose comments — Set
commentstotruewhen conversation data is needed. - Run and export — Start the run and download JSON, CSV, or another dataset format.
💳 Pricing
Apify’s Free plan includes monthly credits for small tests. Larger histories, many profiles, and comment-heavy runs require enough runtime and proxy capacity for the workload.
📝 Input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
urls | Array of strings | Yes | Facebook profile URLs. Supports profile names and numeric profile.php?id=... URLs. |
maxItems | Integer | No | Maximum number of posts across the run. Default: 10; 0 means no configured post limit. |
maxComments | Integer | No | Maximum comments per post when comments is enabled. Default: 10; 0 means no configured comment limit. |
startDate | String | No | Newer boundary of the inclusive date range, in YYYY-MM-DD format. |
endDate | String | No | Older boundary of the inclusive date range, in YYYY-MM-DD format. |
comments | Boolean | No | Include visible comments in each post. Default: false. |
cookies | Array | No | Complete cookie export for authenticated mode. Leave empty for anonymous mode. |
waitTime | Integer | No | Seconds between requests for authenticated runs. Default: 2; 0 also uses the 2-second default. Anonymous runs ignore this setting. |
proxyConfiguration | Object | No | Apify Proxy settings. Residential proxies are recommended for reliable public-profile runs and larger workloads. |
Example inputs
Anonymous public-profile collection
{"urls": ["https://www.facebook.com/zuck","https://www.facebook.com/facebook"],"maxItems": 100,"maxComments": 50,"comments": true,"startDate": "2026-01-01","endDate": "2025-01-01","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Authenticated collection
{"urls": ["https://www.facebook.com/example.profile"],"cookies": [{"domain": ".facebook.com","name": "c_user","value": "REPLACE_WITH_EXPORTED_VALUE","path": "/","secure": true},{"domain": ".facebook.com","name": "xs","value": "REPLACE_WITH_EXPORTED_VALUE","path": "/","secure": true}],"maxItems": 50,"maxComments": 25,"comments": true,"waitTime": 3}
Replace the cookie values with the complete export from your authorized session.
📊 Output and results
Each dataset item represents one Facebook post. The comments array is included only when comments is enabled and Facebook makes comments visible. Optional fields are omitted when Facebook does not provide them.
Field reference:
id(string) — Unique post ID.attached_id(string) — Related or attached post ID, when present.profile_url,profile_name(string) — Profile being scraped.pinned(boolean) — Whether the post is pinned.created_at(date) — Publication date and time.permalink(string) — Direct Facebook URL for the post.author(object) — Author ID, name, profile URL, and image.message(string) — Post text.comment_count,reaction_count,share_count(number) — Engagement totals shown by Facebook.comments(array) — Visible comments with ID, date, author, and message.images(array) — Attached image IDs, URLs, and permalinks.videos(array) — Attached video IDs, URLs, thumbnails, and permalinks.links(array) — Links found in the post.location(object) — Location information when available.
Example result
{"id": "1627099462795401","profile_url": "https://www.facebook.com/facebook","profile_name": "Facebook","pinned": false,"created_at": "2026-08-28T13:20:58Z","permalink": "https://www.facebook.com/facebook/posts/1627099462795401","author": {"id": "20531316728","name": "Facebook","url": "https://www.facebook.com/facebook","image": "https://scontent.example/facebook.jpg"},"message": "Building communities together.","comment_count": 2950,"reaction_count": 21640,"share_count": 96,"comments": [{"id": "28258528367119103","parent_id": "","created_at": "2026-08-30T15:14:11Z","author": {"id": "100002327993075","name": "Jiali Yang","url": "https://www.facebook.com/jiali.yang.10","image": "https://scontent.example/jiali.jpg"},"message": "This is a great reminder."}],"images": [{"id": "image-123456","url": "https://scontent.example/community.jpg","permalink": "https://www.facebook.com/photo.php?fbid=123456"}],"links": ["https://www.facebook.com/community"]}
🧭 Tips for better results
- Collect more discussion: enable
commentsand raisemaxCommentsto the number needed per post. - Scrape a large history: split the period with
startDateandendDateacross multiple runs. - Keep runs focused: set
maxItemsto the number of posts you actually need. - Run multiple profiles: add all profile URLs to
urls;maxItemsapplies across the run. - Start simply: begin anonymously with comments disabled, then add depth only when needed.
⚙️ Best practices
- Start anonymously for public content. Use authenticated mode only when your account is authorized to view the profile.
- Treat exported cookies like account access and store them securely.
- Keep the default
waitTimeor increase it for long authenticated runs. - If an authenticated run stops after Facebook rejects the session, refresh the cookies before trying again.
- A
maxCommentsvalue of0removes the configured cap, but Facebook may still limit what it makes visible.
🌍 Proxy usage
The input is prefilled with Apify Residential Proxy, which is recommended for public-profile runs and larger collections. Keep proxy use enabled when scraping many profiles or when the same run needs a stable connection.
⚖️ Legal and ethical considerations
- Respect Facebook’s Terms of Service and applicable laws.
- Use authenticated cookies only from an account you own or are authorized to use.
- Handle personal data responsibly and follow privacy obligations such as GDPR and CCPA.
- Avoid excessive collection, respect access restrictions, and use reasonable limits.
- Do not republish personal information or content without the appropriate permission and legal basis.
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. Facebook is a trademark of Meta Platforms, Inc.
❓ FAQ
Do I need Facebook cookies?
No. Anonymous mode works for content Facebook shows to logged-out visitors. Add cookies only when you need content visible to your authorized account.
Can this access a private profile?
Only when the supplied account is already allowed to view it. The actor does not bypass Facebook privacy settings.
How do I collect more comments?
Set comments to true and increase maxComments. The number returned can still vary with visibility, region, and Facebook’s own limits.
Why did I receive fewer posts than expected?
Facebook controls what is visible to each visitor. Check the profile URL, date range, maxItems, account permissions, and proxy location.
What does waitTime do?
It controls the pause between requests for authenticated runs. 0 uses the safe 2-second default. Anonymous runs ignore it.
What profile URLs are supported?
Use URLs such as https://www.facebook.com/zuck or https://www.facebook.com/profile.php?id=123456789.
🛟 Support
Need a custom field, filter, or export?
Open an issue or contact the developer with an example of the Facebook data you need.