Facebook Profile Scraper — No Login Required
Pricing
from $2.00 / 1,000 post extracteds
Facebook Profile Scraper — No Login Required
Extract posts, reactions, and images from any public Facebook profile. No login or cookies needed. Supports date filtering, profile info extraction, and Smart Scrape dedup.
Pricing
from $2.00 / 1,000 post extracteds
Rating
0.0
(0)
Developer
Crowd Pull
Maintained by CommunityActor stats
1
Bookmarked
236
Total users
36
Monthly active users
0.55 hours
Issues response
4 days ago
Last modified
Categories
Share
Extract posts and profile info from any public Facebook profile — no login or cookies required.
No browser automation — just fast, lightweight HTTP requests for reliable extraction.
Features
- No login required — extracts posts anonymously from public profiles
- Smart Scrape (dedup) — skip posts already scraped in previous runs, saving up to 75% on recurring scrapes
- Profile info extraction — public name, category, likes/followers/talking-about metrics, services, and contact fields when Facebook exposes them
- Full post data — text, author, permalink, timestamp, reactions, comments, shares, images, videos, hashtags
- Date filtering — extract posts newer than a specific date (ISO or relative:
7d,30d,6m) - Multi-profile support — process multiple profiles in a single run
- Pagination — follows Facebook's available timeline cursors until the requested limit or exposed feed ends
- Low cost — runs on 256MB memory, no browser overhead
Smart Scrape: How It Saves You Money
Enable Smart Scrape to skip posts you've already extracted. The scraper maintains a persistent cache per profile that survives across runs indefinitely.
| Without Smart Scrape | With Smart Scrape | |
|---|---|---|
| Run 1 (500 posts) | $1.76 | $1.76 |
| Run 2 (125 new) | $1.76 | $0.8225 |
| Run 3 (125 new) | $1.76 | $0.8225 |
| Run 4 (125 new) | $1.76 | $0.8225 |
| Monthly total | $7.04 | $4.2275 |
| Unique posts | 875 (+ 1,125 duplicate rows) | 875 (zero duplicate rows) |
| Cost per unique post | $0.0080 | $0.0048 |
This example uses the currently applied Free-tier post price ($0.0035), $0.001 cache checks, the $0.005 profile-info event, and the $0.005 run-start charge. It assumes includeProfileInfo: true. Higher Apify tiers have lower post prices; verify the Store pricing panel for current rates.
Refresh Window
Set refreshWindowDays to re-check recent posts for updated comment/reaction counts. For example, refreshWindowDays: 7 re-scrapes posts from the last 7 days even if cached, so you always get fresh engagement data on recent content.
What you get
Profile info (when includeProfileInfo is enabled)
| Field | Description |
|---|---|
name | Profile display name |
profileUrl | Direct link to the profile |
services | Array of listed services |
contactPhone | Phone number (if public) |
contactEmail | Email address (if public) |
followersCount | Number of followers, or null when Facebook does not expose it |
likesCount | Number of page/profile likes, or null |
talkingAboutCount | Current “talking about this” metric, or null |
category | Public category, when present |
address | Public address, when present |
website | Public website, when present |
entityType | Facebook entity type (User, Page, or Unknown) |
type | Always "profileInfo" |
Posts
| Field | Description |
|---|---|
postId | Unique post identifier |
postUrl | Direct permalink to the post |
profileUrl | Link to the source profile |
profileName | Profile display name |
authorName | Author's display name |
text | Full post text content |
timestamp | ISO 8601 timestamp |
imageUrls | Array of image URLs attached to the post |
videoUrls | Array of video URLs attached to the post |
reactionCount | Number of reactions, or null when unavailable |
commentCount | Number of comments, or null when unavailable |
shareCount | Number of shares, or null when unavailable |
hashtags | Array of hashtags extracted from the post text |
scrapedAt | ISO 8601 timestamp of when the post was scraped |
How it works
- Fetches the profile page anonymously — no login, no cookies, no browser
- Extracts CSRF tokens and numeric user ID from the page HTML
- Queries Facebook's internal GraphQL API for timeline posts
- Parses public profile metadata from server-rendered profile/About data and structured GraphQL fields
- Checks each post against the dedup cache (if Smart Scrape is enabled)
- Paginates via Relay cursors until
maxPostsis reached or Facebook stops exposing cursors - Saves updated cache for next run
Input examples
Basic extraction
{"startUrls": [{ "url": "https://www.facebook.com/profile.php?id=61580944632584" }],"maxPosts": 20}
With profile info and posts
{"startUrls": [{ "url": "https://www.facebook.com/zuck" }],"maxPosts": 50,"includeProfileInfo": true,"onlyPostsNewerThan": "30d"}
Smart Scrape (incremental monitoring)
{"startUrls": [{ "url": "https://www.facebook.com/zuck" },{ "url": "https://www.facebook.com/profile.php?id=61580944632584" }],"maxPosts": 100,"enableDedup": true,"refreshWindowDays": 7}
Output example
Profile info
{"name": "Example Public Page","profileUrl": "https://www.facebook.com/profile.php?id=123456789","services": [],"contactPhone": null,"contactEmail": null,"followersCount": null,"likesCount": null,"talkingAboutCount": null,"category": null,"entityType": "Page","type": "profileInfo"}
Post
{"postId": "1084920485123456","postUrl": "https://www.facebook.com/4/posts/1084920485123456/","profileUrl": "https://www.facebook.com/profile.php?id=4","profileName": "Mark Zuckerberg","authorName": "Mark Zuckerberg","text": "Excited to share what we've been working on. More details coming soon.","timestamp": "2026-03-01T14:30:00.000Z","imageUrls": ["https://scontent.fudi1-1.fna.fbcdn.net/v/..."],"videoUrls": [],"reactionCount": 42000,"commentCount": 8500,"shareCount": 1200,"hashtags": [],"scrapedAt": "2026-03-06T18:00:00.000Z"}
Other CrowdPull Facebook scrapers
- Facebook Page Posts Scraper — extract posts from any public Facebook page
- Facebook Group Posts Scraper — extract posts from any public Facebook group
- Facebook Comment Scraper — extract comments and replies where Facebook exposes them; optional cookies support signed-in-only surfaces
- Facebook Marketplace Scraper — extract listings from Facebook Marketplace by location with price filtering
Cost estimate
This Actor uses no browser — just lightweight HTTP requests.
| Event | Cost |
|---|---|
| Actor start | $0.005 (one-time per run) |
| Profile scraped | $0.005/profile |
| Post extracted | $0.0035/post on Free; $0.003/$0.00225/$0.002/$0.0015/$0.001 on Bronze through Diamond |
| Cache check (Smart Scrape skip) | $0.001/post |
Volume discounts available at higher tiers.
Is it legal to scrape Facebook profiles?
Our scrapers are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our scrapers, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
Limitations
- Only works with public profiles (private profiles return 0 posts)
- Unavailable profile and engagement metrics are returned as
null, not a misleading zero or empty string - Facebook may change internal APIs — report issues if extraction stops
- Facebook rate limits apply; residential proxies recommended
- Profile info fields like services depend on what the user has listed publicly