Skip to content

Your iCloud Photos Stuck Outside Google Cloud? Here's How to Get Them Into GCS

Transfer iCloud Photos to Google Cloud Storage for analytics, ML pipelines, or durable archiving. 3 methods: gsutil CLI, web console upload, and cloud-to-cloud via CloudsLinker.

Introduction

I was building an image classification pipeline in Vertex AI and realized the training dataset I actually wanted — years of categorized travel and product photos — was locked inside my iCloud library. Google Cloud Storage is the native storage layer for everything in Google Cloud: BigQuery, Vertex AI, Cloud Functions, Dataflow. Having photos in a GCS bucket means they're immediately accessible to any Google Cloud service without extra data movement. iCloud has no API and no way to connect to external workflows. Moving the library to GCS turns a personal photo archive into a programmable data asset. Here are three ways to bridge that gap.

About iCloud Photos

iCloud Photos keeps your entire photo library synchronized across every Apple device — iPhone, iPad, and Mac — automatically and quietly in the background. It's one of the most seamless photo experiences available, as long as you stay inside Apple's ecosystem.

  • 5 GB free shared across backups, mail, files, and photos.
  • iCloud+ plans scale from 50 GB up to 12 TB.
  • Original quality storage with device optimization options.
  • Apple ecosystem only — no API, no programmatic access.

iCloud Photos is a sync service, not a data platform. You pay monthly regardless of how often you access your photos, and there is no way to connect your library to external data pipelines, ML workflows, or cloud analytics services.

About Google Cloud Storage

Google Cloud Storage (GCS) is Google's unified object storage for the entire Google Cloud ecosystem. It serves as the native storage layer for BigQuery, Vertex AI, Cloud Functions, Dataflow, and virtually every other Google Cloud service.

  • Multiple storage classes — Standard, Nearline, Coldline, and Archive for cost optimization.
  • Native integration with BigQuery, Vertex AI, Cloud Functions, and Dataflow.
  • 11 nines durability (99.999999999%) — built for data you cannot afford to lose.
  • Fine-grained IAM permissions — control access at the bucket, prefix, or object level.

GCS uses buckets and object prefixes — photos land as objects in the bucket and prefix you specify. Once your data is in GCS, it becomes immediately accessible to any Google Cloud service without extra data movement or ETL steps.

Why Move Photos from iCloud Photos to Google Cloud Storage?

The moment I needed to run image classification on my own photos, iCloud became the bottleneck. Vertex AI reads directly from GCS buckets. BigQuery ML can reference GCS objects. Cloud Functions can trigger on new objects landing in a bucket. None of that works if the data is locked inside iCloud with no API and no programmatic access. Moving photos to GCS is not just about storage — it is about making the data usable inside Google Cloud's service mesh.

  • Native Google Cloud ecosystem integration: GCS is the default data layer for BigQuery, Vertex AI, Cloud Functions, Dataflow, and Cloud Run. Photos in a GCS bucket are immediately accessible to any of these services — no data movement, no intermediate storage, no adapters. iCloud has no integration points with any cloud platform.
  • Multiple storage classes for cost optimization: GCS offers Standard, Nearline, Coldline, and Archive storage classes. Active training datasets can sit in Standard; archived photo collections can move to Coldline or Archive at a fraction of the cost. You can set lifecycle rules to transition objects between classes automatically.
  • Programmable via APIs, gsutil, and client libraries: Once photos are in GCS, you can manage them with gsutil, the JSON/gRPC API, or client libraries in Python, Go, Java, Node.js, and more. Automate organization, trigger processing pipelines, or build custom workflows — none of which is possible with iCloud.
  • IAM-based access control: GCS uses Google Cloud IAM for fine-grained permissions. You can grant read-only access to a specific bucket for a Vertex AI service account, restrict write access to a CI/CD pipeline, or share individual objects via signed URLs — all without exposing your entire library.
  • Foundation for ML and analytics workflows: A photo library in GCS is a training dataset, a feature store input, or a source for image analytics. Vertex AI AutoML Vision, Cloud Vision API, and custom TensorFlow pipelines all read natively from GCS. Moving photos from iCloud to GCS turns a personal archive into a machine-learning-ready data asset.

Getting photos out of iCloud and into a GCS bucket takes deliberate steps because iCloud was not designed for data export. Here are three approaches that work in practice.

Method 1: Download from iCloud Photos, Then Upload via GCS Web Console

The simplest approach — no CLI tools required. Best for small batches or a quick test before committing to a larger migration.

Step 1: Export from iCloud Photos

Open iCloud Photos on the web and sign in with your Apple ID.

Select the photos or albums you want to export. Click the download icon and choose your preferred format:

  • Original Format — preserves HEIC, Live Photos, and RAW files at full quality.
  • Most Compatible — converts HEIC to JPEG. Useful if downstream tools or Vision API preprocessing expect JPEG input.

Step 2: Upload to GCS via Cloud Console

Open the Google Cloud Console — Cloud Storage Browser and navigate to your target bucket (or create a new one).

  1. Click Upload Files or Upload Folder inside the bucket view.
  2. Select the extracted photo files from your local machine.
  3. Optionally create a folder prefix first (e.g., icloud-photos/2024/) to organize objects.
  4. Wait for the upload to complete.

Method 2: Download from iCloud, Then Upload via gsutil / gcloud CLI

The developer-friendly path. Download photos locally from iCloud, then push them to GCS using gsutil or the gcloud storage commands. This gives you full control over object naming, parallel uploads, storage class selection, and metadata.

Step 1: Download from iCloud Photos

Use the same iCloud web export from Method 1, or download via the Photos app on macOS (Photos → Select All → File → Export Unmodified Originals) to a local folder.

Step 2: Install and Authenticate the gcloud CLI

If you do not have the Google Cloud SDK installed:

# Install the Google Cloud SDK (macOS example)
brew install --cask google-cloud-sdk

# Authenticate
gcloud auth login

# Set your project
gcloud config set project YOUR_PROJECT_ID

Step 3: Upload with gsutil

Use gsutil -m for parallel multi-threaded uploads:

# Parallel upload to a GCS bucket with a prefix
gsutil -m cp -r /path/to/icloud-photos/* gs://my-photo-bucket/icloud-archive/

# Or use rsync for incremental transfers (only uploads new/changed files)
gsutil -m rsync -r /path/to/icloud-photos gs://my-photo-bucket/icloud-archive/

The -m flag enables parallel operations — gsutil will upload multiple files simultaneously, which dramatically improves throughput for large batches. Use rsync if you plan to run the upload in multiple sessions — it only transfers files that are new or changed.

Alternative: Specify a Storage Class

# Upload directly to Coldline storage for archival
gsutil -m -o "GSUtil:default_storage_class=COLDLINE" cp -r /path/to/icloud-photos/* gs://my-photo-bucket/archive/

Method 3: Move iCloud Photos to Google Cloud Storage Directly in the Cloud (No Local Downloads)

When Your Data Pipeline Starts at iCloud's Front Door

If the goal is getting photos into GCS for a Vertex AI pipeline, a BigQuery analysis, or long-term durable archiving, downloading everything to your laptop first adds hours of unnecessary data movement. Your local machine becomes a bottleneck that has nothing to do with the actual workflow. CloudsLinker connects iCloud Photos and Google Cloud Storage directly. Photos move cloud-to-cloud without passing through your computer, without consuming your home internet connection, and without needing a single gigabyte of free space on your hard drive.

Step 1: Connect iCloud Photos

In CloudsLinker, click Add Cloud and select iCloud Photos. Enter your Apple ID and password. If two-factor authentication is enabled, enter the verification code from your trusted Apple device when prompted.

Connect iCloud Photos inside CloudsLinker dashboard

Once connected, your iCloud albums appear in the CloudsLinker dashboard. You can transfer your entire library or select specific albums.

Step 2: Connect Google Cloud Storage (S3-Compatible Credentials)

Google Cloud Storage supports S3-compatible access through HMAC keys. You need an Access Key ID, a Secret Access Key, and the GCS S3-compatible endpoint (storage.googleapis.com).

Where to find your HMAC credentials:

In the Google Cloud Console, go to Cloud Storage → Settings → Interoperability. Under "Service account HMAC," click Create a Key for a Service Account. Select an existing service account (or create one under IAM & Admin → Service Accounts) and generate the HMAC key pair. Copy the Access Key and Secret — the secret is only shown once.

Add GCS in CloudsLinker:

  1. Click Add Cloud and select Google Cloud Storage (S3-compatible).
  2. Fill in the Access Key ID, Secret Access Key, and endpoint (storage.googleapis.com).
  3. Confirm the connection.
Connect Google Cloud Storage using HMAC credentials in CloudsLinker

Once connected, your GCS buckets appear in the CloudsLinker file browser.

Step 3: Configure the Transfer

Go to the Transfer section. Set iCloud Photos as the source and Google Cloud Storage as the destination.

For the destination, select the target bucket and specify an optional object prefix to organize your photos — for example, icloud-archive/ or training-data/photos-2024/. Photos arrive as individual objects inside that prefix path, named by their original filenames.

If you want to preserve your iCloud album organization, transfer one album at a time: select a specific iCloud album as the source, use a matching prefix in GCS as the destination (e.g., icloud-archive/italy-2024/), and run each album as a separate task.

Transfer configuration from iCloud Photos to Google Cloud Storage in CloudsLinker

Step 4: Start and Monitor the Transfer

Click Transfer Now. The task appears in your Task List, where you can monitor progress in real time. Because the transfer runs entirely in the cloud, your computer does not need to stay on.

For large libraries, this is the key advantage: photos move directly from iCloud's infrastructure to Google's data centers using CloudsLinker's servers — not your home internet connection. Once transferred, the objects are immediately accessible via gsutil, the Cloud Console, client libraries, or any Google Cloud service that reads from GCS.

Comparing the 3 Ways to Move Photos from iCloud Photos to Google Cloud Storage

Method Ease of Use Speed Best For Uses Local Bandwidth Skill Level
GCS Cloud Console (Download → Upload) ★★★★★ ★★☆☆☆ Small batches, quick tests Yes (download + upload) Beginner
gsutil / gcloud CLI ★★★☆☆ ★★★★☆ Developers, automation, large structured uploads Yes (download + upload) Intermediate
CloudsLinker (Cloud-to-Cloud) ★★★★☆ ★★★★★ Large libraries, full migration No Beginner
Practical Tips for Moving iCloud Photos to Google Cloud Storage
  • Choose your storage class before the first upload: Standard is best for data you access frequently (active ML pipelines, iterative analysis). Nearline works for data accessed less than once a month. Coldline and Archive are for long-term retention where you rarely read the data. Uploading to the wrong class and changing later incurs early deletion fees, so decide your access pattern up front.
  • Apply IAM least-privilege from day one: Create a dedicated service account for the migration with only roles/storage.objectCreator on the target bucket. Do not use your project owner credentials for bulk uploads. After migration, revoke write access and grant read-only permissions to the service accounts that need to consume the data (Vertex AI, BigQuery, etc.).
  • Plan your object naming and prefix structure: GCS uses flat object storage with prefixes acting as virtual folders. Decide on a naming convention before your first upload (e.g., photos/2024/vacation/ or icloud-archive/album-name/) so you do not end up reorganizing thousands of objects later. Consistent prefixes also make lifecycle rules and IAM policies easier to apply.
  • Set lifecycle rules for automatic cost optimization: GCS supports object lifecycle management that can automatically transition objects from Standard to Nearline or Coldline after a specified number of days, or delete old object versions. For a photo archive, set a rule to downgrade storage class after 30 or 90 days if you only need frequent access during the initial verification period.
  • GCS stores files as-is — including HEIC: GCS stores whatever you upload without conversion. If your downstream pipeline (Vision API, AutoML Vision) expects JPEG input, convert HEIC files before uploading via the "Most Compatible" export option on iCloud.com, or handle conversion in a Cloud Function triggered on object creation.
  • iCloud 2FA: have your Apple device nearby: When connecting iCloud Photos in CloudsLinker, you need to complete two-factor authentication. Have your trusted iPhone or iPad on hand to receive and enter the verification code. Confirm that "Access iCloud Data on the Web" is enabled in your Apple ID settings before starting.
  • Verify before removing anything from iCloud: After the transfer completes, spot-check a few albums' worth of objects in GCS — verify file counts, open a few photos in the Cloud Console preview, and confirm object sizes match originals — before cancelling your iCloud+ plan or deleting originals. CloudsLinker's Task List shows a transfer summary when each task finishes.

Frequently Asked Questions

GCS is flat object storage — it uses buckets and object name prefixes, not folders or albums. Photos transferred from iCloud arrive as individual objects inside the bucket and prefix path you specify during setup (e.g., my-bucket/icloud-archive/IMG_1234.HEIC).

There is no automatic folder or album hierarchy. The Cloud Console displays prefixes as virtual folders for browsing convenience, but the underlying storage is flat. If you want to mirror your iCloud album structure, create matching prefixes in GCS and transfer one album at a time.

Not automatically. When you run a transfer in CloudsLinker, all photos go into the single bucket prefix you select — iCloud album names are not recreated as separate prefixes by default.

To preserve your album structure, transfer one album at a time: in CloudsLinker, set a specific iCloud album as the source, then use a matching prefix in GCS as the destination (e.g., icloud-archive/italy-2024/). Repeat for each album.

GCS is format-agnostic object storage — it stores any file type without conversion or validation. HEIC, RAW (CR2, ARW, DNG), MOV (Live Photos), and every other format will be stored exactly as uploaded, at full original quality.

GCS itself does not render or preview most photo formats natively. If your downstream pipeline (Cloud Vision API, AutoML Vision) requires JPEG, you can convert before uploading or set up a Cloud Function that automatically converts HEIC to JPEG when new objects land in the bucket.

iCloud Photos is connected using your Apple ID and password, followed by two-factor authentication. You receive a verification code on your trusted Apple device and enter it when CloudsLinker prompts you.

Before connecting, confirm that "Access iCloud Data on the Web" is enabled in your Apple ID settings at appleid.apple.com. Once connected, your iCloud albums and full library appear in the CloudsLinker dashboard.

GCS billing has three main components: storage (per GB per month, varies by storage class), operations (Class A for writes, Class B for reads), and network egress (data downloaded out of GCS). Check the current GCS pricing page for exact rates.

For a photo archive with infrequent reads, storage is the dominant cost. Standard storage costs more per GB but has no minimum storage duration. Coldline and Archive are significantly cheaper per GB but carry minimum storage duration charges (90 days for Coldline, 365 days for Archive) and higher retrieval fees. Choose the class that matches your access pattern.

It depends on your intent. A backup means you keep both copies — iCloud Photos continues as your primary library, and GCS holds a durable secondary copy for disaster recovery or pipeline access. A migration means GCS becomes the primary location and you eventually stop paying for iCloud+ storage.

For most users building data workflows, the initial transfer is a backup: keep iCloud for daily phone use and GCS for programmatic access. If cost reduction is the goal, verify everything landed correctly in GCS, confirm your workflows function, and then decide whether to downgrade or cancel your iCloud+ plan.

Yes. When configuring the transfer in CloudsLinker, you can navigate into a specific iCloud album instead of selecting the entire library. This is useful for testing with a small album first, or for migrating only the albums relevant to a specific workflow — such as product photos for a classification model or event photos for an analytics project.

Selective transfer also lets you route different albums to different bucket prefixes, keeping your GCS organization aligned with your downstream data needs.

It depends on how often you plan to access the photos:

Standard — best for active datasets: ML training runs, frequent reads from pipelines, or photos you access regularly. No minimum storage duration, lowest retrieval cost.

Nearline — good for data accessed less than once a month. Lower storage cost than Standard, 30-day minimum storage duration.

Coldline — for data accessed less than once a quarter. Significantly cheaper storage, 90-day minimum, higher retrieval fees.

Archive — cheapest storage for data you almost never read. 365-day minimum storage duration, highest retrieval cost. Best for disaster-recovery copies or regulatory retention.

A common pattern: upload to Standard initially, verify everything works in your pipeline, then set a lifecycle rule to transition objects to Nearline or Coldline after 30-90 days.

Conclusion

A quick dataset for a prototype? Download from iCloud and upload via the Cloud Console. A structured migration for a production pipeline or long-term archive? CloudsLinker transfers photos cloud-to-cloud — from iCloud's servers directly into your GCS bucket — without downloading anything locally. Start with one album to validate your bucket structure and IAM permissions before migrating the full library.

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?