# Website Image Downloader — All Images from Any Page (`hipersoft/website-image-downloader`) Actor

Find and download every image on any web page or whole site: lazy-loaded, responsive (largest size), social-preview and CSS background images. Filter by size and format, skip duplicates, get direct file links plus one ZIP of everything.

- **URL**: https://apify.com/hipersoft/website-image-downloader.md
- **Developed by:** [Hipersoft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / image saved

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Website Image Downloader — Download All Images from Any Web Page

Website Image Downloader scans any web page — or a whole website — and **downloads every image it finds**: regular images, lazy-loaded images, the **largest version of responsive images**, social-preview images and CSS background images. Filter by size and format, skip duplicates automatically, and get **a direct link to every file plus one ZIP of everything**. Perfect for product photo collection, image datasets, competitor research, website migrations and backups.

![Website Image Downloader input — page URLs, filters and ZIP option in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/website-image-downloader-input.png?v=1)

### What does the Website Image Downloader do?

Paste one or more page URLs. The downloader reads each page, collects every image it references, downloads them, and saves each file to your run storage with a metadata row: page, image URL, alt text, format, width, height, file size and SHA-256 hash. Turn on **site crawling** to follow links on the same website and collect images from many pages in one run. At the end you get **images.zip** — every saved image in a single download.

### Why use it instead of a plain image downloader?

- **No need to collect image links yourself** — give it the page, it finds the images.
- **Highest resolution by default** — for responsive images it picks the largest size the page offers.
- **Finds hidden images** — lazy-loaded (`data-src`), `<picture>` sources, Open Graph / Twitter card images and CSS backgrounds.
- **Clean results** — minimum width/height, minimum file size and format filters drop icons, spacers and tracking pixels.
- **No duplicates** — identical images are saved once, even under different URLs.
- **One ZIP** — download everything at once, or use the per-file links.

### What data do you get per image?

| Data point | Description |
| --- | --- |
| Where it was found | `pageUrl`, `foundIn` (img, srcset, lazy, picture, meta, css, link, icon) |
| Image | `imageUrl`, `finalUrl`, `alt` |
| File info | `format`, `contentType`, `sizeBytes` |
| Dimensions | `width`, `height` |
| Hash | `sha256` |
| Saved file | `fileName`, `fileUrl` |

### What you get

One row per saved image plus the files themselves and **images.zip**. Export the dataset to JSON, CSV, Excel or XML.

![Website Image Downloader output example — image rows with page, format, dimensions, size and file link](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/website-image-downloader-output.png?v=1)

```json
{
  "pageUrl": "https://books.toscrape.com/",
  "imageUrl": "https://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg",
  "finalUrl": "https://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg",
  "alt": "A Light in the Attic",
  "foundIn": "img",
  "format": "jpg",
  "contentType": "image/jpeg",
  "sizeBytes": 9876,
  "width": 125,
  "height": 155,
  "sha256": "4752d0ef411fb1c4aad31d69425d075c219345c386fd94f43ddfbf4495ea0437",
  "fileName": "00004-2cdad67c44b002e7ead0cc35693c0e8b.jpg",
  "fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/00004-2cdad67c44b002e7ead0cc35693c0e8b.jpg"
}
```

#### Output schema

| Field | Type | Description |
| --- | --- | --- |
| `pageUrl` | string (URL) | The page the image was found on. |
| `imageUrl` | string (URL) | The image address as referenced by the page. |
| `finalUrl` | string (URL) | The image address after redirects. |
| `alt` | string | The image's alt text, when the page provides one. |
| `foundIn` | string | Where on the page it was found: `img`, `srcset`, `lazy`, `picture`, `meta`, `css`, `link` or `icon`. |
| `format` | string | File format, e.g. `jpg`, `png`, `webp`, `gif`, `svg`, `avif`. |
| `contentType` | string | MIME type of the file. |
| `sizeBytes` | integer | File size in bytes. |
| `width` | integer | Width in pixels (read from the file). |
| `height` | integer | Height in pixels (read from the file). |
| `sha256` | string | SHA-256 hash of the file contents. |
| `fileName` | string | Name of the saved file (also its name inside images.zip). |
| `fileUrl` | string (URL) | Direct download link to the saved file. |

The run's key-value store also holds **`images.zip`** (all saved images) and **`OUTPUT`** (run totals and the ZIP link).

### Use cases

- **E-commerce:** collect all product photos from product or category pages.
- **Machine learning:** build image datasets from galleries and listings.
- **Marketing & research:** gather competitors' banners, ads and social-preview images.
- **Website migrations & backups:** download every image from an old site in one ZIP.
- **SEO audits:** list every image on a page with its size, dimensions and alt text.

### How to download all images from a website

1. Open the Website Image Downloader and paste one or more **Page URLs**.
2. Optional: turn on **Also scan linked pages on the same site** and set **Max pages**.
3. Optional: set **Minimum width/height**, **Minimum file size** or **Only these formats** to keep just the images you want.
4. Click **Start**.
5. Download **images.zip** from the run's Storage tab (or the Output tab), or use each row's `fileUrl`.

### Input

```json
{
  "startUrls": [{ "url": "https://books.toscrape.com/" }],
  "crawlSameSite": true,
  "maxPages": 5,
  "maxImages": 100,
  "minWidth": 100,
  "formats": ["jpg", "png", "webp"],
  "createZip": true
}
```

| Field | Description |
| --- | --- |
| `startUrls` | Pages to scan. |
| `crawlSameSite` | Follow links on the same site and scan those pages too. |
| `maxPages` | Maximum pages to scan in total (default 10). |
| `maxImages` | Stop after saving this many images (default 200). |
| `minWidth` / `minHeight` | Skip images smaller than this many pixels. |
| `minBytes` / `maxBytes` | Skip files smaller / larger than this size. |
| `formats` | Keep only these formats (empty = all). |
| `skipDuplicates` | Save identical images once (default on). |
| `includeSrcset` | Take the largest responsive version (default on). |
| `includeMetaImages` | Include Open Graph / Twitter card images (default on). |
| `includeCssBackgrounds` | Include inline CSS background images (default on). |
| `includeIcons` | Include favicons and app icons (default off). |
| `storeFiles` | Save each image with a download link (default on). |
| `createZip` | Bundle everything into images.zip (default on, up to 400 MB). |
| `fileNaming` | `page-index` (numbered), `original` (original file name) or `hash`. |
| `proxyConfiguration` | Optional proxy for loading pages. |

### Related tools

- [Bulk Image Downloader](https://apify.com/hipersoft/bulk-image-downloader) — already have a list of image URLs? Download them all at scale.
- [Image Optimizer](https://apify.com/hipersoft/image-optimizer) — compress and resize images.
- [Images to PDF](https://apify.com/hipersoft/images-to-pdf) — turn a set of images into one PDF.
- [Website Content Crawler Pro](https://apify.com/hipersoft/web-content-crawler-pro) — crawl a site into clean Markdown or text.

### FAQ

**Which images does it find?**
Standard `<img>` images, lazy-loaded images (`data-src` and similar), responsive `srcset` and `<picture>` sources (largest size), Open Graph and Twitter card images, inline CSS backgrounds, links that point straight at image files and, optionally, favicons and app icons.

**Can it download images from a whole website?**
Yes. Turn on **Also scan linked pages on the same site** and set **Max pages**. Images that repeat across pages are saved once.

**How do I get all the images at once?**
Every run produces **images.zip** in the run's key-value store, linked from the Output tab and in the run summary.

**Can I filter out icons and tiny images?**
Yes — set **Minimum width**, **Minimum height** or **Minimum file size**, or limit to certain **formats**.

**What export formats are supported?**
The image list exports to JSON, CSV, Excel or XML; the images themselves are saved as files and in one ZIP.

**How does billing work?**
You pay a small fee per page scanned and per image saved. If you set a maximum cost per run, the run stops cleanly at that limit and you only receive what you paid for. See the **Pricing** tab for current rates.

**Can I connect this to other tools?**
Yes, through [integrations on the Apify platform](https://apify.com/integrations): [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and [webhooks](https://docs.apify.com/platform/integrations/webhooks).

**Is it legal to download images from websites?**
Only download images you have the right to use. You are responsible for respecting copyright and each site's terms.

### Related Actors

- [Bulk Image Downloader](https://apify.com/hipersoft/bulk-image-downloader)
- [Image Optimizer](https://apify.com/hipersoft/image-optimizer)
- [Images to PDF](https://apify.com/hipersoft/images-to-pdf)
- [Website Content Crawler Pro](https://apify.com/hipersoft/web-content-crawler-pro)

### Notes

Files are saved to your run's storage and are private to your account, as with all Apify runs. Only download images you have the right to use.

# Actor input Schema

## `startUrls` (type: `array`):

Web pages to scan. Every image on each page is found (including lazy-loaded, responsive and social-preview images) and downloaded.

## `crawlSameSite` (type: `boolean`):

Follow links to other pages on the same website and collect their images too (up to “Max pages”).

## `maxPages` (type: `integer`):

Maximum number of pages to scan in total.

## `maxImages` (type: `integer`):

Stop after saving this many images.

## `minWidth` (type: `integer`):

Skip images narrower than this — handy for dropping icons, logos and tracking pixels.

## `minHeight` (type: `integer`):

Skip images shorter than this.

## `minBytes` (type: `integer`):

Skip tiny files (e.g. 2000 drops most icons and spacers).

## `maxBytes` (type: `integer`):

Skip files larger than this.

## `formats` (type: `array`):

Keep only these formats, e.g. jpg, png, webp, gif, svg, avif. Leave empty for all formats.

## `skipDuplicates` (type: `boolean`):

Images with identical content are saved once, even when they appear under different URLs.

## `includeSrcset` (type: `boolean`):

For responsive images (srcset / <picture>), take the highest-resolution version the page offers.

## `includeMetaImages` (type: `boolean`):

Also collect the page's Open Graph / Twitter card images.

## `includeCssBackgrounds` (type: `boolean`):

Also collect images set as inline CSS backgrounds.

## `includeIcons` (type: `boolean`):

Also collect the site's favicon and touch icons.

## `storeFiles` (type: `boolean`):

Save every image in the run's storage with a direct download link.

## `createZip` (type: `boolean`):

Bundle all saved images into a single images.zip download (up to 400 MB).

## `fileNaming` (type: `string`):

How saved files are named.

## `proxyConfiguration` (type: `object`):

Optional proxy for loading pages. Images themselves are downloaded directly.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://books.toscrape.com/"
    }
  ],
  "crawlSameSite": false,
  "maxPages": 10,
  "maxImages": 20,
  "minWidth": 0,
  "minHeight": 0,
  "minBytes": 0,
  "maxBytes": 25000000,
  "formats": [],
  "skipDuplicates": true,
  "includeSrcset": true,
  "includeMetaImages": true,
  "includeCssBackgrounds": true,
  "includeIcons": false,
  "storeFiles": true,
  "createZip": true,
  "fileNaming": "page-index",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `images` (type: `string`):

No description

## `zip` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://books.toscrape.com/"
        }
    ],
    "maxImages": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/website-image-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://books.toscrape.com/" }],
    "maxImages": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/website-image-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://books.toscrape.com/"
    }
  ],
  "maxImages": 20
}' |
apify call hipersoft/website-image-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/website-image-downloader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AtbuDTzAnwRzBpXkB/builds/N8sLOc58A4ZS3LltW/openapi.json
