GPT Shop ยท Free seller tools

How to download all images from a list of URLs (bulk, to one ZIP)

Updated 16 October 2026. You have a spreadsheet column, a text file or a scraper export full of image (or PDF) links and you want the files, ideally in one ZIP. Here are four ways to do it, from free command-line tools to a hosted option that needs no code.

1. wget or curl (free, command line)

Save one URL per line in urls.txt, then:

wget -i urls.txt -P images/ --user-agent="Mozilla/5.0" --tries=3 --wait=0.5
zip -r images.zip images/

Good for a few hundred public files. Weak spots: duplicate file names overwrite each other (lots of CDNs call every file image.jpg), and there's no report of which URLs failed.

2. A short Python script (free, flexible)

import requests, zipfile, hashlib, os
urls = [u.strip() for u in open("urls.txt") if u.strip()]
H = {"User-Agent": "Mozilla/5.0", "Referer": "https://the-site-the-images-come-from.example/"}
with zipfile.ZipFile("images.zip", "w") as z:
    for i, u in enumerate(urls):
        try:
            r = requests.get(u, headers=H, timeout=30); r.raise_for_status()
            name = f"{i:04d}-{hashlib.md5(u.encode()).hexdigest()[:8]}-{os.path.basename(u.split('?')[0]) or 'file'}"
            z.writestr(name, r.content)
        except Exception as e:
            print("FAILED", u, e)

The numeric and hash prefixes stop name collisions. Add retries and a size cap before you point it at thousands of URLs.

3. Browser extensions

Extensions such as "Image Downloader" grab the images on the page you're viewing. They're fine for a single gallery page, but they can't take a list of URLs or a dataset, and they stall at a few hundred files.

4. A hosted bulk image downloader (no code, returns one ZIP)

We built Bulk Image Downloader on Apify for this job. Paste your URLs, or point it at an Apify scraper dataset (Shopify, Amazon, Google Maps and so on) and name the image field. It downloads every file with retries, skips duplicates, names files safely (by SKU if you like) and gives you OUTPUT.zip. It also reads a CSV or Google Sheet link directly, so a Shopify product export works as-is because the Image Src column is detected automatically. You also get one status row per URL. It costs about $1 per 1,000 files, rising to $2 per 1,000 from 26 October 2026, and failed downloads are free. You can call it from Python or Node too: see the example scripts on GitHub.

Bonus: download every image on a web page (no URL list yet)

If you only have the page, such as a product page, a gallery or an article, you first need the image links. Browser extensions can grab them from the page you have open. For a list of pages, the Bulk Image Downloader has a pageUrls option. It reads each page, collects every <img>, takes the largest srcset size, picks up lazy-loaded data-src images and the og:image, and downloads them all into one ZIP. It reads the page's HTML only, so images added later by JavaScript won't be found.

Fixing 403 / "hotlink" errors

Only download files you have the right to use.

FAQ

How do I download all images from a list of URLs at once?

Put the URLs in a text file and run wget -i urls.txt, use a short Python script with requests, or paste the list into a hosted bulk image downloader that returns one ZIP.

Why do some image URLs return 403 when downloaded in bulk?

Many CDNs block requests without a browser User-Agent or a Referer from their own site (hotlink protection). Send a normal User-Agent and set Referer to the site the images come from.

How do I download product images from scraper output?

Point a bulk downloader at the dataset column that holds the image URLs. On Apify, pass the scraper run's dataset ID and the image field name, and optionally a SKU field to name the files.