Bulk Image Downloader - Web Pages or URLs to ZIP & Links avatar

Bulk Image Downloader - Web Pages or URLs to ZIP & Links

Pricing

from $2.00 / 1,000 image downloadeds

Go to Apify Store
Bulk Image Downloader - Web Pages or URLs to ZIP & Links

Bulk Image Downloader - Web Pages or URLs to ZIP & Links

Download every image from web pages or URL lists - lazy-loaded, srcset, og:image and CSS backgrounds - with dedupe, size filters and WEBP/JPEG/PNG conversion. Public links plus one ZIP. $2 per 1,000 images.

Pricing

from $2.00 / 1,000 image downloadeds

Rating

0.0

(0)

Developer

Kanto Labs

Kanto Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

11 days ago

Last modified

Share

Bulk Image Downloader - Save Every Image from Web Pages or URL Lists

Download all images from any list of web pages - or a plain list of image URLs - and get each one back as a permanent public link, plus one ZIP file with everything. The actor finds the images other downloaders miss: lazy-loaded pictures, the largest srcset / <picture> variant, og:image / Twitter cards and CSS background images. Duplicates are removed automatically, and you can filter by size or format and convert or resize on the fly.

You pay only per image saved - not per page, and never for duplicates, filtered-out or failed images.

What does Bulk Image Downloader do?

Bulk Image Downloader reads each web page you list (or takes direct image links), finds every image on it - including lazy-loaded pictures, the largest srcset variant, og:image and CSS backgrounds - downloads them, removes duplicates, optionally filters, converts and resizes them, and gives you a public link per image plus one ZIP file with everything.

Use cases

  • Website migrations and backups - grab every image from your old site before moving it.
  • Product catalogs - collect product photos from supplier or distributor pages you are allowed to use.
  • AI and ML datasets - build image sets from open-licensed sources (Wikimedia, NASA, government sites) with alt text as labels.
  • Content and SEO audits - list every image on a page with its size, format, dimensions and alt text (missing alt = SEO issue).
  • Design research - save mood-board references from your own or licensed pages.
  • Format conversion at scale - turn a list of JPG/PNG links into WEBP (or the reverse), resized to a max dimension.

Who is it for?

  • Web developers and agencies migrating or backing up a website.
  • Ecommerce teams collecting product photos they are allowed to use.
  • ML and data teams building image datasets from open-licensed sources, with alt text as labels.
  • SEO and content auditors listing every image with its size, format and alt text.
  • Designers saving references from their own or licensed pages.

Features

FeatureDetails
InputWeb pages and/or direct image URLs, mixed freely
Image discovery<img> + lazy attributes (data-src, data-lazy-src, data-original...), largest srcset, <picture>, og:image, twitter:image, links to image files, CSS background-image, optional favicons
FiltersMinimum width / height, minimum file size (drops tracking pixels), allowed formats, SVG on/off
DeduplicationBy SHA-256 of the image content - the same photo at 5 URLs is saved and billed once
ConversionKeep original, or convert to JPEG / PNG / WEBP; optional resize to a max width/height
OutputDataset row per image + public file link + images.zip (split into 100 MB parts for big runs)

How to use it

  1. Click Try for free.
  2. Paste web pages and/or direct image links into URLs, one per line.
  3. Optionally set a minimum width, allowed formats or Convert to WEBP / JPEG / PNG.
  4. Click Start, then download the ZIP or the single files from the results.

Input

FieldWhat it doesDefault
urlsWeb pages or image links, one per linehttps://books.toscrape.com/
maxImagesPerPageStop after N images from one page200
minWidth / minHeightSkip smaller images (free)0
minFileSizeKbSkip tiny files such as tracking pixels (free)2
allowedFormatse.g. ["jpg", "png"]; empty = all[]
convertTooriginal, jpg, png or webporiginal
maxDimensionResize so the longest side is at most N px (0 = off)0
dedupeSkip identical imagestrue
createZipPack everything into images.ziptrue
maxConcurrencyParallel downloads10
proxyConfigurationOptional Apify Proxyoff
{
"urls": [
"https://en.wikipedia.org/wiki/Red_panda",
"https://www.nasa.gov/image-of-the-day/",
"https://upload.wikimedia.org/wikipedia/commons/e/e6/Red_Panda_%2824986761703%29.jpg"
],
"minWidth": 200,
"maxImagesPerPage": 30,
"convertTo": "webp",
"maxDimension": 1600
}

Output

One dataset item per saved image. Real output from a test run with the input above:

{
"imageUrl": "https://images-assets.nasa.gov/image/iss075e0088825/iss075e0088825~large.jpg?w=1920&h=1280&fit=crop&crop=faces%2Cfocalpoint",
"pageUrl": "https://www.nasa.gov/image-of-the-day/",
"alt": "NASA’s Integrated Medical Model (IMM)",
"foundIn": "img",
"fileName": "iss075e0088825-large.webp",
"format": "webp",
"width": 1600,
"height": 1067,
"bytes": 297758,
"originalBytes": 396125,
"animated": false,
"sha256": "14e19800cc18b7f60aed1f51bc4638f538b3e675fd7cc7c3ffaeb6bfe90b589c",
"key": "www-nasa-gov-14e19800cc-iss075e0088825-large.webp",
"fileUrl": "https://api.apify.com/v2/key-value-stores/riOjz3sLEdTsc6h3U/records/www-nasa-gov-14e19800cc-iss075e0088825-large.webp?signature=...",
"error": null
}

The run's OUTPUT record summarizes the run and links the ZIP:

{
"imagesSaved": 45,
"pagesScanned": 2,
"duplicatesSkipped": 0,
"filteredOut": 14,
"failed": 2,
"zipUrls": ["https://api.apify.com/v2/key-value-stores/riOjz3sLEdTsc6h3U/records/images.zip?signature=..."],
"durationSeconds": 7.3
}

fileUrl and the ZIP links open without an Apify login. Images that could not be downloaded are listed with an error (turn off reportFailures to hide them) and are not charged.

How much does it cost to download images in bulk?

Pay per event: $0.002 per image saved ($2 per 1,000 images). Pages themselves, duplicates, filtered-out images, failures and the ZIP are free.

Worked examples:

  • 50 category pages with ~30 product photos each = 1,500 images = $3.00
  • The default demo run (books.toscrape.com, 20 covers) = $0.04
  • Convert 10,000 image links to WEBP = $20

Set Maximum cost per run and the actor stops exactly at your budget.

Responsible use

Only download images you have the right to use (your own sites, open licenses such as CC or public domain, or with permission). Social networks and stock-photo sites whose terms forbid automated downloading (Instagram, Facebook, TikTok, X, LinkedIn, Pinterest, Amazon, Google, Getty, Shutterstock...) are refused by the actor.

Integrations and API

Run it from your own code with the official apify-client package (Python shown; JavaScript works the same way):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("kantolabs/bulk-image-downloader").call(run_input={
"urls": [
"https://books.toscrape.com/"
],
"minWidth": 100,
"convertTo": "webp"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or get the results in a single HTTP call:

curl -X POST "https://api.apify.com/v2/acts/kantolabs~bulk-image-downloader/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://books.toscrape.com/"], "minWidth": 100, "convertTo": "webp"}'
  • AI agents (MCP): add the Apify MCP server to Claude, ChatGPT, Cursor or any MCP client and the agent can call this Actor as a tool.
  • No-code: Make, Zapier, n8n, Google Sheets, webhooks and Apify Schedules work out of the box.

Limits

  • It scans the pages you list and does not follow links to other pages.
  • No JavaScript rendering: images added only by client-side scripts after load are not seen.
  • Social networks, stock-photo sites, Amazon and Google are refused on purpose (their terms forbid automated downloading).
  • Up to 5,000 images per page, 25 MB per image by default (up to 200 MB); the ZIP is split into 100 MB parts.

FAQ

Does it render JavaScript? No - it reads the page HTML like a fast crawler, which covers lazy-load attributes, srcset and meta images. Images injected only by client-side JavaScript after load are not seen.

How do I get only large photos? Set minWidth to 400-800 and keep minFileSizeKb at 2+.

Are animated GIFs converted? No - animated images are always kept in their original format.

Where are the files? In the run's key-value store (Storage tab). Download them one by one from fileUrl, or all at once from the ZIP link in OUTPUT.

Something is not working? Open an issue on the Issues tab - it is answered quickly.