Bulk Image Downloader avatar

Bulk Image Downloader

Pricing

from $0.60 / 1,000 images

Go to Apify Store
Bulk Image Downloader

Bulk Image Downloader

Download images from URLs and store them in the key-value store with metadata including dimensions, file size, and SHA256 hash. Supports bulk input from URLs or from another Actor's dataset.

Pricing

from $0.60 / 1,000 images

Rating

0.0

(0)

Developer

Murat Uzun

Murat Uzun

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

Bulk Image Downloader

Download images from URLs in bulk and store them in Apify's key-value store with metadata including dimensions, file size, and SHA256 hash. Support direct URL input or read URLs from another Actor's dataset.

What is the Bulk Image Downloader?

The Bulk Image Downloader is a tool that fetches images from a list of URLs (or from another Actor's dataset) and stores them in Apify's key-value store for persistent access. For each downloaded image, the Actor extracts and stores metadata including:

  • Final URL after redirects
  • MIME type (content type)
  • File size in bytes
  • Image dimensions (width/height, parsed from PNG/JPEG/GIF/WebP headers)
  • SHA256 hash for deduplication or integrity checking
  • Public access URL

The Actor also optionally creates a ZIP file containing all downloaded images.

What data does the Bulk Image Downloader extract?

The Actor returns one dataset row per successfully downloaded image, with the following fields:

FieldTypeDescription
sourceUrlstringThe original image URL provided
finalUrlstringThe final URL after following redirects
keystringThe key under which the image is stored in the key-value store
storedUrlstringPublic URL to access the stored image
contentTypestringMIME type of the image (e.g., image/jpeg, image/png)
bytesintegerFile size in bytes
widthintegerImage width in pixels (parsed from file header)
heightintegerImage height in pixels (parsed from file header)
sha256stringSHA256 hash of the image file
scrapedAtstringTimestamp of the download (ISO 8601 UTC)

How to use the Bulk Image Downloader

Option 1: Download from direct URLs

  1. Provide image URLs: Enter one or more image URLs separated by semicolons or newlines, e.g.:

    https://example.com/image1.jpg
    https://example.com/image2.png
  2. Set the maximum number of images: Specify how many images to download (default: 50).

  3. Optionally create a ZIP: Enable createZip to also store all images as a single ZIP file.

Option 2: Download from another Actor's dataset

  1. Provide the dataset ID: Enter the ID of the dataset from a previous Actor run.

  2. Specify the URL field name: Enter the name of the field containing the image URLs (default: url).

  3. Configure download settings: Set max images, file size limit, and ZIP option as desired.

Example input

{
"imageUrls": "https://example.com/photo1.jpg; https://example.com/photo2.png; https://example.com/photo3.gif",
"maxImages": 100,
"maxFileSizeMb": 50,
"timeoutSecs": 60,
"createZip": true
}

Example output

[
{
"sourceUrl": "https://example.com/photo1.jpg",
"finalUrl": "https://cdn.example.com/photo1.jpg",
"key": "a3f2b8c1d4e5f6g.jpg",
"storedUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/a3f2b8c1d4e5f6g.jpg",
"contentType": "image/jpeg",
"bytes": 524288,
"width": 1920,
"height": 1080,
"sha256": "a3f2b8c1d4e5f6g7h8i9j0k1l2m3n4o5",
"scrapedAt": "2026-09-28T14:30:00.000Z"
}
]

Input parameters

  • imageUrls (string, optional): Image URLs separated by semicolons or newlines. Aliases: urls, url, startUrls.
  • datasetId (string, optional): ID of another Actor's dataset to read image URLs from. Use this instead of imageUrls.
  • urlField (string, default: url): When using datasetId, the name of the field containing image URLs.
  • maxImages (integer, default: 50, max: 100000): Maximum number of images to download.
  • maxFileSizeMb (integer, default: 20, max: 1000): Skip images larger than this size in megabytes.
  • timeoutSecs (integer, default: 30, range: 5–300): Timeout for each image download in seconds.
  • createZip (boolean, default: false): Also create a ZIP file containing all downloaded images.

Pricing

The Bulk Image Downloader costs $0.001 per image downloaded. A run with 50 images costs approximately $0.05.

Limitations

  • File size filtering: Images larger than the maxFileSizeMb limit are skipped and not charged.
  • Timeout enforcement: Downloads exceeding the timeoutSecs limit are aborted.
  • Dimension parsing: Image width/height are parsed from the file header. For some rare image formats, dimensions may be unavailable (width/height will be null).
  • ZIP file size: The created ZIP file is stored in the key-value store under a single record. There is no practical size limit, but very large ZIPs may take time to generate.
  • Redirect handling: The Actor follows HTTP redirects (up to 20). Final URL reflects the ultimate source after all redirects.
  • Content-type validation: Only files with MIME types starting with image/ are downloaded. Other content is rejected.

Using with AI agents and MCP

This Actor works with AI agents through the Apify MCP server. Agents can call it like:

{
"imageUrls": "https://example.com/image1.jpg; https://example.com/image2.png",
"maxImages": 50,
"createZip": true
}

The Actor returns a dataset of stored images with public URLs ready for processing, analysis, or further download by other tools.

FAQ

Q: Can I download images from password-protected URLs? A: No, the Actor makes unauthenticated requests. It cannot access URLs behind login walls or authentication pages.

Q: What happens if an image URL returns a redirect? A: The Actor automatically follows redirects (up to 20 hops). The finalUrl field shows the ultimate source URL after all redirects.

Q: Can I download images from a different Actor's dataset? A: Yes. Provide the dataset ID and specify the field name containing image URLs. The Actor will read URLs from all items in that dataset.

Q: How are images deduplicated? A: Images are not deduplicated by the Actor itself. However, the SHA256 hash in the output allows you to identify duplicate images downstream.

Q: Why can't I download from Instagram or Facebook? A: These sites use bot-detection and require authenticated sessions. The Actor makes simple, unauthenticated requests and will not bypass bot checks.

Q: Is the ZIP file immediately available? A: Yes, the ZIP is created in the key-value store while the run finishes. You can access it via the key shown in the log output.

Q: What image formats are supported? A: The Actor downloads any image MIME type (JPEG, PNG, GIF, WebP, BMP, TIFF, SVG, etc.). Dimension parsing works for PNG, JPEG, GIF, and WebP.

Part of the webdatatools web-intelligence suite — every Actor is pay-per-event, reads public data without a login, and returns one clean row per entity:

Browse the whole suite at webdatatools, or call ten of these Actors straight from Claude, Cursor or Cline with the webdatatools MCP server.

Website & domain intelligence

Content for AI, LLMs and RAG

Search, video and social

Leads, jobs and company data

Developer, app and research data

Support

For issues, feature requests, or questions, visit the Actor's GitHub issues or community forums.