Skip to content

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.

About iCloud Photos

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.

About AWS S3

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.

Why Move Photos from iCloud Photos to AWS S3?

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
Upload Photos to AWS S3 via Console

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:

  1. Install icloud-photos-downloader: pip install icloudpd
  2. Run icloudpd --directory ./photos --username [email protected] and authenticate with your Apple ID and 2FA code.
  3. 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}")
icloud-photos-downloader terminal and boto3 S3 upload script

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.

Connect iCloud Photos in CloudsLinker dashboard

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.

Add AWS S3 credentials in CloudsLinker

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.

Transfer configuration from iCloud Photos to AWS S3

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.

Key Tips for a Smooth iCloud Photos to AWS S3 Transfer

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:PutObject permission 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

Answer: iCloud Photos on the web is designed for browsing and downloading, but Apple limits how many photos/videos you can select at once. If you're exporting a lot, use albums and download in batches instead of trying to "select all."

Answer: When you connect iCloud Photos, you sign in with your Apple ID and enter the verification code Apple sends to your trusted device. After that, the connection uses a secure session/token so you don't have to repeatedly re-verify for every transfer.

Answer: You'll need an Access Key ID and Secret Access Key from an IAM user that has S3 write permissions, plus the region where your target bucket lives. Avoid using root account credentials — create a dedicated IAM user with only the permissions needed for this transfer.

Answer: Yes, that's exactly Method 2 in this guide. icloud-photos-downloader handles the iCloud authentication and download, and boto3 handles the S3 upload. You'll need enough local disk space to hold the downloaded photos temporarily, and an IAM user with s3:PutObject access on your target bucket.

Answer: For iCloud Photos, CloudsLinker uses Apple's standard sign-in flow with 2FA — no raw password stored. For AWS S3, you're providing IAM access keys, so use a limited-permission IAM user rather than root credentials. You can delete or rotate those keys from the AWS Console after the transfer is complete.

Answer: Cloud-to-cloud transfer via CloudsLinker avoids the download-then-reupload loop entirely, which is the main bottleneck for large libraries. If you prefer a scripted approach and have local disk space available, icloud-photos-downloader + boto3 also handles large transfers well — just expect the process to take longer due to the local step.

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

OneDrive

OneDrive

Google Drive

Google Drive

Google Photos

Google Photos

Shared Drive

Shared Drive

OneDrive for Business

OneDrive for Business

Dropbox

Dropbox

Box

Box

Mega

Mega

pCloud

pCloud

Yandex

Yandex

ProtonDrive

ProtonDrive

AWS

AWS

GCS

GCS

iDrive

iDrive

Storj

Storj

DigitalOcean

DigitalOcean

Wasabi

Wasabi

1fichier

1fichier

PikPak

PikPak

TeleBox

TeleBox

OpenDrive

OpenDrive

Backblaze B2

Backblaze B2

Fastmail file

Fastmail file

SharePoint

SharePoint

Nextcloud

Nextcloud

ownCloud

ownCloud

Premiumize me

Premiumize me

HiDrive

HiDrive

Put.io

Put.io

Sugar Sync

Sugar Sync

Jottacloud

Jottacloud

Seafile

Seafile

Ftp

Ftp

SFtp

SFtp

NAS

NAS

WebDav

WebDav

4shared

4shared

Icedrive

Icedrive

Cloudflare R2

Cloudflare R2

Scaleway

Scaleway

Doi

Doi

iCloud Drive

iCloud Drive

iCloud Photos

iCloud Photos

FileLU

FileLU

Zoho WorkDrive

Zoho WorkDrive

Telia Cloud / Sky

Telia Cloud / Sky

Drime

Drime

Filen

Filen

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

Explore three efficient methods to connect Google Drive with FTP, enabling seamless file transfers. This comprehensive guide provides detailed instructions, benefits, and tips for effective file management.

Learn More >

Google Photos to OneDrive: 3 Innovative Transfer Strategies

Learn three effective methods to transfer your Google Photos to OneDrive. Explore Web-Based Transfers, Rclone, and CloudsLinker for an efficient shift.

Learn More >

Google Photos to Proton Drive: 3 Effective Transfer Techniques

Discover three practical methods to move your Google Photos to Proton Drive. Learn about Web-Based Uploading, Rclone, and CloudsLinker for a smooth transition.

Learn More >

Interested in learning more?