Facebook Profile & Page Photos Scraper
Pricing
$19.99/month + usage
Facebook Profile & Page Photos Scraper
Collect publicly accessible Facebook photos with high accuracy. Extract content image URLs, album photos, post images, and metadata. Ideal for researchers, brands, and engineers who need organized, large-volume visual data without manual downloading.
Pricing
$19.99/month + usage
Rating
5.0
(1)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
22
Total users
3
Monthly active users
12 days ago
Last modified
Categories
Share
πΈ Facebook Photos Scraper
Scrape publicly available photos from Facebook profiles and pages and get genuine, structured metadata for every image β no fabricated fields.
The scraper works in two stages, without login: it discovers photo IDs from the target's public photos page, then fetches each photo's viewer detail response and parses it as JSON. Because the detail response is parsed as real JSON (not screen-scraped with regex), every field below comes straight from Facebook's own data.
What you get per photo
| Field | Description |
|---|---|
fbid / id | The real, reproducible Facebook photo id (stable across runs). |
url | Direct photo.php?fbid=... link. |
imageUrl, imageWidth, imageHeight | The largest image variant with its real pixel dimensions. |
imageHd | Full-resolution image URL (largest candidate, requested at scale 2). |
thumbnailUrl | Smallest image variant. |
imageVariants | All image variants (url + width + height), largest first. |
accessibilityCaption | Facebook's native alt text (e.g. "May be an image of ..."). null if none. |
caption | The photo's caption / message text. null if none. |
createdTime, createdTimeISO | Upload time (epoch + ISO 8601). |
ownerId, ownerName, ownerUrl | The photo owner (page / profile). |
albumId, albumTitle | The album the photo belongs to, when present. |
reactionCount, commentCount, shareCount | Engagement counts. |
topReactions | Per-type reaction breakdown when Facebook exposes it (else null). |
location | Geotag {name, latitude, longitude} when the photo is geotagged (else null). |
scrapedAt | ISO timestamp of the scrape. |
mediaStorageUrl | Present only when downloadMedia is on β link to the stored image file. |
Honestly null (login-gated)
taggedUsers and comments (comment bodies / authors) require a logged-in
Facebook session, so on anonymous runs they are emitted as null, never faked.
The run summary (RUN_SUMMARY in the key-value store) reports real coverage
fractions for the nullable fields.
Input
| Option | Description |
|---|---|
startUrls | Public profile/page references (URLs or handles). |
mode | own (uploads/timeline β default), tagged (photos of), album (a /media/set/ URL), albums. |
maxPhotos | Max photos per target (1β10000, default 20). |
newerThan / olderThan | Date filters on the real created time (absolute YYYY-MM-DD or relative like 2 weeks). |
downloadMedia | Download full-res image bytes to the key-value store during the run. |
minPhotos, concurrentPhotos | Advanced performance controls. |
proxyConfiguration | Proxy; defaults to Apify residential (Facebook blocks datacenter IPs for logged-out scraping). |
Example input
{"startUrls": ["nasa"],"mode": "own","maxPhotos": 20,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Example output row
{"fbid": "1404942597655241","id": "1404942597655241","url": "https://www.facebook.com/photo.php?fbid=1404942597655241","imageUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/...n.jpg","imageWidth": 2048,"imageHeight": 1365,"imageHd": "https://scontent.xx.fbcdn.net/v/t39.30808-6/...n.jpg","thumbnailUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/...s320x320.jpg","accessibilityCaption": "May be an image of 2 people","caption": "β¦","createdTime": 1764165912,"createdTimeISO": "2025-11-26T14:05:12+00:00","ownerName": "NASA","reactionCount": 1234,"commentCount": 56,"shareCount": 78,"topReactions": [{ "type": "Like", "count": 900 }],"location": null,"scrapedAt": "2026-07-02T00:00:00+00:00"}
Reliability & compliance
- Facebook serves a login wall to logged-out datacenter/guest IPs. If all targets hit a login wall the run fails with an explicit status message instead of returning an empty dataset. Use residential proxy (the default).
- Only publicly accessible photos are scraped. Respect Facebook's Terms of Service, copyright, and applicable law.
Billing
Pay-per-event: row_result (one per photo) and media_download (one per stored
image when downloadMedia is on). Configure these in Console β Publication β
Monetization.


