Bulk Image & File Downloader: URLs, Pages or CSV to ZIP
Pricing
from $1.20 / 1,000 file downloadeds
Bulk Image & File Downloader: URLs, Pages or CSV to ZIP
$2 per 1,000 files; failed downloads are free. Download all images and files (PDFs, docs, media) from web pages, URL lists, CSV files, Google Sheets (e.g. Shopify Image Src), Shopify stores (all product images), Google Drive folders or Apify datasets into one ZIP, named by SKU. Retries.
Pricing
from $1.20 / 1,000 file downloadeds
Rating
0.0
(0)
Developer
Chris Elder
Maintained by CommunityActor stats
0
Bookmarked
67
Total users
45
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Bulk Image Downloader: Download All Images from Pages/URLs
Bulk Image Downloader lets you download all images from a website page, a list of image URLs, a CSV / Google Sheet or an Apify dataset, and get them as one ZIP. It is also a general file downloader: it downloads images, PDFs and other files from a list of URLs (or an Apify dataset) in bulk. Each file is saved to the run’s Key-Value store with one status row per URL, and you can get everything as one ZIP. Built for scraper clean-up, product-image archives, dataset exports, creative ops and agent pipelines that need “save these URLs as files”.
Store page: apify.com/chris_elder/bulk-file-downloader
✅ Pay per result: $2 per 1,000 files, from $1.20 on higher Apify plans · 🆓 Failed downloads are never charged · 🔑 No API key
▶ Try it with one click · 📄 Real example output · 💲 Pricing · 🔌 API & integrations · ❓ FAQ · 🛟 Support
What does Bulk Image Downloader do?
It is a bulk downloader for a list of file URLs or an Apify dataset (images, PDFs, CSVs, ZIPs, audio, any file type within the size cap). You give it URLs, or a scraper run’s dataset, and it gives you the files.
- 📥 Bulk download from any http(s) URL list (strings or
{url, fileName, key}) - 🌐 Download every image on a web page:
pageUrls(src, largest srcset, lazy-load, og:image) - 🕸️ Download all images from a whole website:
pageUrls+crawlWebsitefollows the site's own links (same domain, robots.txt respected) and saves every image once; page visits are free - 🛍️ Download all product images from a Shopify store:
shopifyStoreUrls(store, collection or product URL), named by handle or SKU - 🛒 Download all product images from a WooCommerce store:
wooStoreUrls(store, product category or product URL), read from the store's public Store API, named by slug or SKU, no WordPress login or plugin - 📁 Download a whole Google Drive folder:
driveFolderUrls(public folder links), subfolders included, Docs/Sheets/Slides exported to PDF/XLSX, no login or API key - 🗂️ Download a shared Dropbox folder:
dropboxFolderUrls(dropbox.com/scl/fo/... links), every file saved one by one with its folder path, no Dropbox login or app - 📑 Download from a CSV or Google Sheet:
csvUrl, link column auto-detected (ShopifyImage Srcworks out of the box) - 🗃️ Download from an Apify dataset: pass
datasetId+urlField(optionalfileNameFieldfor SKU-style names) - 🖼️ Images only:
onlyImageskeeps image responses and skips the rest free (ideal bulk image downloader mode) - 🔗 Hotlink-friendly headers: set
refereranduserAgentfor CDNs that block naked image requests - 🔁 Retries: transient 429/5xx and network errors retried (default 2)
- 🗂️ Key-Value store output: each file saved under a stable key
- 📦 Optional ZIP:
OUTPUT.zipwith all successful files - 🔁 Deduping & safe names: duplicate URLs skipped; filenames sanitised
- 🛡️ SSRF guard: private/internal hosts refused (not charged)
- 📏 Size cap: oversize files skipped free (default 10 MB, max 50 MB)
- 🆓 Failures free: 404s, timeouts, non-images (when filtered) and blocked hosts are listed and not charged
New page mode: download every image on a web page
Put product pages, galleries or articles in pageUrls and the Actor collects every image on each page: <img> src, the largest srcset size, lazy-load data-src, <picture> sources and og:image. Relative links are resolved and duplicates removed. Each result row carries sourcePage. Pages that fail to load are skipped and not charged. It reads static HTML only, so images added by JavaScript after the page loads aren't picked up.
| Input | What it does |
|---|---|
pageUrls | Web pages to scan for images (up to 200 pages per run) |
maxImagesPerPage | Cap on images taken from each page (default 200, max 2,000) |
{"pageUrls": ["https://books.toscrape.com/", "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"],"onlyImages": true,"maxImagesPerPage": 50,"createZip": true}
(Real run, 16 Oct 2026: 2 pages → 11 images in one ZIP; a third, unreachable page was skipped at no charge.)
New: download all images from a whole website (crawl mode)
Turn on crawlWebsite and each link in pageUrls becomes a start page. The Actor follows links to other pages on the same website (breadth first, same domain, www. or not), takes every image it finds on each page, and saves each image once, even if it appears on every page (logos, banners). It respects the site's robots.txt, waits between pages, and never leaves the domain you gave it.
| Input | What it does |
|---|---|
crawlWebsite | Follow same-site links from the start pages (default off) |
maxCrawlPages | Stop after this many pages in total (default 20, max 500) |
crawlUrlFilter | Follow only links containing this text, e.g. /products/, /gallery/ or /blog/ (start pages are always visited) |
maxFiles | Hard cap on saved files, so a big site can't run away with your budget |
{"pageUrls": ["https://books.toscrape.com/"],"crawlWebsite": true,"maxCrawlPages": 10,"crawlUrlFilter": "/catalogue/","onlyImages": true,"maxFiles": 100}
Visiting pages is free. You pay only per file saved ($2 per 1,000). Each dataset row has sourcePage, the page the image was found on. RUN_SUMMARY shows pagesScanned, pagesFailed, pagesBlockedByRobots and why the crawl stopped (crawlStoppedAt). The crawl reads static HTML like page mode does. If the pages load but contain no images in their HTML (images injected by JavaScript), the run ends with a clear note and no charge instead of an error.
New: download from a CSV or Google Sheet (Shopify "Image Src" exports)
Paste a CSV/TSV link or a Google Sheet shared as "Anyone with the link can view" into csvUrl. The link column is found automatically (Shopify's Image Src works with no settings), or set urlField to the column name. Set fileNameField to Handle or SKU for files like red-shirt.jpg, red-shirt-2.jpg. Cells with several links are all downloaded. Google Drive and Dropbox share links are converted to direct downloads.
{"csvUrl": "https://api.apify.com/v2/key-value-stores/b4gAQBUYH6cUo2aUC/records/shopify-products-sample.csv","fileNameField": "Handle","createZip": true}
New: download every file in a public Google Drive folder
Put one or more Google Drive folder links in driveFolderUrls (the folder must be shared as "Anyone with the link can view"). The Actor lists the folder through Drive's public folder view, walks into subfolders (turn off driveRecursive to stay at the top level), and downloads every file with its original Drive name. Files in subfolders get the folder path as a prefix (photos_2024_IMG_001.jpg), and each dataset row carries driveFolderPath, driveFileId and driveFileName. Native Google Docs, Sheets and Slides are exported as PDF, XLSX and PDF. Large files go through Drive's direct download host, so you get the file itself rather than Google's "can't scan this file for viruses" page. No Google login, no API key, no OAuth app.
Listing folders is free. You pay only per file saved ($2 per 1,000), and private folders, sign-in pages and oversize files are skipped free and reported in RUN_SUMMARY.driveFailed. Folder links pasted into urls, a CSV or a dataset are recognised and listed the same way.
| Input | What it does |
|---|---|
driveFolderUrls | Public folder links (drive.google.com/drive/folders/...) or bare folder IDs, up to 50 per run |
driveRecursive | Include subfolders (default on, up to 500 folders per run) |
onlyImages | Keep only images, e.g. to pull a photo folder and skip everything else free |
{"driveFolderUrls": ["https://drive.google.com/drive/folders/1C3oF7f683LLopFjFcI7cQhimQV8mYy9D"],"driveRecursive": false,"maxFiles": 20,"createZip": true}
(Uses a public NIST research data folder; it saves the folder's licence, README and metadata files into one ZIP.)
New: download every file in a shared Dropbox folder
Put one or more Dropbox shared folder links in dropboxFolderUrls (links like https://www.dropbox.com/scl/fo/..., shared so anyone with the link can view). Dropbox hands the whole folder over as one ZIP; the Actor unpacks it and saves each file on its own in the Key-Value store (and in OUTPUT.zip), so you can open, pass on or process single files instead of one big archive. Files in subfolders get the folder path as a prefix (Shoot 1_IMG_001.jpg), and each dataset row carries dropboxFolderPath and dropboxFileName. Mac and Windows junk (__MACOSX, .DS_Store, Thumbs.db) is dropped. No Dropbox login, no app, no API key.
Fetching and unpacking the folder is free. You pay only per file saved ($2 per 1,000). Links that are turned off or private, and files over maxFileBytes, are skipped free and reported in RUN_SUMMARY.dropboxFailed or the dataset. Dropbox folder links pasted into urls, a CSV or a dataset are handled the same way; single-file Dropbox links (/scl/fi/) are downloaded directly as before.
| Input | What it does |
|---|---|
dropboxFolderUrls | Shared folder links (dropbox.com/scl/fo/... or older dropbox.com/sh/...), up to 20 per run |
maxFileBytes | Files bigger than this are skipped free (default 10 MB, max 50 MB) |
onlyImages | Keep only images, e.g. to pull a photo shoot folder and skip everything else free |
{"dropboxFolderUrls": ["https://www.dropbox.com/scl/fo/zmwsav82kgqtc0tzgpj3l/h?dl=0&rlkey=k6d2bp73k4ifavcg9ldjhgu0s"],"maxFiles": 10,"createZip": true}
(Uses a public research folder shared on GitHub: of its 3 files, the 0.6 MB one is saved and the two large model archives are skipped free under the 10 MB default.)
Good to know: the folder's ZIP is held on the run's disk, so the largest folder a run can read is about 1.6x its memory (about 820 MB at the default 512 MB; raise memory for bigger folders, or share a subfolder). Only download folders you have the right to use.
New: download all product images from a Shopify store
Put a Shopify store, a /collections/... page or a /products/... page in shopifyStoreUrls. The Actor reads the store's public products feed (the same JSON the storefront serves; no login, no API key, no app install) and downloads every product image at full resolution, in product order. Files are named handle-1.jpg, handle-2.jpg (or by variant SKU with shopifyFileNames: "sku"), and each dataset row carries productHandle, productTitle, sku, imagePosition, imageAlt, imageWidth and imageHeight. Turn on shopifyMainImageOnly for just the featured image of each product. Reading products is free; you pay only per image saved ($2 per 1,000).
Good for backing up your own store's images, moving to a new platform, building marketplace or Google Merchant feeds, or pulling a supplier's catalogue images when the supplier allows reuse.
| Input | What it does |
|---|---|
shopifyStoreUrls | Store homepages, collection URLs or product URLs (up to 50 per run, up to 10,000 products per store) |
shopifyFileNames | handle (default), sku or original |
shopifyMainImageOnly | Only the first image of each product |
{"shopifyStoreUrls": ["https://hydrogen-preview.myshopify.com/collections/all"],"shopifyFileNames": "handle","maxFiles": 20,"createZip": true}
(Uses Shopify's own public Hydrogen demo store. A store that is not on Shopify, or has its products feed turned off, is reported in RUN_SUMMARY.shopifyFailed and costs nothing.)
New: download all product images from a WooCommerce store
Put a WooCommerce store, a /product-category/... page or a /product/... page in wooStoreUrls. The Actor reads the store's public WooCommerce Store API (/wp-json/wc/store/v1/products, the same product feed the shop's own blocks use; no WordPress login, no API key, no plugin) and downloads every product image at full size, in gallery order. Sub-folder installs (example.com/shop-site/) work too. Files are named slug-1.jpg, slug-2.jpg (or by SKU with wooFileNames: "sku"), and each dataset row carries productSlug, productTitle, sku, imagePosition, imageAlt and productCategories. Turn on wooMainImageOnly for just the featured image of each product. Reading products is free; you pay only per image saved ($2 per 1,000).
| Input | What it does |
|---|---|
wooStoreUrls | Store homepages, product-category URLs or product URLs (up to 50 per run, up to 10,000 products per store) |
wooFileNames | slug (default), sku or original |
wooMainImageOnly | Only the first image of each product |
{"wooStoreUrls": ["https://websitedemos.net/brandstore-02/product-category/accessories/"],"wooFileNames": "slug","maxFiles": 20,"createZip": true}
(Uses a public WooCommerce theme demo store. A site that is not on WooCommerce, has its Store API turned off, or disallows /wp-json/ in robots.txt is reported in RUN_SUMMARY.wooFailed and costs nothing.)
Use cases
- Scraper users: point
datasetIdat a scraper run and turn its image/PDF URL column into a ZIP for hand-off - Creative / marketing ops: batch-pull assets from a sheet
- Agents & n8n/Make: “download these links” as one step
- Developers: archive attachments from an API response list
- E-commerce / catalogue teams: bulk download product images from a URL column; turn on
onlyImagesand setrefererto your store URL if the CDN blocks hotlinks
📄 Downloading PDFs to read their text? You can skip the download. Paste the same PDF links into our PDF to Markdown & Text Converter and get clean Markdown and plain text back (scanned pages are OCR'd automatically) for $3 per 1,000 PDFs. Keep this Actor for archiving the original files as a ZIP.
How to use it
- Click Try for free: the prefill downloads a tiny PDF and the Google logo PNG (2 files ≈ $0.0045 including the start fee).
- Paste your URL list into
urls. - Leave
createZipon to getOUTPUT.zipin the Key-Value store. - Download individual keys or the ZIP from the run storage.
Input example
{"urls": ["https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",{ "url": "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png", "fileName": "sample.png" }],"createZip": true,"maxFiles": 100}
Other options: onlyImages, referer, userAgent, maxRetries, fileNameField, maxFileBytes, zipKey, dedupe, maxConcurrency, requestDelayMs, timeoutSecs.
Download files from an Apify dataset
Already scraped the URLs with another Actor? Skip the copy-paste and point this Actor at that dataset:
{"datasetId": "YOUR_DATASET_ID","urlField": "imageUrl","createZip": true,"maxFiles": 500}
datasetId: a dataset ID or name (for a scraper run, use itsdefaultDatasetId). The Actor gets read-only access to that one dataset only.urlField: the field holding the URL (defaulturl). Dots reach nested fields (file.url); a field holding a list of URLs (e.g.images) downloads each one.- Rows with a missing or blank URL are skipped and never charged; the count is in
RUN_SUMMARY(skippedMissingUrl). Failed downloads stay free as usual. - You can combine
urlsanddatasetIdin one run; duplicates are removed. In the Console form the 2 sample URLs are ignored automatically when a dataset is given.
Bulk image downloader mode
{"urls": ["https://httpbin.org/image/png","https://httpbin.org/image/jpeg","https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"onlyImages": true,"referer": "https://www.example.com/","createZip": true}
With onlyImages: true, the PDF row is recorded as skipped (errorCode: NOT_IMAGE) and not charged. referer / userAgent are sent on every request for hosts that require them.
Filenames from a dataset column
{"datasetId": "YOUR_DATASET_ID","urlField": "imageUrl","fileNameField": "sku","onlyImages": true,"createZip": true}
Example: 2 URLs in → 2 files + a ZIP out
| Input URL | What you get |
|---|---|
https://www.w3.org/.../dummy.pdf | Key-Value record file-0000-3eba3cf786-dummy.pdf (13,264 bytes, application/pdf) |
https://httpbin.org/image/png | Key-Value record file-0001-e10e7241ca-png.png (8,090 bytes, image/png) |
| (both) | OUTPUT.zip with both files (21,560 bytes) + RUN_SUMMARY {"saved": 2, "failed": 0} |
Output example (from a real public run)
Public run data (no login needed): dataset JSON · dataset CSV · OUTPUT.zip · RUN_SUMMARY
One dataset row per URL:
{"index": 0,"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf","ok": true,"key": "file-0000-3eba3cf786-dummy.pdf","fileName": "dummy.pdf","contentType": "application/pdf; qs=0.001","bytes": 13264,"statusCode": 200,"finalUrl": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"}
Failed rows include ok: false, error, errorCode and are not charged. A RUN_SUMMARY record counts saved/failed files and ZIP size.
Real example: every image on a web page → ZIP
Input (page mode, 17 Oct 2026 run):
{ "pageUrls": ["https://books.toscrape.com/"], "maxImagesPerPage": 5, "onlyImages": true, "createZip": true }
Result: 5 of 5 images saved (JPEGs, about 10 KB each) plus OUTPUT.zip. First dataset row:
{"index": 0,"url": "https://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg","sourcePage": "https://books.toscrape.com/","ok": true,"key": "file-0000-47a4816af2-2cdad67c44b002e7ead0cc35693c0e8b.jpg","fileName": "2cdad67c44b002e7ead0cc35693c0e8b.jpg","contentType": "image/jpeg","bytes": 9876,"statusCode": 200}
How much does it cost to download files?
| Event | Free / Bronze | Silver | Gold+ |
|---|---|---|---|
| Actor start (× memory GB) | $0.0005 | $0.0005 | $0.0005 |
| File downloaded | $0.002 | $0.0016 | $0.0012 |
Failed, blocked and oversize downloads are free.
| Job | Approx. cost |
|---|---|
| Prefill (2 successful files) | ≈ $0.004 + $0.0005 start |
| 1,000 files | $2.00 |
| 10,000 files (Gold) | $12.00 |
Large files also consume Apify data-transfer / storage from your plan quota, so keep maxFileBytes tight. Use Max cost per run to cap PPE spend.
Integrations (API, AI agents, Make, Zapier)
curl -X POST "https://api.apify.com/v2/acts/chris_elder~bulk-file-downloader/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls":["https://httpbin.org/image/png"],"createZip":true}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("chris_elder/bulk-file-downloader").call(run_input={"urls": ["https://httpbin.org/image/png", "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"],"createZip": True,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["ok"], row["url"], row.get("key"))zip_url = f"https://api.apify.com/v2/key-value-stores/{run['defaultKeyValueStoreId']}/records/OUTPUT.zip"
MCP (AI agents): https://mcp.apify.com/?tools=chris_elder/bulk-file-downloader
Make / Zapier / n8n: use the Apify Run Actor module with chris_elder/bulk-file-downloader, map your URL list into urls (or pass the previous Actor run’s defaultDatasetId as datasetId), then read the dataset rows or fetch OUTPUT.zip from the run’s Key-Value store.
Limits and good to know
- Only http/https URLs; private/localhost/cloud-metadata hosts are refused.
- Default size cap 10 MB per file (max 50 MB).
- Big jobs are split into ZIP parts so large jobs do not run out of memory:
OUTPUT.zip, thenOUTPUT-part2.zip,OUTPUT-part3.zipand so on (about 75 MB of files per part at the default 512 MB memory; raise memory for fewer, bigger parts).RUN_SUMMARY.zipKeyslists every part. - You must have the right to download and use each file.
- ZIP uses store-only (no compression) for speed and simplicity.
Is it legal?
This Actor downloads URLs you supply. It does not bypass paywalls, logins or bot protection. You are responsible for having rights to the files and for complying with site terms and copyright law. See Apify’s legal overview.
FAQ
Can it download images and PDFs? Yes, any file type, within the size cap. For a bulk image downloader workflow set onlyImages: true so non-images are skipped free.
My product images return 403. Set referer to the store page that normally embeds them (and optionally a browser userAgent). This Actor does not bypass logins or paywalls.
Can I name files from a SKU column? Yes, with datasetId, set fileNameField to that column.
Can it download all images from a Shopify store? Yes. Put the store URL (or a collection or product URL) in shopifyStoreUrls. It reads the public products feed, downloads every product image at full size and names files by handle or SKU. Use it on your own store or with the owner's permission.
Can it download all images from a WooCommerce store? Yes. Put the store URL (or a product-category or product URL) in wooStoreUrls. It reads the store's public WooCommerce Store API, downloads every product image at full size and names files by slug or SKU, with no WordPress login or plugin. Use it on your own store or with the owner's permission.
Can it download a whole Google Drive folder? Yes. Share the folder as "Anyone with the link can view" and put its link in driveFolderUrls. Every file, subfolders included, is saved and zipped with its Drive name; Google Docs, Sheets and Slides come out as PDF or XLSX. No Google login or API key.
Can it download a shared Dropbox folder? Yes. Put the shared folder link (dropbox.com/scl/fo/...) in dropboxFolderUrls. Every file comes out on its own, with subfolder names as a prefix, plus one ZIP. No Dropbox login or app.
Where is the ZIP? In the run’s Key-Value store under OUTPUT.zip (or your zipKey). Large jobs add OUTPUT-part2.zip, OUTPUT-part3.zip and so on; RUN_SUMMARY.zipKeys lists them all.
Why was a file free? HTTP errors, timeouts, SSRF blocks, oversize files, onlyImages non-matches and dataset rows with no URL are not charged.
Does it scrape websites for images? Yes. Put page URLs in pageUrls and it downloads every image on each page (largest srcset, lazy-loaded images, og:image), up to maxImagesPerPage. See "page mode" above.
Can I download files from an Apify dataset? Yes, set datasetId and urlField. Rows without a URL are skipped free.
How do I download files from a Google Sheet or CSV? Copy the URL column into urls (one URL per item), or send it as a JSON array through the API, Make or n8n.
How do I download all the files in one go? Leave createZip on and download OUTPUT.zip from the run’s storage.
Common jobs people use this bulk image downloader for
- Download all images from a website page or gallery: put the page links in
pageUrls. - Download all images from an entire website: put the home page (or a section page) in
pageUrlsand turn oncrawlWebsite; usecrawlUrlFilterto stay in/products/or/gallery/. - Download all images from a list of URLs: paste the list into
urls, tickcreateZip, done. - Download product images from a Shopify or eBay scraper: set
datasetIdto the scraper run's dataset andurlFieldto its image column (e.g.images, lists are expanded),fileNameFieldtoskufor SKU-named files. - Migrate or back up a WooCommerce shop's product photos (move to Shopify, feed a marketplace, refresh a catalogue): put the store or category URL in
wooStoreUrls, setwooFileNames: "sku". - Download photos from Google Maps / Instagram / Pinterest scraper results: use the dataset plus the field that holds the image URL(s).
- Download a shared Google Drive folder as a ZIP (photo shoots, client deliverables, datasets): put the folder link in
driveFolderUrls. - Unpack a shared Dropbox folder into single files (photo shoots, supplier image packs, client deliverables): put the folder link in
dropboxFolderUrls. - Download PDFs in bulk (invoices, reports, spec sheets): any file type works; nothing is converted.
- Convert a CSV/Google Sheet column of URLs into a ZIP: paste the column as a list.
- Call it from Python, Node, n8n, Make or Zapier: see the API section.
Support, reliability and feature requests
- Failed downloads are free.
- Every release is tested on real public URLs; the one-click example works.
- Issues answered within 2 business days via the Actor Issues tab.
- Breaking input or price changes are announced in this README first.
Built by GPT Shop Ltd with AI-assisted development; every release is reviewed and tested.
More tools from GPT Shop Ltd
App Reviews Scraper (Google Play & App Store) · Dataset Transformer · Sitemap URL Extractor · PDF to Markdown · Image to Text OCR · HTTP Request Sender · Multi-ATS Jobs API · all tools
More use cases (FAQ)
- How do I download all images from a website? Put the page links in
pageUrls. The Actor collects every image on each page (largest srcset size, lazy-loaded images, og:image) and zips them. For the whole site, turn oncrawlWebsiteand it follows the site's own links up tomaxCrawlPagespages, saving each image once. It reads static HTML, so images added later by JavaScript are not found. - Is this a Shopify product image downloader? Yes. Export products to CSV and pass the file or Google Sheet link as
csvUrl; theImage Srccolumn is detected. - How do I download all images from a list of URLs at once? Paste the URLs, or point the Actor at a dataset from another scraper. Every file goes to a key-value store with a public download link.
- Can I bulk download PDFs for AI/RAG pipelines? Yes. Chain it with PDF to Markdown.
- Does it work with Make, Zapier or n8n? Yes. Trigger it through the Apify API and read the output dataset.
Done-for-you
Need this run for you or customised? Done-for-you data from £49: https://tools.gptshopltd.com/done-for-you-scraper/