Bulk Image Converter & Compressor: WebP, AVIF, HEIC
Pricing
from $2.10 / 1,000 image conversions
Bulk Image Converter & Compressor: WebP, AVIF, HEIC
Bulk image optimizer and converter: compress PNG, JPG or HEIC to WebP or AVIF, set quality or a target size in KB, resize, strip EXIF and GPS. $0.003 per image, failed images free. Takes links, uploads or a dataset. Returns file links and percent saved. MCP-ready, no login.
Pricing
from $2.10 / 1,000 image conversions
Rating
0.0
(0)
Developer
Don Mangu
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
11
Monthly active users
2 days ago
Last modified
Categories
Share
Image Converter and Compressor
Convert image to WebP in bulk, or to AVIF, JPEG or PNG, and compress them to a quality or a target file size, from links or uploads.
Bulk Image Compressor & Converter turns your images into smaller WebP, AVIF, JPEG or PNG files in bulk. Give it image links, uploaded files or base64 data, pick a format and a quality, and get back a link to each new file with its size before and after and the percent saved. You can also set a target size in KB, a maximum width and height, and remove camera metadata such as GPS location. Failed images are free. Use it as a bulk image compressor API: send image links in one request and read the new file links and percent saved from the dataset.
What does the bulk image compressor and converter do?
- Converts JPEG, PNG, WebP, AVIF, HEIC, GIF, TIFF, BMP and ICO files to WebP, AVIF, JPEG or PNG, or compresses them in the same format.
- Compresses with a quality setting from 1 to 100, or with a target size: quality is lowered until each file fits, and the image is made smaller only when quality alone cannot get there.
- Resizes to a maximum width and height, keeping the aspect ratio. Small images are never enlarged.
- Strips metadata (EXIF and XMP: camera, date, GPS) by default, while keeping the color profile so colors look the same.
- Rotates photos upright from the camera orientation tag.
- Keeps transparency in WebP, AVIF and PNG, and fills it with a color you choose for JPEG.
- Keeps animations from GIF, WebP, PNG and AVIF when the output is WebP, AVIF or PNG.
- Returns a dataset row per image with the file link, format, width, height, bytes before and after, percent saved and the quality used, plus an optional base64 copy for tools that cannot open links.
Convert PNG or JPG to WebP, resize and strip EXIF in bulk
If you have more than a handful of files, this Actor works as a pay-per-image alternative to TinyPNG and Squoosh. It is not affiliated with either. Paste links to PNG or JPG files, pick WebP or AVIF, and get back smaller files with the percent saved for each. Set a maximum width and height to resize, or a target size in KB to fit an upload limit. Metadata is removed by default, so EXIF and GPS data do not travel with the file. It costs $0.003 per image on the Free plan, and failed images are free.
Why convert images to WebP or AVIF?
Smaller images load faster, which helps page speed scores, mobile users and hosting bills. WebP files are often 25% to 80% smaller than JPEG or PNG at similar visual quality, and AVIF is often smaller again. Online shops, blogs, marketing teams and developers use this Actor to prepare product photos, banners and screenshots for the web, to meet upload limits of marketplaces and forms, and to clean location data out of photos before sharing them.
How to convert image to WebP and AVIF in bulk
- Add your images: paste direct image links in Image URLs, upload files in Upload images, or paste base64 strings or data URIs in Image data (base64).
- Choose the Output format. WebP is a safe default for websites.
- Set Quality (80 is a good start), or set Target size in KB if you need files under a limit.
- Optionally set Maximum width and Maximum height to shrink large photos.
- Click Start. When the run finishes, open the Converted images table and click a link to download each file, or read the dataset through the API.
How to feed it images
| Source | Input field | Use it when |
|---|---|---|
| List of links | imageUrls | You have direct image links. |
| Dataset of another Actor | datasetId and datasetField | A scraper already saved image links. Default field is imageUrl. |
| Upload | imageUploads | The files are on your computer. |
| Base64 or data URI | imageBase64 | A tool or script has the bytes but no link. |
The link must open the image file itself. A page that shows the image, such as a Google Drive share page, is not a direct link and the row will fail. Patterns that give the file:
- GitHub:
https://raw.githubusercontent.com/user/repo/main/image.jpg - Your own site or CDN: the full address of the file, ending in .jpg, .png, .webp or another image extension.
How much does it cost to compress images?
This Actor uses pay-per-event pricing. You pay for each image that was converted and saved, and nothing for images that fail.
| Plan | Price per image |
|---|---|
| Free | $0.003 |
| Bronze | $0.0027 |
| Silver | $0.0024 |
| Gold, Platinum, Diamond | $0.0021 |
One image is counted per started 16 megapixels (4096 x 4096), so almost every photo counts once. A very large 50 MP scan counts as 3.
Example: converting 1,000 product photos to WebP on the Free plan costs 1,000 x $0.003 = $3.00, plus the small Actor start fee set by Apify. On a Silver plan the same run costs $2.40. You can set a maximum cost per run in the run options, and the Actor stops cleanly when it is reached.
Selected prices
Price per image as listed on 2026-10-03, before any free monthly allowance. Other Actors on the Store charge less than this one, for example $0.002 per image.
| Option | Price per image |
|---|---|
| This Actor | $0.003 on Free, down to $0.0021 on Gold and above |
| TinyPNG API | $0.009 after 500 free per month |
| Another Store Actor (image compressor) | $0.015 plus compute |
| Another Store Actor (image converter) | $0.01 plus compute |
| Another Store Actor (bulk compressor) | $0.0009 |
| Another Store Actor (image optimizer) | $0.002 |
Prices change. Check each page before you decide.
Input example
{"imageUrls": ["https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/flower.jpg"],"outputFormat": "webp","quality": 80,"maxWidth": 1600,"targetSizeKb": 200}
Output example
{"inputIndex": 1,"imageUrl": "https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/flower.jpg","status": "ok","outputUrl": "https://api.apify.com/v2/key-value-stores/.../records/converted-0001-flower.webp","outputFormat": "webp","outputWidth": 480,"outputHeight": 360,"inputSizeBytes": 32764,"outputSizeBytes": 18620,"savedPercent": 43.2,"qualityUsed": 80,"targetMet": true,"billedImages": 1,"error": null}
The files themselves are in the run's key-value store under keys that start with converted-. A STATS record sums up the run: images done, statuses, bytes before and after, and bytes saved.
Use the API
Start the Actor and get the result rows in one call. Replace TOKEN with your Apify API token.
curl -X POST "https://api.apify.com/v2/acts/conserving_celerytop~image-converter-compressor/run-sync-get-dataset-items?token=TOKEN" \-H "Content-Type: application/json" \-d '{"imageUrls": ["https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/flower.jpg"], "outputFormat": "webp", "quality": 80}'
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'TOKEN' });const run = await client.actor('conserving_celerytop/image-converter-compressor').call({imageUrls: ['https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/flower.jpg'],outputFormat: 'webp',quality: 80,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].outputUrl, items[0].savedPercent);
Python (pip install -U apify-client first):
from apify_client import ApifyClientclient = ApifyClient("TOKEN")run = client.actor("conserving_celerytop/image-converter-compressor").call(run_input={"imageUrls": ["https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/flower.jpg"],"outputFormat": "webp","quality": 80,})items = client.dataset(run.default_dataset_id).list_items().itemsprint(items[0]["outputUrl"], items[0]["savedPercent"])
Use with AI agents (MCP)
The Apify MCP server can expose this Actor as a tool. Add it to your MCP client config. Your client opens a sign-in window the first time.
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=conserving_celerytop/image-converter-compressor"}}}
If your client cannot use the sign-in flow, add "headers": {"Authorization": "Bearer <APIFY_TOKEN>"} next to url. Then ask for example: "Convert these three image links to WebP at quality 80." For files without a link, use imageBase64 and returnBase64.
Resize to an exact size, convert a dataset, download a ZIP
Exact size. Set Maximum width and Maximum height, then pick a Resize mode. "Fit inside" keeps the ratio and never enlarges. "Fill exactly" crops the overflow from the center, so every image has exactly the size you set, for example 400 x 400 thumbnails. "Stretch to the exact size" ignores the ratio. Fill and Stretch need both values and also enlarge small images. Animated images always use Fit inside.
Images from another Actor. Pick a dataset in "Dataset with image links" and set "Field with the image link" (default imageUrl). The links are added to your Image URLs list. It works with the dataset of any scraper that stores image links, and a field can hold one link or a list of links.
One ZIP. Switch on "Create a ZIP" and the run also saves converted-images.zip in the key-value store with all converted files inside. Open the run, go to Storage, then Key-value store, and download it. Above 300 MB the ZIP is skipped and the single files stay available.
Use cases
Online shops (Shopify, WooCommerce). Export your product image links, convert them to WebP and keep each file under 200 KB. For square thumbnails, set resizeMode to cover with equal maxWidth and maxHeight.
{ "imageUrls": ["https://example.com/product-1.jpg"], "outputFormat": "webp", "maxWidth": 1600, "targetSizeKb": 200 }
WordPress and blogs. Export the links from your media library or from a scraper's dataset, convert them, and download one ZIP. The Actor does not write back to your site, so you upload the new files yourself.
{ "datasetId": "YOUR_DATASET_ID", "datasetField": "imageUrl", "outputFormat": "webp", "quality": 80, "maxWidth": 2000, "createZip": true }
iPhone HEIC photos. Turn HEIC photos into JPEG that opens everywhere. Location data is removed unless you set keepMetadata to true.
{ "imageUrls": ["https://example.com/IMG_0001.HEIC"], "outputFormat": "jpeg", "quality": 85 }
Tips
- For photos on websites, WebP at quality 75 to 85 is a good balance. AVIF gives smaller files for the same look but takes longer to encode.
- PNG output is lossless, so quality does not change it. Use WebP with Lossless WebP and AVIF for graphics and screenshots that need exact pixels at a smaller size.
- If a new file comes out larger than the source, the row says so. This happens when a small, already compressed JPEG is saved at high quality. Lower the quality or pick WebP.
- Base64 output is limited to files up to 2 MB; larger files are always available by link.
Bulk lists
Use a long list of image links from an Apify Dataset or from a file. To use a Dataset, pick it under Dataset with image links and write the name of its field under Field with the image link. To use a file, paste the web address of a public .txt, .csv or .json file under List file URL. Put one image link on each line. A .csv file uses its first column. A header row is skipped. The file can be up to 10 MB. Links from the Dataset and the file are added to the ones typed under Image URLs, and duplicates are removed. The price per image does not change.
Example: 500 links from a file on the Free plan cost 500 x $0.003 = $1.50 (an example, not a measured value).
Related Actors
- AI Image Upscaler 4x: Use it to enlarge images 2x, 3x or 4x with AI.
- Image to Text OCR: Use it to extract text from receipts, screenshots, scans and photos.
- Website Screenshot API: Use it to capture full-page screenshots or PDFs of a list of URLs.
FAQ
Is it legal to use this Actor? It only downloads the image links you give it and processes files you upload. Convert only images you own or have the right to use. The Actor reads each host's robots.txt, uses a clear user agent with a contact address, and does not get around logins, blocks or rate limits.
Which formats can I upload? JPEG, PNG, WebP, AVIF, HEIC and HEIF (iPhone photos), GIF, TIFF, BMP and ICO. SVG and PDF are not supported yet.
Can I convert HEIC to JPG? Yes. Put the links to your HEIC files in the list and choose JPEG as the output format. HEIC files are read, never written, so with the format set to Same as input a HEIC photo comes out as JPEG.
Are my images stored? The new files stay in your own run storage, which follows your Apify data retention. Nothing is sent anywhere else.
What are the limits? Up to 10,000 images per run, 50 MB per file and 100 megapixels per image. Animations up to 300 frames.
Why did an image fail? The status and error fields explain it, for example not_found, blocked, robots_disallowed or corrupt_image. Failed images are not billed. If you think the Actor got it wrong, open an issue with the link and we will look at it.
How do I make every image exactly 400 x 400? Set Maximum width and Maximum height to 400 and choose "Fill exactly" as the Resize mode. Each image is scaled to cover the square and the overflow is cropped from the center.
Can I download all converted images as one ZIP? Yes. Turn on "Create a ZIP". The file converted-images.zip appears in the run's key-value store next to the converted images.
Can I convert the images from another scraper's results? Yes. Pick that run's dataset in "Dataset with image links" and enter the name of the field that holds the image link. The Actor reads the links and converts them like any other Image URLs.