Bulk Image & File Downloader: SKU-named ZIP + Image Audit avatar

Bulk Image & File Downloader: SKU-named ZIP + Image Audit

Pricing

$1.00 / 1,000 file downloadeds

Go to Apify Store
Bulk Image & File Downloader: SKU-named ZIP + Image Audit

Bulk Image & File Downloader: SKU-named ZIP + Image Audit

Download images and files in bulk from a list of links, a CSV/Google Sheet or another Actor's dataset. Names files by SKU, splits ZIPs at 500 MB, and audits every link: broken, duplicate, too small, non-square, wrong type, CMYK. $1 per 1,000 files, no start fee.

Pricing

$1.00 / 1,000 file downloadeds

Rating

0.0

(0)

Developer

Open Data Tools

Open Data Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Security

Limited permissions

Share

Download images and other files in bulk from a list of links, a CSV or Google Sheet, or the results of another Actor. Files are named by SKU (MUG-B_1.jpg, MUG-B_2.jpg) or by their own file name, saved with a download link each, and can be packed into ZIP files that split at 500 MB. Every link also gets an audit row, so you can see which product images are broken, duplicated, too small, not square, the wrong file type or CMYK.

It costs $1 per 1,000 downloaded files, with no start fee. Broken links, web pages, refused hosts and skipped files are free.

  • status: ok, failed or skipped, with the HTTP status and the reason
  • fileUrl: a download link for the saved file, and fileName
  • Real file type from the file's first bytes, not from the link: a .jpg link that serves WebP is saved as .webp and flagged type-mismatch
  • bytes, and for images width x height, format and colour space
  • sha1 content hash, with duplicateOf pointing to the first link with the same file
  • sku and sourceRow, so every file maps back to the row it came from
  • flags: broken-link, duplicate, small, non-square, type-mismatch, cmyk, animated, tiny-file, redirected, html-page, too-big, download-error

At the end of the run you also get manifest.csv (every link mapped to its file name, SKU, ZIP part and flags), the ZIP parts if you asked for them (each carries its own manifest.csv), and a SUMMARY record with counts per flag and the ZIP links.

What people use it for

  • Product image exports. Feed a Shopify, WooCommerce or marketplace product export (CSV or Google Sheet). The image column and the SKU column are found automatically, files come out as {sku}_1.jpg, {sku}_2.jpg in the order given, and the ZIP is ready to upload to another store or send to a designer.
  • After a scraper. Pick the dataset of a product, real-estate or catalogue scraper. Fields such as images, imageUrl, photos, thumbnail or media[].url are detected, and lists of links in one field are all downloaded.
  • Image audits. Turn off Save each file separately to check thousands of image links without storing them: find dead links, duplicates and images under the marketplace minimum (set Flag images smaller than, for example 1000 px).
  • Document and media backups. PDFs, spreadsheets, audio, video and archives download the same way, up to 1 GB per file.

Input options

FieldWhat it does
File linksOne link per line. Put a SKU on the line to name files: SKU-123, https://.../123.jpg. A line may hold several links.
CSV or Google Sheet linkA CSV/TSV link, or a Google Sheet shared as "Anyone with the link". Cells may hold several links separated by spaces, `
Dataset from another ActorPick a dataset, or use {{resource.defaultDatasetId}} in an integration.
Link field / SKU fieldLeave empty to detect. Dots reach nested fields (media.0.url); separate several link fields with commas.
File namesSKU-based (default when a SKU is known), original file name, or content hash.
Pack all files into ZIP / ZIP part sizeZIP parts files-001.zip, files-002.zip... split at the size you set (500 MB default). Files are stored, not recompressed.
Store identical files onceOn by default: an identical file under a second link is flagged duplicate and points to the first copy.
File typesAny, or images only.
Flag images smaller thanShorter side in px for the small flag (500 default, 0 = off).
Maximum file size, Maximum number of links, Parallel downloads, Parallel downloads per host, TimeoutLimits. Per-host limit is 2 by default so no site is hammered.

Input example

{
"csvUrl": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit#gid=0",
"zip": true,
"zipPartMb": 500,
"minImageSide": 1000
}

Output example

{
"index": 0,
"url": "https://cdn.example.com/products/mug-blue-front.jpg",
"sku": "MUG-B",
"status": "ok",
"httpStatus": 200,
"contentType": "image/jpeg",
"fileType": "jpg",
"bytes": 184233,
"width": 1000,
"height": 1000,
"imageFormat": "jpeg",
"colorSpace": "srgb",
"sha1": "6f1c0b0e2c8f4a1d9a3e5b7c2d4f6a8b0c1d2e3f",
"duplicateOf": null,
"flags": [],
"fileName": "MUG-B_1.jpg",
"fileUrl": "https://api.apify.com/v2/key-value-stores/.../records/MUG-B_1.jpg?signature=...",
"zipPart": 1,
"error": null,
"source": "csv",
"sourceRow": 2
}

How it works

  1. Collect. Links from the list, the CSV and the dataset are merged; a link given twice is downloaded once.
  2. Download. Up to 8 files at once and at most 2 per host, served round-robin across hosts. Timeouts, rate limits (HTTP 429, honouring Retry-After) and server errors are retried up to 3 times.
  3. Check. The file type is read from the file's first bytes. Images are measured without being decoded in full. A sha1 hash catches identical files.
  4. Save. Each file goes to the run's key-value store with a signed download link, and is streamed into the current ZIP part.

Limits and fair use

  • Only the links you give are downloaded. Nothing is crawled, and links that return a web page are reported as html-page and not charged. To collect the images on web pages, use Image Resizer & Converter with Web pages, which also converts them to WebP.
  • Social media (Instagram, Facebook, TikTok, YouTube, X, LinkedIn, Pinterest, Reddit), Google and Amazon hosts are refused, because their terms forbid automated downloads. Use their official export tools.
  • Use it only for files you have the right to download and store.
  • Files over 100 MB need more run memory; 1 GB is the default and enough for most image jobs.

Pricing

Pay per event: $0.001 per downloaded file ($1 per 1,000). Failed, skipped and refused links are not charged. Platform usage is included. Set a maximum charge per run in the run options and the Actor stops cleanly when it is reached.