Bulk Image Downloader API: Images to ZIP, No Login
Pricing
from $0.60 / 1,000 image downloads
Bulk Image Downloader API: Images to ZIP, No Login
Download images in bulk from image links or web pages into one ZIP. Filter by type, width, height and file size, skip duplicates, and get a row per image with link, format, size, dimensions and alt text. $1 per 1,000 images saved. Skipped files are free. No login.
Pricing
from $0.60 / 1,000 image downloads
Rating
0.0
(0)
Developer
Don Mangu
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Bulk Image Downloader: URLs and Pages to ZIP
Bulk Image Downloader saves images from a list of image links or web pages into one ZIP file. Paste direct image links, page links, or both. For each page, the Actor reads the HTML and downloads the images on it. You get a ZIP with every image, an index.csv inside it, and one dataset row per image with its link, file type, width, height, file size and alt text.
Use it to collect product photos for a catalog, archive the images of a blog or documentation site, gather reference pictures for a design project, or build an image set from pages you are allowed to copy.
What this bulk image downloader does
- Image links and page links in one list. A link that returns an image is saved as it is. A link that returns a web page is read, and the images on it are downloaded: img tags, the largest size in srcset, picture sources, lazy-load attributes (data-src and similar), Open Graph and Twitter card images, links to image files and, if you turn it on, CSS background images.
- Filters. Keep only the types you want (JPEG, PNG, WebP, AVIF, SVG, GIF, BMP, TIFF, HEIC, ICO), and set a minimum width, minimum height, minimum file size and maximum file size. The type is read from the file itself, so a JPEG served as "application/octet-stream" is still found.
- No duplicates. When two links return the same bytes, the file is saved once.
- One ZIP. All images go into
images.zipin the run's key-value store. Choose one folder, one folder per page, or one folder per website. Very large runs are split intoimages-part-2.zipand so on. - Polite by default. robots.txt is read for every website, at most 2 downloads run against the same website at once, and a website that answers 401, 403 or 429 is not contacted again in that run.
How to download images in bulk
- Add your links to Image or page URLs. You can type them, paste them, or upload a text or CSV file of links.
- Set Maximum images (start with 20 to try it).
- Optional: choose Image types and set Minimum width to 200 or more to leave out icons and tracking pixels.
- Click Start. When the run ends, open the Output tab and click the ZIP link, or open the dataset to see every image with its status.
How much does it cost to download images?
You pay per image saved in the ZIP: $1.00 per 1,000 images ($0.001 per image). Files larger than 1 MB count once per started MB, so a 2.5 MB photo counts as 3. Images left out by your filters, duplicates, broken links and pages without images are free.
Example: 40 product pages with about 25 photos each, filtered to JPEG and WebP of at least 400 px wide, gives about 800 images under 1 MB each. That run costs about $0.80. You can set a maximum cost per run in the run options, and the Actor stops cleanly when it is reached.
Input example
{"startUrls": [{ "url": "https://www.wikipedia.org/" },{ "url": "https://example.com/photos/sunset.jpg" }],"maxImages": 200,"imageTypes": ["jpeg", "png", "webp"],"minWidth": 300,"zipFolders": "byPage"}
Output example
The ZIP link is in the Output tab and in the OUTPUT record. Each dataset row looks like this:
{"imageUrl": "https://example.com/photos/sunset.jpg","pageUrl": "https://example.com/gallery","status": "ok","fileName": "example.com-gallery/0007-sunset.jpg","zipFile": "images.zip","zipUrl": "https://api.apify.com/v2/key-value-stores/.../records/images.zip","format": "jpeg","width": 1600,"height": 1067,"sizeBytes": 245112,"altText": "Sunset over the harbor","billedUnits": 1,"charged": true,"error": null}
Rows that were not saved have a status such as filtered_dimensions, duplicate, too_large, robots_disallowed or not_found, and error says why in plain words.
Related tools
To resize, compress or convert the downloaded images to WebP or AVIF, pass the ZIP contents or the image links to an image converter Actor. To list every page of a website first, run a website crawler and feed its page links into this Actor.
FAQ
Is it legal to download images from websites? Downloading public images is usually allowed for personal use, research or with the owner's permission, but images are often protected by copyright. You are responsible for having the right to use the images you download. The Actor only fetches public pages without logging in, and it follows each website's robots.txt. Photos of people and their alt text can be personal data under laws such as the GDPR, so only collect them when you have a lawful reason.
Why did a page return no images?
Some websites build their pages with JavaScript, so the images are not in the HTML. The row for that page has the status page_no_images. In that case, add the image links directly.
Why do some images have the status host_stopped?
The website answered 401, 403 or 429 (access refused or too many requests), so the Actor stopped contacting it for the rest of the run. Try again later with fewer parallel downloads.
What are the limits? Up to 100,000 images per run and up to 100 MB per file. The ZIP is held in memory until it is saved, so for very large runs give the run more memory or lower Maximum ZIP size.
Can I get each image as its own file?
Yes. Turn on Also save each image as its own file and each dataset row gets a fileUrl with a direct download link.