Bulk Image & File Downloader: SKU-named ZIP + Image Audit
Pricing
$1.00 / 1,000 file downloadeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
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.
What you get for each link
- status:
ok,failedorskipped, 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
.jpglink that serves WebP is saved as.webpand flaggedtype-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.jpgin 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,thumbnailormedia[].urlare 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
| Field | What it does |
|---|---|
| File links | One 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 link | A CSV/TSV link, or a Google Sheet shared as "Anyone with the link". Cells may hold several links separated by spaces, ` |
| Dataset from another Actor | Pick a dataset, or use {{resource.defaultDatasetId}} in an integration. |
| Link field / SKU field | Leave empty to detect. Dots reach nested fields (media.0.url); separate several link fields with commas. |
| File names | SKU-based (default when a SKU is known), original file name, or content hash. |
| Pack all files into ZIP / ZIP part size | ZIP parts files-001.zip, files-002.zip... split at the size you set (500 MB default). Files are stored, not recompressed. |
| Store identical files once | On by default: an identical file under a second link is flagged duplicate and points to the first copy. |
| File types | Any, or images only. |
| Flag images smaller than | Shorter side in px for the small flag (500 default, 0 = off). |
| Maximum file size, Maximum number of links, Parallel downloads, Parallel downloads per host, Timeout | Limits. 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
- Collect. Links from the list, the CSV and the dataset are merged; a link given twice is downloaded once.
- 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. - 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.
- 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-pageand 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.
Related Actors
- Image Resizer & Converter: Bulk WebP/AVIF Compressor: resize and convert the downloaded images.
- Sitemap URL Extractor: list every page of a site.