How to Transfer iCloud Photos to AWS S3: Three Methods That Actually Work
Want to move your iCloud Photos library into AWS S3? This guide covers three approaches—manual browser export, a Python SDK upload script, and cloud-to-cloud transfer with CloudsLinker—so you can pick what fits your workflow.
Introduction
If you've been storing photos in iCloud for years, at some point you might want them somewhere more programmable—like AWS S3. Maybe you're building a media pipeline, archiving originals for a project, or just tired of paying Apple's storage rates for files you rarely open on an Apple device. The catch is that iCloud Photos doesn't expose a traditional file system, which makes bulk exporting more awkward than it looks. Here are three approaches that actually work, ranging from completely manual to fully automated.
iCloud Photos keeps your entire photo library synced across iPhone, iPad, and Mac. It's beautifully integrated into the Apple ecosystem — but storage can become expensive quickly.
- Only 5 GB free shared across backups, photos, and files.
- Paid iCloud+ tiers scale up to 12 TB.
- Optimized storage keeps full-resolution photos in the cloud.
- Tight Apple lock-in — best experience happens inside Apple devices.
Many users love the seamless syncing — until their photo library crosses 200 GB or 500 GB and monthly costs start stacking up.
Amazon S3 is object storage built for durability and scale — popular for archiving, backups, and serving assets in production systems.
- Pay-as-you-go pricing — no fixed monthly plan, billed by GB stored and requests made.
- Storage classes like S3 Glacier let you archive rarely-accessed photos at very low cost.
- Bucket-level access control and fine-grained IAM permissions.
- No native photo browsing UI — you'll need the AWS Console, CLI, or a third-party tool to view files.
S3 is a natural fit if you're archiving photos as part of a larger workflow, want programmatic access, or need durable long-term storage at scale. It's less convenient for casual day-to-day photo browsing compared to consumer cloud services.
For most people, iCloud Photos is fine — until it isn't. Once a library hits a few hundred gigabytes, the iCloud+ monthly fee starts feeling steep, especially for photos that mostly just sit there and never get opened on a Mac or iPhone.
One use case that comes up often: developers or photographers who want their entire archive accessible via API or CLI — maybe to run a processing pipeline, generate thumbnails, or feed files into another service. S3 makes that straightforward. You can organize photos into prefixes (which work like folders), set lifecycle rules to auto-move older files to Glacier, and control exactly who can access what via IAM policies. None of that is possible with iCloud Photos.
- Archiving at scale: S3 Glacier Instant Retrieval can store photos for a fraction of standard iCloud+ pricing.
- Programmatic access: Use boto3, the AWS CLI, or any S3-compatible tool to work with your files.
- No ecosystem lock-in: S3 buckets are accessible from any platform, any language.
- Flexible storage classes: Move rarely-accessed photos to cheaper tiers automatically with lifecycle rules.
Worth noting: S3 doesn't have a photo browsing interface the way iCloud or Google Photos does. If you still want to casually scroll through memories, you'll need to keep a copy somewhere consumer-friendly or use a front-end tool on top of S3. It's storage infrastructure, not a photo album app.
Method 1: Download from iCloud Photos, Then Upload to AWS S3 (Browser)
The most manual option — but it requires no code and no third-party tools beyond what you already have.
Log in to iCloud Photos on the web, select your images or albums, download them to your computer, and then upload them into your S3 bucket via the AWS S3 Console.
- Works for small libraries or one-off exports
- No scripts or CLI setup required
- Full control over what gets transferred
The downside is the same as with any download-then-reupload workflow: if your library is 300 GB or more, you're consuming your local bandwidth twice and spending a lot of time babysitting the process. The AWS Console also has file size limits for browser uploads (up to 160 GB per object via multipart, but managing that manually is tedious).
For small batches under 20 GB, this is perfectly fine. For anything larger, the next method is worth the setup time.
Method 2: Use icloud-photos-downloader + AWS S3 Python SDK (boto3)
If you're comfortable running a few terminal commands, this approach gives you much more control — especially for large libraries.
The idea is to use icloud-photos-downloader (a well-maintained open-source CLI tool) to pull your photos to local storage, then use a Python script with boto3 (the official AWS SDK for Python) to upload them into your S3 bucket.
Here's the general workflow:
- Install icloud-photos-downloader:
pip install icloudpd - Run
icloudpd --directory ./photos --username [email protected]and authenticate with your Apple ID and 2FA code. - Once downloaded, use a boto3 script to upload the local folder to your S3 bucket:
import boto3
import os
s3 = boto3.client(
's3',
aws_access_key_id='YOUR_ACCESS_KEY_ID',
aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
region_name='us-east-1' # replace with your bucket region
)
bucket_name = 'your-bucket-name'
local_folder = './photos'
for root, dirs, files in os.walk(local_folder):
for filename in files:
local_path = os.path.join(root, filename)
s3_key = os.path.relpath(local_path, local_folder)
s3.upload_file(local_path, bucket_name, s3_key)
print(f"Uploaded: {s3_key}")
Before running the script, make sure your AWS credentials are set up correctly. You'll need an IAM user with S3 write permissions, and you'll need to generate an Access Key ID and Secret Access Key from the AWS Console under IAM → Security Credentials. Keep these out of version control.
This method works well for large libraries because it's resumable — if something fails midway, you can re-run the script and only upload what's missing (with a bit of added logic to check existing keys). The main cost is disk space: you'll need enough local storage to hold the downloaded photos before uploading.
Method 3: Move Your iCloud Photos to AWS S3 in the Cloud (No Downloads)
Why Some Users Skip the Download Step Entirely
If your photo library is already hundreds of gigabytes, downloading everything to your laptop just to upload it again feels unnecessary. Using CloudsLinker allows the transfer to run directly between iCloud Photos and AWS S3 — entirely online, without touching your local machine.
Step 1: Add iCloud Photos
After signing in, click Add Cloud and select iCloud Photos. Log in with your Apple ID and complete two-factor authentication if required.
Once connected, your albums and photo folders appear inside the dashboard, similar to browsing them on iCloud.com.
Step 2: Connect AWS S3
Next, choose AWS S3 from the cloud list. Unlike OAuth-based services, S3 uses key-based authentication. You'll need to enter your Access Key ID and Secret Access Key from your AWS IAM credentials, then select the region where your bucket is located.
After the credentials are verified, your S3 buckets will appear in the CloudsLinker dashboard alongside iCloud Photos.
Step 3: Configure and Start the Transfer
Open the Transfer section. Select iCloud Photos as the source and choose your AWS S3 bucket as the destination.
You can select specific albums rather than migrating your entire library at once. For large collections, transferring in stages is usually more manageable — start with older archived albums, verify they arrived correctly, then continue.
Step 4: Monitor Progress
The active task will appear in your Task List. You can check real-time progress, pause if needed, and review logs in case any files require attention.
Comparing the 3 Ways to Move Photos from iCloud Photos to AWS S3
There's no single "best" way to move your iCloud Photos library to S3. It mostly depends on how much you're moving, whether you're comfortable with a terminal, and how much of the process you want to automate. If you're trying to archive photos long-term or plug them into a larger AWS workflow, the goal is usually: get the files into S3 reliably without corrupting anything or losing metadata. Here's a quick side-by-side of the three approaches.
| Method | Ease of Use | Speed | Best For | Uses Local Bandwidth | Skill Level |
|---|---|---|---|---|---|
| Web Browser (Download → S3 Console Upload) | ★★★★★ | ★★★☆☆ | Small batches, one-off exports | Yes (download + upload) | Beginner |
| icloud-photos-downloader + boto3 Script | ★★★☆☆ | ★★★★☆ | Large libraries, scripted/automated workflows | Yes (download + upload) | Intermediate |
| CloudsLinker (Cloud-to-Cloud) | ★★★★★ | ★★★★★ | Large libraries, hands-off transfers | No | Beginner |
If you only need to move a handful of albums, the browser method gets the job done without any setup. If you want repeatable, scriptable control over the process — or you plan to run post-processing on the files — the icloud-photos-downloader + boto3 approach is worth the extra effort. But once you're dealing with a library measured in hundreds of gigabytes and you just want the files in S3 without tying up your machine for days, CloudsLinker is the most straightforward path.
iCloud Photos doesn't behave like a normal folder of files, and S3 has its own quirks around permissions and credentials. A little preparation here saves a lot of troubleshooting later.
- Transfer by album, not individual photos: selecting whole albums as your source unit is faster and less error-prone than trying to pick individual images, especially for large libraries.
- Web downloads have selection limits: on iCloud Photos web, Apple limits how many items you can select at once. If you're exporting a lot, do it in chunks or album-by-album.
- Keep your AWS credentials secure: if you're using the boto3 method, don't hardcode your Access Key ID and Secret Access Key in the script. Use environment variables or AWS credential profiles instead. And use an IAM user with only S3 write permissions — not your root account.
- Watch out for HEIC and Live Photos: HEIC files land in S3 fine, but if you ever need to serve them or process them downstream, check your toolchain handles that format. Some pipelines expect JPEG. Consider converting after migration if compatibility matters.
-
Check your S3 bucket region and permissions before starting:
make sure the bucket exists in the region you intend, and that your IAM
credentials have
s3:PutObjectpermission on that bucket. Mismatched regions can cause confusing errors. - Consider your S3 storage class upfront: if these photos are going into long-term cold storage, setting a lifecycle rule to transition to S3 Glacier after a few days can significantly reduce costs. Worth planning before you upload rather than after.
- Use IAM roles and least-privilege access: avoid using your AWS root account credentials for transfers. Create a dedicated IAM user, grant only the permissions needed, and rotate or delete the access keys once the migration is complete.
The most reliable transfer strategy: move one or two albums first, verify the files landed correctly in S3 (check count, spot-check a few files), then scale up. It's a slower start but it avoids discovering a problem after you've already moved everything and deleted your iCloud copies.
Frequently Asked Questions
s3:PutObject access on your target bucket.
Conclusion
Getting photos out of iCloud and into S3 takes a bit more setup than moving between consumer cloud services—but it's very doable. Small libraries can be handled with a browser and the AWS console. If you're comfortable with Python, icloud-photos-downloader plus boto3 gives you precise control. And if you'd rather skip the local step entirely, CloudsLinker handles the cloud-to-cloud transfer without touching your hard drive. Whichever route you take, run a spot-check on a few files after the transfer before deleting anything from iCloud.
Online Storage Services Supported by CloudsLinker
Transfer data between over 48 cloud services with CloudsLinker
Didn' t find your cloud service? Be free to contact: [email protected]
Further Reading
Effortless FTP connect to google drive: Transfer Files in 3 Easy Ways
Learn More >
Google Photos to OneDrive: 3 Innovative Transfer Strategies
Learn More >
Google Photos to Proton Drive: 3 Effective Transfer Techniques
Learn More >