Facebook Photos Scraper
Pricing
from $1.00 / 1,000 results
Facebook Photos Scraper
Extract data from one or multiple Facebook images. Get image ID, Facebook photo URL, image URL, OCR text, and more. Download the data in JSON, CSV, and Excel and use it in apps, spreadsheets, and reports.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
1
Bookmarked
47
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
Extract data from one or multiple Facebook page photo grids. Get image ID, Facebook photo URL, full-resolution image URL, alt text (OCR/image description), author info, and more. Download in JSON, CSV, or Excel.
What does Facebook Photos Scraper do?
Facebook Photos Scraper extracts publicly available photo data from Facebook pages, profiles, and albums — without requiring Facebook login or cookies.
For each photo, the scraper always extracts:
- Photo ID — Unique Facebook photo identifier
- Photo URL — Direct link to the photo on Facebook
- Image URL — Full-resolution image file URL from Facebook's CDN
- Alt Text — Facebook's auto-generated image description (accessibility caption / OCR)
Extracted when available — reliably present when the photo is discovered via a page/profile/album URL (sourced from that page's header), but may be empty when a single photo URL is supplied directly, since that path has no page header to fall back on:
- Author Name — Page or profile name that posted the photo
- Author URL — Link to the author's Facebook page/profile
When available on the photo's page:
- Caption — Photo description/caption text
- Timestamp — When the photo was uploaded (ISO 8601)
- Likes Count — Number of reactions
- Comments Count — Number of comments
- Reactions By Type — Breakdown of reactions (LIKE, LOVE, CARE, HAHA, WOW, SAD, ANGRY) by count
- Reactions Total — Total reaction count across all types
- Share Count — Number of times the photo was shared
- Tagged People — People tagged in the photo, each with name, profile URL, ID, and tag type
How to use Facebook Photos Scraper
- Provide Facebook URLs — Enter one or more URLs of Facebook pages, profiles, or photo albums
- Set results limit (optional) — Limit the maximum number of photos to extract (default: all available)
- Filter by date (optional) — Use
newerThan/olderThanto only include photos posted within a date range - Proxy — Residential proxy is used by default and required for full per-photo detail (see Proxy requirements below)
- Run the scraper — Click "Start" and wait for results
- Download data — Export results in JSON, CSV, or Excel format
Supported URL formats
| URL Type | Example |
|---|---|
| Page URL | https://www.facebook.com/humansofnewyork |
| Photos section | https://www.facebook.com/humansofnewyork/photos |
| Individual photo | https://www.facebook.com/photo/?fbid=123456789 |
| Photo album | https://www.facebook.com/media/set/?set=a.123456789 |
| Profile URL | https://www.facebook.com/profile.php?id=123456789 |
| Mobile URL | https://m.facebook.com/humansofnewyork/photos |
Date range filtering
newerThan— Only include photos posted on or after this date (YYYY-MM-DD). Leave empty for no lower bound.olderThan— Only include photos posted on or before this date (YYYY-MM-DD). Leave empty for no upper bound.
Photos whose posting date couldn't be determined are always included, regardless of these filters.
Note: resultsLimit is applied before date filtering, so a run may return fewer results than the
configured limit even if more matching photos existed further down the source — increase
resultsLimit if you need more results after filtering by date.
Note: resultsLimit is a global cap shared across every URL in startUrls, not a per-URL
limit. If an earlier URL alone yields enough photos to reach resultsLimit, later URLs in the
list won't be processed at all. If you're scraping multiple sources and want each one covered,
either set resultsLimit generously or run them as separate actor calls.
Input example
{"startUrls": [{ "url": "https://www.facebook.com/humansofnewyork/photos" }],"resultsLimit": 10,"newerThan": "2024-01-01","olderThan": "2024-12-31"}
Output example
{"photoId": "1547667900257527","photoUrl": "https://www.facebook.com/photo/?fbid=1547667900257527","imageUrl": "https://scontent-dfw6-1.xx.fbcdn.net/v/t39.30808-6/photo.jpg","caption": "Today I met someone extraordinary at the park...","altText": "May be an image of 2 people, outdoors, standing","timestamp": "2024-03-15T14:30:00","likesCount": 15230,"commentsCount": 842,"reactionsByType": {"LIKE": 12000,"LOVE": 2500,"CARE": 400,"HAHA": 200,"WOW": 100,"SAD": 20,"ANGRY": 10},"reactionsTotal": 15230,"shareCount": 340,"taggedPeople": [{"name": "Jane Doe","url": "https://www.facebook.com/jane.doe","id": "100000123456789","type": "User"}],"authorName": "Humans of New York","authorUrl": "https://www.facebook.com/humansofnewyork","inputUrl": "https://www.facebook.com/humansofnewyork/photos","scrapedAt": "2024-03-20T10:15:30.123456"}
How much does it cost to scrape Facebook photos?
| Resource | Usage |
|---|---|
| Compute | ~0.02 CU per photo |
| Proxy | Residential proxy (paid Apify proxy tier), used by default — typically $0.02–$0.04 per photo depending on page/photo content |
| Memory | 4096 MB (default) |
This is not a zero-cost actor: full per-photo detail requires Apify's residential proxy, which is billed separately from actor compute. Apify charges for residential proxy bandwidth on your Apify plan; check your current plan's proxy pricing on the Apify platform for exact rates.
Cost and run time scale roughly linearly with the number of photos requested (each
photo is enriched one at a time). For very large resultsLimit values (hundreds or
more), budget accordingly and consider splitting the work across multiple runs.
Proxy requirements
- Photo grid fields —
photoId,imageUrl,authorName,authorUrl,altTextare read from the public/photosgrid page and work without any proxy at all. - Per-photo detail fields —
caption,timestamp,likesCount,commentsCount,reactionsByType,reactionsTotal,shareCount,taggedPeopleare read from each individual photo's detail page (facebook.com/photo/?fbid=...). Facebook serves an unconditional login wall to this page for Apify's datacenter IPs and the free AUTO proxy tier — only a residential proxy reliably gets past it. Because of this, the actor defaults to Apify'sRESIDENTIALproxy group automatically (even if you don't configure a proxy in the input) so every run gets the full field set reliably. You can override this in Proxy Configuration if you have your own proxy setup, but residential (Apify's or your own) is required for these fields.
Tips for best results
- Provide the
/photospage URL — e.g.https://www.facebook.com/humansofnewyork/photos— for the most complete results - Use public pages — Works best with public Facebook pages (businesses, public figures, organizations)
- Set a results limit — Start with 10–20 to test, then increase as needed
- Scraping a large volume of photos — A single page/profile URL typically surfaces on the order of dozens to around a hundred photos per run, depending on how much content Facebook loads for that page. To collect more, provide multiple specific album/set URLs in
startUrlsrather than relying on one profile URL alone, and run the actor multiple times if you need to go beyond what a single run surfaces. - No login needed — The scraper does not require Facebook cookies or credentials
Limitations
- Only works with publicly accessible Facebook content
- Private profiles and restricted content cannot be scraped
- Caption, timestamp, and engagement data (reactions, shares, tagged people) depend on what Facebook renders for a given photo — not every photo page includes all fields
- Only output fields that have actual data are included — fields with no value are omitted
- The number of photos discoverable from a single page/profile URL in one run is bounded by how much Facebook loads for that view — typically dozens to around a hundred. For larger collections, use multiple album/set URLs or multiple runs rather than one very large
resultsLimiton a single profile URL
FAQ
Can I scrape photos without a Facebook account?
Yes. The scraper does not require Facebook login, cookies, or API keys. It only accesses publicly available content.
What image quality do I get?
The scraper extracts the highest-resolution image URL from Facebook's CDN, typically the full-resolution version.
Why are caption and engagement fields missing?
These fields are only present when Facebook includes them in the public page data for that specific photo — even with the residential proxy the actor uses by default, not every photo has a caption, and some photos genuinely have no comments, reactions, or shares to report.
Why don't I see labels for every reaction type?
The scraper maps Facebook's internal reaction type IDs to human-readable labels (LIKE, LOVE, CARE, HAHA, WOW, SAD, ANGRY) using a known mapping. If Facebook returns a reaction type ID that isn't in this mapping, it ships as its raw numeric string instead of a guessed label, so reactionsByType stays accurate rather than showing an incorrect name.
Why are some output fields not present?
Fields are only included when they contain real data. A photo without an accessible caption, for example, simply won't have a caption key in its record.
Can I scrape photos from private profiles?
No. Only publicly accessible content is supported.
How many photos can I scrape?
Use resultsLimit to cap how many to extract — higher limits take more time and cost more in residential proxy usage (see How much does it cost). In practice, a single page/profile URL surfaces on the order of dozens to around a hundred photos per run, since that's what Facebook loads for that view; if you need more, provide multiple album/set URLs in startUrls or run the actor multiple times.
Can I filter photos by date?
Yes. Use newerThan and/or olderThan (format YYYY-MM-DD) to only include photos posted within a date range. Photos whose date couldn't be determined are always included.
