Bulk Image Resizer: Resize, Crop, Convert & Compress avatar

Bulk Image Resizer: Resize, Crop, Convert & Compress

Pricing

from $1.50 / 1,000 image files

Go to Apify Store
Bulk Image Resizer: Resize, Crop, Convert & Compress

Bulk Image Resizer: Resize, Crop, Convert & Compress

Resize, crop, pad, convert and compress images in bulk: several sizes per image, Amazon/Shopify/Etsy/Instagram/YouTube/favicon presets, max file size in KB, JPEG/PNG/WebP/AVIF output, HEIC input, smart crop, EXIF strip. Links, Drive, Dropbox, uploads; ZIP. Pay per image.

Pricing

from $1.50 / 1,000 image files

Rating

0.0

(0)

Developer

Alexander Daskalov

Alexander Daskalov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Security

Limited permissions

Share

Bulk Image Resizer: Resize, Crop, Convert & Compress Images in Bulk

Resize hundreds of images in one run: several sizes per image (thumbnail + web + retina), ready-made sizes for Amazon, Shopify, Etsy, eBay, Instagram, YouTube and favicons, a maximum file size in KB, and JPEG, PNG, WebP or AVIF output. iPhone HEIC photos are read too. Paste links (or Google Drive / Dropbox share links), upload files, or chain it after any scraper. Every file lands in the run's key-value store with a public link, plus one images.zip.

  • 📐 Several sizes per image: thumb=300x300:cover, web=1200, retina=2400, 50%... one file per size.
  • 🛒 Marketplace and social presets: Amazon 2000×2000, Shopify 2048×2048, Etsy 3000×2250, eBay 1600×1600 (white padding), Instagram square / portrait / story, YouTube thumbnail, Open Graph share image, responsive web srcset, favicon set.
  • 🗜️ Max file size target: quality is lowered step by step, then the picture is made smaller, until each file fits (for example under 100 KB). Each record says whether the target was met.
  • ✂️ Fit modes: contain, cover (crop with centre, top, bottom, left, right or smart detail-aware position), pad with any colour (exact box), stretch. Never enlarges unless you allow it.
  • 🔄 Formats: JPEG (progressive), PNG, WebP, AVIF out; JPEG, PNG, WebP, AVIF, HEIC/HEIF, GIF, TIFF, BMP in.
  • 🎨 Colour-correct: photos are turned upright by their EXIF orientation; wide-gamut photos (iPhone Display P3) are converted to sRGB before metadata is stripped, so colours don't shift. Or keep EXIF and the colour profile.
  • 📦 Output: public links per file, images.zip with everything, and one dataset row per image.

What can you do with it?

  • E-commerce: turn supplier photos into exact marketplace sizes on a white background (Amazon, Shopify, Etsy, eBay).
  • Websites: make srcset sets (480/960/1600/2400 px WebP) or thumbnails + full-size images, and shrink them under a KB limit for page speed.
  • Social media: crop photos to Instagram square, portrait or story, YouTube thumbnails (under 2 MB) and link previews (1200×630).
  • iPhone photos: convert HEIC to JPEG or WebP in bulk.
  • Pipelines and AI agents: chain after a product, Instagram or Google Maps scraper with datasetId, or call it from an agent through MCP.
InputExampleNotes
Direct image linkhttps://example.com/photos/shoe.jpgJPG, PNG, WebP, AVIF, HEIC/HEIF, GIF, TIFF, BMP
Google Drive filehttps://drive.google.com/file/d/.../viewshared as "Anyone with the link"
Dropbox filehttps://www.dropbox.com/s/.../photo.png?dl=0public share link
Uploaded file"Or upload images" field in the Consolestored in your key-value store
Apify datasetdatasetId + datasetField (e.g. images[*].url)chain after any scraper

Folders and pages that need a login are not supported: link the files themselves. Animated GIF/WebP: the first frame is used. Up to 50 MB per file.

How much does it cost?

You pay per output image file. One image resized to 3 sizes = 3 files. Dead links, private files and unreadable files are never charged.

EventFree / BronzeSilverGold / Platinum / Diamond
Image file (image)$0.0025$0.002$0.0015
Actor start (apify-actor-start)$0.00005 / run$0.00005 / run$0.00005 / run

Examples: 1,000 product photos to one Amazon size = 1,000 files = $2.50 (down to $1.50). 100 photos × 3 web sizes = 300 files = $0.75. Set maxImages or a maximum cost per run to cap the spend.

How fast is it?

Measured on Apify at the default 1 GB of memory, with 12–18 megapixel camera photos (4080×3072 and 5184×3456 JPEG):

Job10 photosPer photo
One 1200 px WebP each7.6 s rununder 1 s
Three sizes each (300 cover, 1200, 2400 WebP)20 s run~2 s
Amazon 2000×2000 JPEG on white6.9 s rununder 1 s
1600 px WebP under 100 KB (quality search)12 s run~1 s

Downloads run four at a time while the previous photo is processed. At the default 1 GB an image can have up to 52 megapixels (32 with transparency); a bigger one is skipped uncharged with a "run with more memory" note. Each extra GB allows ~85 megapixels more, up to 178 megapixels. All sizes of one image together may add up to twice that.

Presets

PresetOutputFit
amazon2000×2000 JPEG q90pad, white
shopify2048×2048 JPEG q85pad, white
etsy3000×2250 JPEG q90pad, white
ebay1600×1600 JPEG q90pad, white
instagram-square1080×1080 JPEG q90cover, smart crop
instagram-portrait1080×1350 JPEG q90cover, smart crop
instagram-story1080×1920 JPEG q90cover, smart crop
youtube-thumbnail1280×720 JPEG q90, under 2 MBcover, smart crop
social-share1200×630 JPEG q85 (Open Graph, X, LinkedIn)cover, smart crop
web-responsive480, 960, 1600, 2400 px wide WebP q80contain, never enlarged
faviconfavicon.ico (16/32/48) + 180, 192, 512 px PNGpad, transparent

Marketplace and social presets enlarge small images so the box is always exact. A preset replaces the sizes, fit, format, quality and background fields; "Strip metadata" and "ZIP" still apply.

Input

FieldDefaultDescription
imagesImage links, one per line
uploadsUploaded files (Console file upload)
datasetId / datasetFieldurlRead links from a dataset field (imageUrl, images[*].url...)
presetcustomOne of the presets above
sizes["1200"]1200 width, x800 height, 1200x630 box, 50% scale; optional name= and :fit (thumb=300x300:cover)
fitcontaincontain, cover, pad, stretch
cropPositioncentercenter, smart, top, bottom, left, right
backgroundColor#ffffffpadding colour and JPEG background; transparent for PNG/WebP/AVIF
allowUpscalefalseenlarge smaller images
outputFormatsamesame, jpeg, png, webp, avif (same: HEIC → JPEG; GIF, TIFF, BMP → PNG)
quality821–100 for JPEG, WebP, AVIF (AVIF is scaled so the same number looks like JPEG at that quality)
maxFileSizeKbmaximum size of each output file
stripMetadatatrueremove EXIF/GPS (colours converted to sRGB first)
createZiptruesave images.zip with every file
maxImages100input images per run

Example

{
"images": [
"https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/bgremove-product.jpg",
"https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/bgremove-portrait.jpg"
],
"sizes": ["thumb=300x300:cover", "web=1200", "retina=2400"],
"outputFormat": "webp",
"maxFileSizeKb": 300
}

Output

One dataset row per input image; every file is in the key-value store (recordUrl-style public links) and in images.zip.

{
"url": "https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/bgremove-product.jpg",
"source": "direct",
"status": "success",
"fileName": "bgremove-product.jpg",
"inputFormat": "jpeg",
"inputWidth": 1280,
"inputHeight": 1474,
"inputBytes": 655566,
"frames": 1,
"previewUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/0001-bgremove-product-thumb.webp",
"outputCount": 3,
"outputBytes": 412345,
"outputs": [
{"name": "thumb", "key": "0001-bgremove-product-thumb.webp", "url": "https://api.apify.com/v2/key-value-stores/<store>/records/0001-bgremove-product-thumb.webp",
"format": "webp", "width": 300, "height": 300, "bytes": 14210, "quality": 82, "targetMet": null}
],
"processedAt": "2026-11-01T12:00:00+00:00",
"error": null
}

Use the API from code

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("bossless/bulk-image-resizer").call(run_input={
"images": ["https://example.com/shoe.jpg"],
"preset": "amazon",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
for f in item["outputs"] or []:
print(f["url"], f["width"], f["height"], f["bytes"])
curl "https://api.apify.com/v2/acts/bossless~bulk-image-resizer/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"images": ["https://example.com/photo.heic"], "sizes": ["1600"], "outputFormat": "jpeg", "maxFileSizeKb": 400}'

Use it with AI agents (MCP)

Add https://mcp.apify.com?tools=bossless/bulk-image-resizer to Claude, Cursor or any MCP client. The agent passes image links and a preset or sizes, and gets back public links to the resized files.

Ready-made tasks

FAQ

Does it enlarge small images? Not by default: a small image keeps its own size (with pad it is centred on the exact box). Turn on allowUpscale to enlarge. Marketplace and social presets always produce the exact box.

What does "smart" crop do? It keeps the part of the picture with the most detail (edges), which usually holds the subject, instead of always cutting the centre.

Why is my file bigger than the max size? The quality goes down to 30 and the picture is made smaller up to four times; a file that still doesn't fit is delivered with targetMet: false.

Can it remove backgrounds or read EXIF data? Not this actor. Use Background Remover for transparent cutouts and EXIF Metadata Extractor to read camera, GPS and dates.

Are my images private? They are stored in your run's key-value store under your account; the links work for anyone who has them, like other Apify storage links.

Is this an official Amazon, Shopify, Etsy, eBay, Instagram or YouTube tool? No. This is an independent tool and is not affiliated with or endorsed by Amazon, Shopify, Etsy, eBay, Meta/Instagram, Google/YouTube or Apple. The presets follow their published image size guidelines.