Facebook Photos Scraper - Dates, Captions & Reactions avatar

Facebook Photos Scraper - Dates, Captions & Reactions

Pricing

from $1.50 / 1,000 facebook photos

Go to Apify Store
Facebook Photos Scraper - Dates, Captions & Reactions

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

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ParseForge Banner

๐Ÿ“ธ 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 managersFind which photos drove the most reactions, comments and shares
Marketing agenciesBenchmark a client's visual content against competitors
Brand and UGC teamsCollect photos fans posted and tagged the brand in
Researchers and journalistsArchive a page's photos with exact dates and captions
Data and AI teamsBuild labeled image datasets with alt text and engagement
Designers and archivistsDownload full-size originals of a page's photo history

๐Ÿ“‹ What the Facebook Photos Scraper does

  1. 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=...).
  2. 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.
  3. Pages through the whole tab using the same query the Facebook website uses when you scroll, 8 photos per request.
  4. Applies your date window on Facebook's side, so a run for "last 30 days" never downloads older photos.
  5. 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.
  6. 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.

FieldTypeDescription
๐Ÿ–ผ imageUrlstringFull-size image URL, the largest Facebook serves
๐Ÿ†” photoIdstringFacebook photo ID
๐Ÿ”— urlstringLink to the photo on Facebook
๐Ÿ“„ pageNamestringPage or profile the photos were taken from
๐ŸŒ pageUrlstringPage URL
๐Ÿ”ข pageIdstringNumeric page ID
๐Ÿ‘ฅ pageFollowersnumberExact follower count of the page
๐Ÿ—‚ photoSourcestringUploaded by the page, Tagged photo or Single photo
๐Ÿ‘ค uploadedBystringAccount that posted the photo
๐Ÿ”ข uploaderIdstringNumeric ID of that account
๐Ÿ“… createdAtstringUpload date and time, ISO 8601 UTC
๐Ÿ’ฌ captionstringText of the post the photo belongs to
๐Ÿ”ค altTextstringFacebook's automatic description of the image
โ†”๏ธ widthnumberWidth in pixels
โ†•๏ธ heightnumberHeight in pixels
โค๏ธ reactionsCountnumberTotal reactions
๐Ÿ‘ likeCountnumberLike reactions
๐Ÿ˜ loveCountnumberLove reactions
๐Ÿค— careCountnumberCare reactions
๐Ÿ˜† hahaCountnumberHaha reactions
๐Ÿ˜ฎ wowCountnumberWow reactions
๐Ÿ˜ข sadCountnumberSad reactions
๐Ÿ˜  angryCountnumberAngry reactions
๐Ÿ’ญ commentsCountnumberComments
๐Ÿ” sharesCountnumberShares
๐Ÿ“ฐ postUrlstringLink to the post that contains the photo
๐Ÿงพ postIdstringPost ID
๐Ÿ“š albumIdstringAlbum the photo is stored in
โœ”๏ธ detailsStatusstringComplete, or why the per-photo details could not be read
๐Ÿ” thumbnailUrlstringSquare thumbnail from the photo grid
๐Ÿ“ฅ inputUrlstringThe input this row came from
๐Ÿ•’ scrapedAtstringWhen the row was collected
โŒ errorstringPopulated 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 ActorTypical photo scrapersCookie based scrapersSaving photos by hand
Requires your Facebook loginNoNoYesYes
Full-size image URLYesYesYesYes
Upload dateYes, exact timestampRarelyVariesHover on each photo
Post captionYesRarelyVariesCopy by hand
Reactions by type, comments, sharesYesNoVariesCount by hand
Date range filterYes, on Facebook's sideRarelyVariesScroll and look
Tagged photos of a pageYesRarelyYesYes
Age-restricted or private pagesNot available, see FAQNot availableYesYes, when allowed
Account riskNoneNoneYour account can be flaggedNone

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

  1. 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
  2. Open the Actor and go to the Input tab.
  3. Paste Facebook page links into Facebook page, profile or photo URLs, or usernames and IDs into Page usernames or IDs.
  4. Set Max Items to the total number of photos you want, and optionally Max photos per page to spread it across several pages.
  5. Pick the Photo tab (uploaded by the page, or photos the page is tagged in) and, if you want, a date window.
  6. Leave Add date, caption and engagement on for the full row, or turn it off for images only.
  7. 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.

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.

๐Ÿ’ก 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.