HEIC to JPG Converter: iPhone Photos in Bulk
Pricing
from $3.20 / 1,000 photo converteds
HEIC to JPG Converter: iPhone Photos in Bulk
Convert HEIC and HEIF photos from iPhone and iPad to JPEG, PNG, WebP or AVIF in bulk. Resize to presets, compress to a quality or file size target, and strip GPS and EXIF data. Returns file links and sizes. No upload to outside services.
Pricing
from $3.20 / 1,000 photo converteds
Rating
0.0
(0)
Developer
Malik Said
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
HEIC to JPG Converter: iPhone Photos to JPEG, PNG, WebP
HEIC to JPG Converter turns HEIC and HEIF photos from iPhone and iPad into JPEG, PNG, WebP or AVIF in one run. It can also resize them to web, product or social media sizes and compress them to a quality or file size target. GPS location and other EXIF data are removed. You get a download link for every converted file and one dataset row per photo.
What it does
- Converts HEIC and HEIF photos (iPhone, iPad, many Android phones and cameras) to JPEG, PNG, WebP or AVIF.
- Handles the standard 12 MP and 24 MP phone photos, and files with several images inside (bursts, edits). The first image is used.
- Keeps the photo upright. The decoder applies the rotation and mirroring stored in the file.
- Also converts JPEG, PNG, WebP, AVIF, GIF and TIFF files in the same run.
- Resizes to presets: thumbnail, web, product square, Instagram, story, link preview and 16:9, or to your own size.
- Compresses to a quality from 1 to 100, or to a maximum file size in kilobytes.
- Removes GPS location, camera details and other metadata. The row says whether the original had GPS data, but never saves the position.
Decoding runs inside the container with libheif and sharp. Your photos go to no outside service.
Input: photo URLs or your own files
You can give photos in three ways:
- HEIC or image URLs. Paste links, one per line. The Actor reads robots.txt on each host and skips files it does not allow.
- Key-value store. Upload HEIC files to one of your Apify key-value stores and pick it in the input. The Actor only reads that store.
- Dataset. Pick a dataset with photo links, for example from a scraper, and name the field that holds the link (default
imageUrl). The Actor only reads the dataset.
With no input, the Actor converts one built-in sample HEIC photo, so a test run always works.
How to convert HEIC to JPG in bulk
- Paste your HEIC links in HEIC or image URLs, or pick a key-value store with your files.
- Pick the Output format. JPEG opens everywhere.
- Optional: pick a Resize preset, or set a Maximum file size.
- Click Start.
- Open the Converted files tab, or use the
outputUrllink in each dataset row.
Output
Each converted file is saved in the run's key-value store. Each photo also gets one dataset row.
| Field | Meaning |
|---|---|
status | ok or failed |
error | Why the photo failed. Null when it worked |
source | url, keyValueStore or sample |
imageUrl / keyValueStoreKey | Where the photo came from |
inputFormat, inputWidth, inputHeight, inputBytes | The photo before conversion. HEIC and HEIF show as heif |
outputFormat, outputWidth, outputHeight, outputBytes | The file after conversion |
bytesSaved, savedPercent | Size change. Negative when the new file is larger, which is normal for HEIC to JPEG |
quality | Quality used for JPEG, WebP or AVIF |
targetKilobytes, targetMet | The size target and whether the file fits it |
hadExif, hadGps | Whether the input had EXIF data and a GPS position |
metadataStripped | Whether metadata was removed from the output |
outputKey, outputUrl | Key and download link of the converted file |
Turn on One ZIP with all photos to also get one ZIP file with every converted photo. The ZIP is free. Its link is in the run's OUTPUT record (zipUrl) and in the status message. One ZIP holds up to 1,000 photos or 2 GB; photos past that stay available through their own links.
Sample record from a local test run (a 24 MP HEIC photo of NASA's "The Blue Marble", public domain, converted to JPEG):
{"status": "ok","source": "keyValueStore","keyValueStoreKey": "p24","inputFormat": "heif","inputWidth": 5712,"inputHeight": 4284,"inputBytes": 1680702,"outputFormat": "jpeg","outputWidth": 5712,"outputHeight": 4284,"outputBytes": 2649119,"bytesSaved": -968417,"savedPercent": -57.6,"quality": 90,"resizePreset": "none","hadExif": true,"hadGps": false,"metadataStripped": true,"outputKey": "p24-8a5778f0.jpg","contentType": "image/jpeg","processingMs": 2809}
The record has more fields, such as id, outputUrl and scrapedAt. Fields that do not apply are null.
Resize presets
| Preset | Size | How it fits |
|---|---|---|
| Thumbnail | 300 x 300 | Fits inside, keeps proportions |
| Web medium | 1280 wide | Fits inside |
| Web large | 1920 wide | Fits inside |
| Product square | 1000 x 1000 | Whole image on a square background |
| Product large | 2000 x 2000 | Whole image on a square background |
| Instagram square | 1080 x 1080 | Fills the frame, trims the edges |
| Instagram portrait | 1080 x 1350 | Fills the frame, trims the edges |
| Story | 1080 x 1920 | Fills the frame, trims the edges |
| Link preview | 1200 x 630 | Fills the frame, trims the edges |
| Wide 16:9 | 1600 x 900 | Fills the frame, trims the edges |
| Custom size | Your width and height | Your choice of fit |
Input options
| Option | Default | Meaning |
|---|---|---|
| HEIC or image URLs | None (sample photo) | Links to the photos |
| Key-value store | None | Your store with HEIC or image files |
| Dataset with photo links | None | A dataset from another run. Links come from Dataset field with the link (default imageUrl) |
| Record keys | All | Only these records of the store |
| Output format | JPEG | JPEG, PNG, WebP or AVIF |
| Quality | 90 | 1 to 100 for JPEG, WebP and AVIF |
| Lossless | Off | Exact pixels for WebP and AVIF |
| Maximum file size (KB) | 0 (none) | Lowers quality until the file fits, down to 20 |
| Resize preset | No resize | See the table above |
| Strip metadata | On | Removes EXIF, GPS, XMP and IPTC data. HEIC output always has none |
| Maximum input file size | 25 MB | The limit is 50 MB |
| Maximum image size | 40 megapixels | Larger images are skipped |
| Maximum images | 100 | Set 0 for no limit. One run converts at most 5,000 |
| One ZIP with all photos | Off | Also save one ZIP with every converted photo. Free |
Limits and memory
- Runs use 512 MB. HEIC photos up to 30 megapixels are converted. That covers 12 MP and 24 MP phone photos. A 48 MP photo is skipped with a clear message. Pick a resize preset and JPEG, PNG or WebP output for large files.
- AVIF output at full size needs more memory. For photos above about 15 megapixels, pick a resize preset with AVIF.
- Photos are converted one at a time. In tests, a 12 MP photo took about 1.5 seconds and a 24 MP photo about 3 seconds.
- Failed photos are saved with the reason and are not charged.
Pricing
You pay per converted photo, plus a small start fee per run. Failed photos are free. See the Pricing tab for current prices.
Privacy and your files
You choose the photos. You must have the right to process them. Photos are processed in the run and stored only in your own Apify storage. GPS positions are never written to the dataset.
FAQ
Why is my JPEG larger than the HEIC file? HEIC compresses better than JPEG. A JPEG at quality 90 is often 30 to 60 percent larger. Lower the quality, or set a maximum file size.
Can I keep the EXIF data? Not for HEIC input. The decoder returns pixels only, so HEIC output never carries EXIF or GPS data. For JPEG, PNG and other inputs, turn off Strip metadata to keep it.
Does it work with Live Photos? It converts the still photo. The video part of a Live Photo is a separate file and is not converted.
Can I call it from an AI agent or an automation? Yes. Call the Actor through the Apify API, MCP, Make, n8n or Zapier with a list of URLs, then read the dataset or the files.