Web Image Scraper avatar

Web Image Scraper

Pricing

from $6.30 / 1,000 processed targets

Go to Apify Store
Web Image Scraper

Web Image Scraper

Extract image URLs from public webpages, domains, and direct image links. Get source pages, discovery methods, metadata, and optional saved files or ZIP archives.

Pricing

from $6.30 / 1,000 processed targets

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

6

Monthly active users

2 days ago

Last modified

Share

🖼️ Find image URLs in public pages

Web Images Scraper helps SEO specialists, developers, and site owners collect image URLs from public webpages, bare domains, and direct image links. It returns each accepted image with its source page, discovery method, available details, and image identity, so you can review or export a structured dataset. It also reads common lazy image attributes such as data-src, data-lazy-src, data-original, and data-srcset when they expose public image URLs.

📦 See each image with its source and details

Data you get

Each dataset row includes the submitted target, the source page, the image URL, the discovery method, and an image identity key. Optional fields add a filename, extension, response type and size, dimensions, nearby alt or title text, saved-file details, or a ZIP link when available.

If the same image identity appears again from another submitted target or page, the first eligible occurrence is saved immediately and later matches are ignored. The saved row keeps the first source context.

🚀 Collect images from public targets

  1. Add one or more public webpage URLs, bare domains, or direct image URLs.
  2. Set optional limits, crawl depth, extensions, and URL text filters.
  3. Leave Crawl depth at 0 to use only the submitted page, or raise it to follow same-domain links.
  4. Enable Create ZIP files when you want one archive of accepted image files for each submitted target.
  5. Run the Actor and open the dataset from the output.

⚙️ Input

Input fields

FieldTypeWhat it does
startUrlslist of objectsRequired list of 1 to 100 public webpage URLs, bare domains, or direct image URLs. Bare domains are normalized to HTTPS.
startUrls[].urlstringOne public webpage, bare domain, or direct image URL to process.
maxImagesPerPageintegerOptional positive limit on accepted images from each page. Leaving it empty returns all available results until the source is exhausted.
maxPagesPerStartUrlintegerOptional positive limit on pages opened for each input URL during same-domain crawling. Leaving it empty returns all available results until the source is exhausted within the selected crawl depth.
crawlDepthintegerNumber of same-domain link levels to follow from each input page. Use 0 to extract images only from the submitted page.
allowedExtensionslist of stringsKeeps only image file extensions in this list. The default list covers common image formats.
includeUrlPatternslist of stringsWhen set, keeps an image URL if it contains at least one listed value.
excludeUrlPatternslist of stringsSkips image URLs that contain a listed value.
zipDownloadsbooleanWhen enabled, creates one ZIP archive of accepted image files for each submitted target and adds its download link to the output.

Work limits

For both Max images per page and Max pages per input, leaving the field empty returns all available results until the source is exhausted. The page limit still follows the selected Crawl depth.

Example input

This is the public input from the successful current-beta default-input run:

{
"startUrls": [
{
"url": "https://commons.wikimedia.org/wiki/Main_Page"
}
],
"maxImagesPerPage": 100,
"maxPagesPerStartUrl": 10,
"crawlDepth": 0,
"allowedExtensions": [
"jpg",
"jpeg",
"png",
"gif",
"webp",
"svg",
"bmp",
"ico",
"avif"
],
"includeUrlPatterns": [],
"excludeUrlPatterns": [],
"zipDownloads": false
}

🧾 Output

Run output

FieldTypeWhat it does
resultsstringOpens the default dataset with the accepted image rows.

Dataset row

Every dataset row uses one shape. Optional fields are present only when the source or run provides them.

FieldTypeWhat it does
inputUrlstringThe webpage, domain, or direct image URL submitted for this row.
sourcePageUrlstringThe page where the image was found, or the image URL for a direct image input.
imageUrlstringThe public URL of the accepted image.
filenamestring, optionalThe image filename when it can be found or inferred.
extensionstring, optionalThe image file extension when it can be found or inferred.
contentTypestring, optionalThe response content type when it is available.
fileSizeBytesinteger, optionalThe image size in bytes when it is available.
widthinteger, optionalThe image width in pixels when it is available.
heightinteger, optionalThe image height in pixels when it is available.
altTextstring, optionalNearby alternative text from the source page when it is available.
titleTextstring, optionalNearby title text from the source page when it is available.
discoveryMethodstringThe source feature that exposed the image URL.
duplicateKeystringAn identity key for recognizing the same image in exported results.
savedFileobject, optionalDetails and a download link when the image was saved to Actor storage.
savedFile.downloadUrlstringThe Apify storage URL for the saved image.
savedFile.contentTypestring, optionalThe content type of the saved file when it is available.
savedFile.fileSizeBytesinteger, optionalThe saved file size in bytes.
zipFileobject, optionalDetails and a download link for the ZIP archive for this input URL.
zipFile.downloadUrlstringThe Apify storage URL for the ZIP archive.
zipFile.fileSizeBytesinteger, optionalThe ZIP archive size in bytes.

Example dataset row

This complete row is from the successful current-beta default-input run:

{
"inputUrl": "https://commons.wikimedia.org/wiki/Main_Page",
"sourcePageUrl": "https://commons.wikimedia.org/wiki/Main_Page",
"imageUrl": "https://thumb.wikimedia.org/wikipedia/commons/thumb/1/1c/Sunset_over_Trommekilen_from_Norrkila_6.jpg/500px-Sunset_over_Trommekilen_from_Norrkila_6.jpg?utm_source=commons.wikimedia.org&utm_campaign=parser&utm_content=thumbnail",
"discoveryMethod": "img-src",
"duplicateKey": "af0c0517ff489",
"filename": "500px-Sunset_over_Trommekilen_from_Norrkila_6.jpg",
"extension": "jpg",
"width": 500,
"height": 333
}

💳 Pricing

How charging works

This Actor uses pay-per-event pricing. The Processed target event is charged once for each submitted webpage or direct image URL successfully processed for image extraction. It is not charged per image row saved. The price depends on your Apify plan tier.

🔌 Integrations

Use the dataset

Open or export the dataset in Apify, read it through the Apify API, or connect runs to schedules and webhooks.

❓ FAQ

What happens when the same image is found twice?

The first eligible occurrence is saved immediately. Later matches for the same image identity are ignored, so the saved row keeps the first source context.

Can I use a bare domain or a direct image URL?

Yes. Bare domains are normalized to HTTPS. A direct image URL is accepted as a target, and its row keeps the submitted target and image URL.

What happens when I leave a work limit empty?

Leaving Max images per page or Max pages per input empty returns all available results until the source is exhausted. The page limit still follows the selected crawl depth.

Can I create a ZIP file?

Yes. Set Create ZIP files to true to create one archive of accepted image files for each submitted target. The archive link appears in zipFile when available.

Does it work on private or login-only pages?

No. It works with public webpages and public image URLs. It does not log in, submit forms, or bypass private access controls.

Can I crawl a whole website?

You can follow same-domain links within the selected crawl depth and page limit. The Actor does not provide unbounded whole-domain discovery.

📝 Changelog

v2.0 (08-09-2026)

  • Dataset rows now use a focused public shape and no longer include crawl indexes, normalized URLs, source order, or scrape timestamps.
  • Finds lazy-loaded image URLs in common data-* attributes, including pages that use a shared placeholder image.
  • Retries temporary source failures and continues processing other targets.

v1.0

  • Faster URL-only runs by removing the minimum image size filter from public inputs and improving handling for difficult pages.

v0.0

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré