Facebook Photos Scraper - Dates, Captions & Reactions
Pricing
from $1.50 / 1,000 facebook photos
Facebook Photos Scraper - Dates, Captions & Reactions
Scrape photos from public Facebook pages and profiles: full-size images, upload dates, captions, reactions by type, comments and shares. Export CSV, Excel, JSON or XML.
Pricing
from $1.50 / 1,000 facebook photos
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

๐ธ Facebook Photos Scraper
๐ Export every photo of a public Facebook page in seconds, with the date it was posted and how people reacted. Paste page links and get full-size image URLs, upload dates, post captions, reactions split into Like, Love, Care, Haha, Wow, Sad and Angry, comments and shares. 6 photos from 3 pages, fully enriched, came back in 12 seconds in our cloud test.
This Actor opens the Photos tab that Facebook shows to anyone who visits a page without logging in and walks through it with Facebook's own pagination, 8 photos per request, as deep as the page goes. In our tests it paged through 1,608 photos of Katz's Delicatessen without a block. Then, for every photo, it opens the photo itself and adds what the grid does not show: the exact upload time, the text of the post, the full reaction breakdown, the comment and share counts, the post link and the album.
Every row has 33 fields: the image (full-size URL, width, height, thumbnail, Facebook's automatic description), the page (name, URL, ID, followers), the uploader, the date and caption, the engagement (total reactions, 7 reaction types, comments, shares) and the links (photo, post, album). Filter by date range on Facebook's side, or switch to the photos a page is tagged in. No login, no cookie, no browser.
| ๐ฏ Target Audience | ๐ก Primary Use Cases |
|---|---|
| Social media managers | Find which photos drove the most reactions, comments and shares |
| Marketing agencies | Benchmark a client's visual content against competitors |
| Brand and UGC teams | Collect photos fans posted and tagged the brand in |
| Researchers and journalists | Archive a page's photos with exact dates and captions |
| Data and AI teams | Build labeled image datasets with alt text and engagement |
| Designers and archivists | Download full-size originals of a page's photo history |
๐ What the Facebook Photos Scraper does
- Accepts Facebook page and profile URLs (
facebook.com/humansofnewyork,profile.php?id=...,/{id}/photos), plain usernames or numeric IDs, and single photo links (facebook.com/NASA/photos/1638200237675346/,photo/?fbid=...). - Opens the page's Photos tab as a logged-out visitor: photos the page uploaded, or, with Photo tab set to tagged, photos other people posted and tagged the page in.
- Pages through the whole tab using the same query the Facebook website uses when you scroll, 8 photos per request.
- Applies your date window on Facebook's side, so a run for "last 30 days" never downloads older photos.
- With Add date, caption and engagement on (the default), opens each photo and adds upload time, caption, total reactions and the count per reaction type, comments, shares, post link, post ID, album ID and who uploaded it.
- Writes one row per photo, deduplicated across pages. Pages Facebook hides from logged-out visitors come back as a free error row that says why.
๐ก Why it matters: the Photos tab is the one place where a page's visual history sits in order, without text posts, links and reels in between. With dates and reaction counts on every photo, it becomes a ready content-performance report: what a brand posted, when, and what the audience loved.
๐ฌ Full Demo (๐ง Coming soon)
๐ Output
Each dataset row is one Facebook photo. 33 columns per row.
| Field | Type | Description |
|---|---|---|
๐ผ imageUrl | string | Full-size image URL, the largest Facebook serves |
๐ photoId | string | Facebook photo ID |
๐ url | string | Link to the photo on Facebook |
๐ pageName | string | Page or profile the photos were taken from |
๐ pageUrl | string | Page URL |
๐ข pageId | string | Numeric page ID |
๐ฅ pageFollowers | number | Exact follower count of the page |
๐ photoSource | string | Uploaded by the page, Tagged photo or Single photo |
๐ค uploadedBy | string | Account that posted the photo |
๐ข uploaderId | string | Numeric ID of that account |
๐
createdAt | string | Upload date and time, ISO 8601 UTC |
๐ฌ caption | string | Text of the post the photo belongs to |
๐ค altText | string | Facebook's automatic description of the image |
โ๏ธ width | number | Width in pixels |
โ๏ธ height | number | Height in pixels |
โค๏ธ reactionsCount | number | Total reactions |
๐ likeCount | number | Like reactions |
๐ loveCount | number | Love reactions |
๐ค careCount | number | Care reactions |
๐ hahaCount | number | Haha reactions |
๐ฎ wowCount | number | Wow reactions |
๐ข sadCount | number | Sad reactions |
๐ angryCount | number | Angry reactions |
๐ญ commentsCount | number | Comments |
๐ sharesCount | number | Shares |
๐ฐ postUrl | string | Link to the post that contains the photo |
๐งพ postId | string | Post ID |
๐ albumId | string | Album the photo is stored in |
โ๏ธ detailsStatus | string | Complete, or why the per-photo details could not be read |
๐ thumbnailUrl | string | Square thumbnail from the photo grid |
๐ฅ inputUrl | string | The input this row came from |
๐ scrapedAt | string | When the row was collected |
โ error | string | Populated only on failed rows |
A photo posted without text shows Not Disclosed as its caption. With Add date, caption and engagement off, the rows keep the 15 image and page fields and skip the rest.
Real sample records
{"imageUrl": "https://scontent-arn2-1.xx.fbcdn.net/v/t39.99422-6/821656476_1125871713709126_4518785347627209846_n.png?stp=dst-jpg_tt6&cstp=mx2048x1152&ctp=s2048x1152&...","photoId": "1638200237675346","url": "https://www.facebook.com/photo.php?fbid=1638200237675346&set=pb.100044561550831.-2207520000&type=3","pageName": "NASA - National Aeronautics and Space Administration","pageUrl": "https://www.facebook.com/NASA","pageId": "100044561550831","pageFollowers": 28730402,"photoSource": "Uploaded by the page","uploadedBy": "NASA - National Aeronautics and Space Administration","uploaderId": "100044561550831","createdAt": "2026-09-24T22:00:52.000Z","caption": "Welcome to the Artemis Accords, Cรดte d'Ivoire ๐จ๐ฎ\n \nCรดte d'Ivoire is the 75th country to sign the Artemis Accords. In doing so, they commit to a common set of principles for a safe, peaceful, and prosperous future in space. https://go.nasa.gov/4hqBFjw","altText": "A graphic featuring the names and flags of the countries which have signed the Artemis Accords. \"ARTEMIS ACCORDS\" is written at the top.","width": 2048,"height": 1152,"reactionsCount": 2615,"likeCount": 1824,"loveCount": 719,"careCount": 53,"hahaCount": 5,"wowCount": 6,"sadCount": 2,"angryCount": 6,"commentsCount": 142,"sharesCount": 187,"postUrl": "https://www.facebook.com/NASA/posts/pfbid06dQ3AbwtMVtGMtsaKjTBYgMpdP4KbXapkTPFCuQwVYLeVoCRSgzd3vnfZzR3nkwAl","postId": "1638200251008678","albumId": "416661013162614","detailsStatus": "Complete","thumbnailUrl": "https://scontent-den2-1.xx.fbcdn.net/v/t39.99422-6/821656476_1125871713709126_4518785347627209846_n.png?stp=c448.0.1152.1152a_dst-jpg_tt6&...","inputUrl": "https://www.facebook.com/NASA","scrapedAt": "2026-09-25T17:13:46.261Z","error": null}
{"imageUrl": "https://scontent-fra5-1.xx.fbcdn.net/v/t39.99422-6/823993453_1414568233974985_7401910122299642830_n.png?stp=dst-jpg_tt6&cstp=mx2048x1362&ctp=s2048x1362&...","photoId": "1671104567720300","url": "https://www.facebook.com/photo.php?fbid=1671104567720300&set=pb.100044623170418.-2207520000&type=3","pageName": "National Geographic","pageUrl": "https://www.facebook.com/natgeo","pageId": "100044623170418","pageFollowers": 51308163,"photoSource": "Uploaded by the page","uploadedBy": "National Geographic","uploaderId": "100044623170418","createdAt": "2026-09-24T22:00:00.000Z","caption": "The northern lights donโt often reach Nebraskaโs skies, but strong geomagnetic storms can bring them into view a few times a year. Near Crawford, their colorful glow illuminated the night behind an abandoned homestead. Also known as aurora borealis, the display begins when ions from the sun collide ...","altText": "May be an image of text","width": 2048,"height": 1362,"reactionsCount": 2108,"likeCount": 1554,"loveCount": 489,"careCount": 21,"hahaCount": 5,"wowCount": 37,"sadCount": 2,"angryCount": 0,"commentsCount": 101,"sharesCount": 175,"postUrl": "https://www.facebook.com/natgeo/posts/pfbid0BKYq7ekFrWDqHXusnm2JJsurWfEt8bBkZANyj4NjaYkuMQ4cz6LtLRWkYDBCLJazl","postId": "1671104587720298","albumId": "528642321966536","detailsStatus": "Complete","thumbnailUrl": "https://scontent-sea5-1.xx.fbcdn.net/v/t39.99422-6/823993453_1414568233974985_7401910122299642830_n.png?stp=c343.0.1362.1362a_dst-jpg_tt6&...","inputUrl": "https://www.facebook.com/natgeo","scrapedAt": "2026-09-25T17:13:48.703Z","error": null}
{"imageUrl": "https://scontent-dfw6-1.xx.fbcdn.net/v/t51.82787-15/707963999_18587346640053609_8287696446875301011_n.jpg?stp=dst-jpg_tt6&cstp=mx1253x1302&ctp=s1253x1302&...","photoId": "1460169962819874","url": "https://www.facebook.com/photo.php?fbid=1460169962819874&set=pb.100064806517961.-2207520000&type=3","pageName": "Katz's Delicatessen | New York NY","pageUrl": "https://www.facebook.com/katzsdeli","pageId": "100064806517961","pageFollowers": 941140,"photoSource": "Uploaded by the page","uploadedBy": "Katz's Delicatessen","uploaderId": "100064806517961","createdAt": "2026-05-25T12:45:43.000Z","caption": "Wishing a reflective and happy Memorial Day to all!","altText": "No photo description available.","width": 1253,"height": 1302,"reactionsCount": 988,"likeCount": 806,"loveCount": 164,"careCount": 15,"hahaCount": 1,"wowCount": 1,"sadCount": 0,"angryCount": 1,"commentsCount": 32,"sharesCount": 25,"postUrl": "https://www.facebook.com/katzsdeli/posts/pfbid0MRgS4c3nFc8dWqWrijNXBNkix5zNV1AKFwWpnNu3c8cXzFUmZWb1Qk3EkbC5UaAVl","postId": "1460170006153203","albumId": "646659574170921","detailsStatus": "Complete","thumbnailUrl": "https://scontent-lga3-2.xx.fbcdn.net/v/t51.82787-15/707963999_18587346640053609_8287696446875301011_n.jpg?stp=c0.16.1253.1253a_dst-jpg_tt6&...","inputUrl": "https://www.facebook.com/katzsdeli","scrapedAt": "2026-09-25T17:13:51.852Z","error": null}
Image URLs are shortened here with .... The dataset holds the complete, working links.
โจ Why choose this Actor
- Upload date on every photo. The exact time each photo was posted, as an ISO timestamp, so you can sort, chart and filter a page's photo history. Photo grids on Facebook show no dates at all.
- The caption, not just the image. The text of the post each photo belongs to, so a photo keeps its context: the story, the announcement, the link.
- Reactions split by type. Like, Love, Care, Haha, Wow, Sad and Angry as separate columns, plus totals, comments and shares. In our tests the seven types always add up exactly to the total.
- Date window applied by Facebook. "Only photos newer than" and "older than" are sent to Facebook's own query, so a 30-day run reads 30 days of photos, not the whole archive.
- Uploaded or tagged. Switch to the photos other people posted and tagged the page in, with the uploader's name and ID on every row. That is the page's user-generated content in one export.
- Full-size originals. The largest image Facebook serves (2048 px on the long side for most photos), plus a square thumbnail, width, height and Facebook's automatic image description.
- Deep pagination. Uses the same query as the website when you scroll, so it keeps going as long as the page has photos: 1,608 photos from one page in a single test.
- Pay only for photos. Pages that do not exist or are hidden from logged-out visitors produce a free error row that says why.
- No credentials, no browser. Plain HTTP with automatic IP rotation. You never hand over a Facebook login.
๐ How it compares to alternatives
| This Actor | Typical photo scrapers | Cookie based scrapers | Saving photos by hand | |
|---|---|---|---|---|
| Requires your Facebook login | No | No | Yes | Yes |
| Full-size image URL | Yes | Yes | Yes | Yes |
| Upload date | Yes, exact timestamp | Rarely | Varies | Hover on each photo |
| Post caption | Yes | Rarely | Varies | Copy by hand |
| Reactions by type, comments, shares | Yes | No | Varies | Count by hand |
| Date range filter | Yes, on Facebook's side | Rarely | Varies | Scroll and look |
| Tagged photos of a page | Yes | Rarely | Yes | Yes |
| Age-restricted or private pages | Not available, see FAQ | Not available | Yes | Yes, when allowed |
| Account risk | None | None | Your account can be flagged | None |
The Actor sees what a logged-out visitor sees. Public pages and public profiles show their photos; private profiles and age-restricted pages (for example businesses that sell alcohol) do not, and return an error row instead of data. Facebook serves 8 photos per request and the Actor opens one more page per photo for the details, so a full-detail run collects about one photo per second; turn the details off for a much faster image-only export.
๐ How to use
- Create a free Apify account. New accounts include $5 of free platform credit, which is plenty to try this out: console.apify.com/sign-up
- Open the Actor and go to the Input tab.
- Paste Facebook page links into Facebook page, profile or photo URLs, or usernames and IDs into Page usernames or IDs.
- Set Max Items to the total number of photos you want, and optionally Max photos per page to spread it across several pages.
- Pick the Photo tab (uploaded by the page, or photos the page is tagged in) and, if you want, a date window.
- Leave Add date, caption and engagement on for the full row, or turn it off for images only.
- Click Start, then open the Dataset tab and download as CSV, Excel, JSON or XML, or pull it from the API.
{"startUrls": [{ "url": "https://www.facebook.com/natgeo" }],"maxItems": 200,"photoType": "photos_by","onlyPhotosNewerThan": "3 months","includeDetails": true}
๐ผ Business use cases
Content performance reports
Pull a quarter of a brand's photos and sort by reactionsCount, sharesCount or loveCount. You see which visuals worked, which days they were posted and what the caption said, without clicking through a single photo.
Competitive benchmarking
Run the same date window across your page and three competitors. Posting frequency comes from createdAt, audience response from the reaction split, and pageFollowers lets you normalize engagement by audience size.
User-generated content collection
Switch to tagged photos to collect what customers, venues and partners posted about a brand, with the uploader's name, ID and caption. It is a ready shortlist for reposting requests and testimonials.
Visual datasets for AI and search
Full-size image URLs with Facebook's automatic alt text, captions and dimensions make a labeled image set for classification, captioning or visual search experiments, with engagement as a quality signal.
๐ Automating Facebook Photos Scraper
- Make and Zapier: run the Actor every week for a list of pages and push new photos into a content calendar or a sheet.
- Slack: post a message when a tracked page publishes a photo that passes a reaction threshold.
- Airbyte: sync datasets into Snowflake, BigQuery or Postgres to keep a running history of a page's photos and engagement.
- GitHub: schedule runs from Actions and keep versioned snapshots of a page's photo archive.
- Google Drive: drop a CSV or Google Sheet into a shared folder after every run.
- API and webhooks: every run emits a dataset ID; subscribe to the run succeeded webhook and download the images wherever you need them.
๐ Beyond business use cases
- Research: study how organizations use images on Facebook, how posting rhythm changes over time and which visuals draw which reactions.
- Personal: back up the full-size photos of a public page you follow, with dates and captions kept alongside.
- Non-profit: archive the photo history of community pages and local events before it gets buried.
- Experimentation: a clean dataset of images, alt text and reaction counts is a good playground for computer vision and analytics projects.
๐ค Ask an AI assistant about this scraper
Paste this into ChatGPT, Claude or any assistant to get help designing your run:
I am using the ParseForge Facebook Photos Scraper on Apify. It takes Facebook page or profile URLs, usernames, IDs or single photo links and returns one row per photo with 33 fields, including imageUrl, photoId, url, pageName, pageUrl, pageId, pageFollowers, photoSource, uploadedBy, uploaderId, createdAt, caption, altText, width, height, reactionsCount, likeCount, loveCount, careCount, hahaCount, wowCount, sadCount, angryCount, commentsCount, sharesCount, postUrl, postId and albumId. It can read photos uploaded by a page or photos the page is tagged in, filter by upload date, and only sees what a logged-out visitor sees. Help me design a run to answer this question: [your question here].
โ Frequently Asked Questions
๐ Do I need a Facebook account or cookie? No. The Actor reads only what Facebook shows to a logged-out visitor. You never supply credentials, so no account of yours is exposed.
๐ How many photos can I get from one page? As many as the page shows publicly. The Actor follows Facebook's own pagination until the tab ends or your limit is reached. In our tests it collected 1,608 photos from a single restaurant page and 648 from Humans of New York without hitting an end.
๐
How does the date filter work?
The window is sent to Facebook's photo query, so only photos inside it are returned and nothing older is downloaded. Use a date (YYYY-MM-DD) or a relative value such as 30 days, 6 months or 1 year.
๐ท What are tagged photos?
Photos that other people or pages posted and tagged the page in. Select Photos the page is tagged in as the photo tab. The uploadedBy and uploaderId columns tell you who posted each one.
๐ฌ Why is the caption "Not Disclosed" for some photos? The photo was posted without text, which is common for album uploads and profile or cover photo changes. The Actor never makes a caption up.
๐ซ Why did a page return an error row? Either the page does not exist, it is a private profile, or Facebook hides it from visitors who are not logged in, which is typical for age-restricted pages of businesses that sell alcohol. Error rows are never charged.
โณ Do the image links expire?
Yes. Facebook signs its image links and they stop working after a few days. Download the images, or rerun the Actor, when you need fresh links. The photoId and url columns stay valid.
โก How do I make runs faster? Turn off Add date, caption and engagement. The Actor then reads only the photo grid, 8 photos per request, and skips the extra visit to each photo.
๐ฅ Does it return videos? No. The Photos tab lists photos. For videos and reels, see the recommended Actors below.
๐ Do I need a proxy? Keep the default Apify Proxy. Facebook shows a login wall to an IP after a few dozen page views, so the Actor uses a new IP for every attempt and moves to residential IPs by itself when the default IPs get walled.
โฑ How fast is it? With details on, about one photo per second (60 photos from 3 pages took 66 seconds in our test). Image-only runs read 8 photos per request.
๐ฅ What export formats are supported? CSV, Excel, JSON, XML, plus direct API access and integrations with Make, Zapier, Airbyte, Slack, Google Drive and more.
โ๏ธ Is this legal? The Actor collects photos and counts that pages publish to everyone. You remain responsible for how you use the data, including copyright on the images, privacy law such as GDPR and CCPA, and Facebook's terms.
๐ Integrate with any app
Every run writes to an Apify dataset reachable through a REST API, so the output drops into whatever you already use. Native integrations cover Make, Zapier, Airbyte, Slack, Google Drive, GitHub, Google Sheets and webhooks, and the API covers everything else.
๐ Recommended Actors
- Facebook Posts Scraper - 33 Fields, Reaction Split - every post of a page, not only the photos.
- Facebook Reels Scraper - Exact Views, Likes & Shares - the video side of a page.
- Facebook Comments Scraper - Replies & Reactions - the comments behind
commentsCount. - Facebook Pages Scraper - 30 Fields, Followers & Info - page profiles and About information.
- Facebook Groups Scraper - Posts & Member Counts - posts from public groups.
๐ก Pro Tip: browse the complete ParseForge collection.
๐ Need Help? Open our contact form
โ ๏ธ Disclaimer: independent tool, not affiliated with Facebook or Meta; only publicly available data.