Web Image Scraper
Pricing
from $6.30 / 1,000 processed targets
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é
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
6
Monthly active users
2 days ago
Last modified
Categories
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.
- Run Bulk Image Downloader to collect image links from several public targets in one run.
- Use Image Downloader to save accepted image files when you need copies in Apify storage.
- Use Scrape Images From Website to collect image links from a public website.
- Use Image URL Scraper to find direct image URLs for later processing.
- Start Image Scraper to build a simple image list from a public page.
📦 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
- Add one or more public webpage URLs, bare domains, or direct image URLs.
- Set optional limits, crawl depth, extensions, and URL text filters.
- Leave
Crawl depthat0to use only the submitted page, or raise it to follow same-domain links. - Enable
Create ZIP fileswhen you want one archive of accepted image files for each submitted target. - Run the Actor and open the dataset from the output.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
startUrls | list of objects | Required list of 1 to 100 public webpage URLs, bare domains, or direct image URLs. Bare domains are normalized to HTTPS. |
startUrls[].url | string | One public webpage, bare domain, or direct image URL to process. |
maxImagesPerPage | integer | Optional positive limit on accepted images from each page. Leaving it empty returns all available results until the source is exhausted. |
maxPagesPerStartUrl | integer | Optional 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. |
crawlDepth | integer | Number of same-domain link levels to follow from each input page. Use 0 to extract images only from the submitted page. |
allowedExtensions | list of strings | Keeps only image file extensions in this list. The default list covers common image formats. |
includeUrlPatterns | list of strings | When set, keeps an image URL if it contains at least one listed value. |
excludeUrlPatterns | list of strings | Skips image URLs that contain a listed value. |
zipDownloads | boolean | When 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
| Field | Type | What it does |
|---|---|---|
results | string | Opens 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.
| Field | Type | What it does |
|---|---|---|
inputUrl | string | The webpage, domain, or direct image URL submitted for this row. |
sourcePageUrl | string | The page where the image was found, or the image URL for a direct image input. |
imageUrl | string | The public URL of the accepted image. |
filename | string, optional | The image filename when it can be found or inferred. |
extension | string, optional | The image file extension when it can be found or inferred. |
contentType | string, optional | The response content type when it is available. |
fileSizeBytes | integer, optional | The image size in bytes when it is available. |
width | integer, optional | The image width in pixels when it is available. |
height | integer, optional | The image height in pixels when it is available. |
altText | string, optional | Nearby alternative text from the source page when it is available. |
titleText | string, optional | Nearby title text from the source page when it is available. |
discoveryMethod | string | The source feature that exposed the image URL. |
duplicateKey | string | An identity key for recognizing the same image in exported results. |
savedFile | object, optional | Details and a download link when the image was saved to Actor storage. |
savedFile.downloadUrl | string | The Apify storage URL for the saved image. |
savedFile.contentType | string, optional | The content type of the saved file when it is available. |
savedFile.fileSizeBytes | integer, optional | The saved file size in bytes. |
zipFile | object, optional | Details and a download link for the ZIP archive for this input URL. |
zipFile.downloadUrl | string | The Apify storage URL for the ZIP archive. |
zipFile.fileSizeBytes | integer, optional | The 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 🫡
🔗 Related Actors
- Website URL Crawler & Link Extractor: Build a URL inventory before reviewing image assets.
- Twitter Media Scraper: Collect direct media URLs from public Twitter/X posts.
- Instagram Downloader API: Collect direct media links from known public Instagram posts, reels, or usernames.
- TikTok Slideshow Downloader: Save photos from known public TikTok photo posts.
- Pinterest Image Downloader: Collect direct image links from public pins, boards, or one keyword.
Made with ❤️ by Maxime Dupré

