Stop Overpaying for Photo Storage: How to Archive iCloud Photos in Backblaze B2
Move iCloud Photos to Backblaze B2 for low-cost archival storage. 3 methods: web upload, CLI tools (b2/rclone), and direct cloud-to-cloud transfer via CloudsLinker.
Introduction
I did the math one afternoon on what my iCloud+ subscription was actually costing per gigabyte — and then I looked at Backblaze B2's pricing. The difference was hard to ignore. B2 charges a fraction of what consumer cloud storage costs, and for a photo archive that mostly just sits there waiting to be accessed occasionally, that's exactly the right cost profile. iCloud is convenient for day-to-day viewing on Apple devices, but it's not designed to be a long-term archive — it's a sync service with a monthly subscription that scales with your library size. Backblaze B2 is purpose-built for storing large volumes of data at the lowest possible cost, with an S3-compatible API that makes your archive accessible to any tool or pipeline. This guide covers three ways to get your iCloud Photos into B2: a simple web upload, a CLI-based approach, and a direct cloud-to-cloud transfer that bypasses your local machine entirely.
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 an archive. You pay monthly regardless of how often you access your photos, and the per-gigabyte cost is significantly higher than dedicated object storage built for long-term retention.
Backblaze B2 is cloud object storage built for durability and low cost — designed for backups, archives, and media libraries where the priority is reliable long-term storage at the lowest possible price per gigabyte.
- 10 GB free storage with 1 GB/day free egress.
- S3-compatible API — works with rclone, AWS CLI, and any S3-aware tool.
- 11 nines durability (99.999999999%) — built for data you can't afford to lose.
- Free egress via Cloudflare, Fastly, and Bunny CDN through bandwidth alliance partnerships.
B2 stores objects in buckets, organized by key prefixes (like folder paths). Photos land as individual objects inside the bucket and prefix you specify — accessible via the S3-compatible API, the b2 CLI, or the web console.
The trigger for me was a storage upgrade notification from Apple. Going from 200 GB to 2 TB of iCloud+ meant paying a meaningful monthly fee — for photos I hadn't opened in years. Most of my library is archival: trips from five years ago, old family events, project documentation. That data needs to exist reliably, but it doesn't need to sync across devices every day. B2 is built for exactly this: durable, low-cost storage for data that matters but doesn't need real-time access.
- Storage costs a fraction of consumer cloud pricing: B2's per-gigabyte rate is significantly lower than iCloud+, Google One, or Dropbox Plus — which means a 500 GB photo archive that costs a noticeable monthly fee on iCloud becomes a rounding error on B2.
- Built for archive workloads, not sync: iCloud Photos is optimized for syncing across devices in real time. B2 is optimized for write-once, read-occasionally data — exactly the access pattern of a photo archive. You're not paying for sync infrastructure you don't use.
- 11 nines of data durability: Backblaze stores objects with 99.999999999% durability. For photos that are irreplaceable — family memories, professional work, event documentation — that level of protection matters more than any consumer cloud's marketing promise.
- Bandwidth alliance eliminates egress costs for CDN use: If you ever need to serve archived photos through a CDN — for a portfolio site, a gallery, or a client delivery — B2's partnerships with Cloudflare, Fastly, and Bunny CDN mean zero egress fees for that traffic. No surprise bandwidth bills.
- S3-compatible API opens up tooling: Once your photos are in B2, any S3-compatible tool — rclone, boto3, Terraform, Veeam — can manage, query, or automate your archive. iCloud has no API at all. B2 turns a locked library into programmable storage.
Getting photos out of iCloud into a B2 bucket takes a few deliberate steps. Here are three approaches that work in practice.
Method 1: Download from iCloud Photos, Then Upload via B2 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 don't handle HEIC well.
Step 2: Upload to Backblaze B2 via Web Console
Log into the Backblaze B2 web console and open the target bucket (or create a new one).
- Click Upload inside the bucket view.
- Drag and drop the extracted photo files, or click to browse.
- Optionally specify a folder prefix (e.g.,
icloud-photos/2024/) to organize objects. - Wait for the upload to complete.
Method 2: Download from iCloud, Then Upload via CLI (b2 / rclone)
The developer-friendly path. Download photos locally from iCloud, then push them to B2 using the official b2 command-line tool or rclone. This gives you full control over key prefixes, parallel uploads, and lifecycle rules.
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: Create a B2 Application Key
In the Backblaze B2 web console:
- Go to App Keys in the left sidebar.
- Click Add a New Application Key.
- Name the key (e.g., "icloud-migration"), select the target bucket, and set Read and Write permissions.
- Copy the keyID and applicationKey — the application key is only shown once.
Step 3: Upload with rclone (recommended)
Configure rclone with your B2 credentials:
rclone config
# Choose: New remote
# Name: b2
# Type: Amazon S3 Compliant (s3)
# Provider: Backblaze B2 (or use native b2 backend)
# Account / Access Key ID: <your keyID>
# Application Key / Secret: <your applicationKey>
# Endpoint: s3.us-west-004.backblazeb2.com (check your bucket's region)
Then sync the local photos folder to your B2 bucket:
rclone sync /path/to/icloud-photos b2:my-photo-bucket/icloud-archive/ --progress --transfers 8
rclone handles parallel uploads, automatic retries, and can resume interrupted
transfers. The --transfers 8 flag runs 8 concurrent uploads —
adjust based on your connection speed.
Alternative: Upload with the b2 CLI
# Install
pip install b2
# Authorize
b2 authorize-account <keyID> <applicationKey>
# Sync a local folder to a B2 bucket
b2 sync /path/to/icloud-photos b2://my-photo-bucket/icloud-archive/
Method 3: Move iCloud Photos to Backblaze B2 Directly in the Cloud (No Local Downloads)
When Downloading Locally Defeats the Purpose of Cheap Storage
The whole point of moving to B2 is reducing cost and effort. Downloading hundreds of gigabytes to your hard drive just to upload them again adds hours of wait time, ties up your bandwidth, and requires local disk space you might not have. CloudsLinker connects iCloud Photos and Backblaze B2 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.
Once connected, your iCloud albums appear in the CloudsLinker dashboard. You can transfer your entire library or select specific albums.
Step 2: Connect Backblaze B2 (S3-Compatible Credentials)
Backblaze B2 uses S3-compatible credentials for access. You need a keyID (Access Key ID), an applicationKey (Secret Access Key), and your bucket's S3-compatible endpoint.
Where to find your credentials:
In the Backblaze B2 web console, go to App Keys → Add a New
Application Key. Copy the keyID and applicationKey.
Your S3-compatible endpoint is shown on the bucket details page
(e.g., s3.us-west-004.backblazeb2.com).
Add Backblaze B2 in CloudsLinker:
- Click Add Cloud and select Backblaze B2.
- Fill in the Access Key ID (keyID), Secret Access Key (applicationKey), and endpoint.
- Confirm the connection.
Once connected, your B2 buckets appear in the CloudsLinker file browser.
Step 3: Configure the Transfer
Go to the Transfer section. Set iCloud Photos as the source and Backblaze B2 as the destination.
For the destination, select the target bucket and specify an optional key
prefix to organize your photos — for example,
icloud-archive/ or 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 B2 as the destination
(e.g., icloud-archive/italy-2024/),
and run each album as a separate task.
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 Backblaze's data centers using CloudsLinker's servers — not your home internet connection. Once transferred, the objects are immediately accessible via the S3 API, the b2 CLI, or the web console.
Comparing the 3 Ways to Move Photos from iCloud Photos to Backblaze B2
| Method | Ease of Use | Speed | Best For | Uses Local Bandwidth | Skill Level |
|---|---|---|---|---|---|
| B2 Web Console (Download → Upload) | ★★★★★ | ★★☆☆☆ | Small batches, quick tests | Yes (download + upload) | Beginner |
| CLI (b2 / rclone) | ★★★☆☆ | ★★★★☆ | Developers, automation, large structured uploads | Yes (download + upload) | Intermediate |
| CloudsLinker (Cloud-to-Cloud) | ★★★★☆ | ★★★★★ | Large libraries, full migration | No | Beginner |
-
Plan your bucket and prefix structure first:
B2 uses flat object storage with key prefixes acting as virtual folders.
Decide on a naming convention before your first upload
(e.g.,
photos/2024/oricloud-archive/album-name/) so you don't end up reorganizing thousands of objects later. - Choose the right bucket type: B2 offers both public and private buckets. For a personal photo archive, use a private bucket. If you plan to serve photos publicly through a CDN, you can configure a public bucket or use signed URLs for controlled access.
- B2 stores files as-is — including HEIC: B2 stores whatever you upload without conversion. If your iCloud library is mostly HEIC files and you need JPEG for downstream use, convert before uploading (via "Most Compatible" export on iCloud.com) or handle conversion in a pipeline after transfer.
- Scope your application key narrowly: When creating a B2 application key for CloudsLinker or CLI use, restrict it to the specific bucket you're using for this migration. Avoid master keys for single-purpose transfers.
- iCloud 2FA: have your Apple device nearby: When connecting iCloud Photos in CloudsLinker, you'll 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.
- Consider lifecycle rules for cost optimization: B2 supports lifecycle rules that can automatically delete old file versions or transition objects. For a photo archive, set a rule to keep only the latest version of each file to avoid paying for duplicate versions.
- Verify before removing anything from iCloud: After the transfer completes, spot-check a few albums' worth of objects in B2 — verify file counts and open a few photos — before cancelling your iCloud+ plan or deleting originals. CloudsLinker's Task List shows a transfer summary when each task finishes.
Frequently Asked Questions
my-bucket/icloud-archive/IMG_1234.HEIC).
There is no automatic folder or album hierarchy. If you want to mirror your iCloud album structure, create matching key prefixes in B2 and transfer one album at a time.
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 B2 as the destination (e.g.,
icloud-archive/italy-2024/). Repeat for each album.
B2 itself does not render or preview photos. How you display or process the files depends on your downstream tooling. If you need JPEG for compatibility, convert before uploading or handle conversion in a processing pipeline after the archive is built.
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.
Before starting a large migration, estimate your iCloud library size (check in Settings → Apple ID → iCloud → Manage Storage on your iPhone) and make sure your Backblaze account has a payment method on file. The free tier is good for testing; a full library migration will incur storage charges beyond 10 GB.
On iPhone, if "Optimize iPhone Storage" is enabled, full-resolution originals for older photos may only exist on iCloud's servers — not on the device. Any local download from the phone will only capture the compressed thumbnails, not the originals.
A local hard drive also carries physical risk — drive failure, theft, or accidental deletion. B2's 11-nines durability means your archive is protected against hardware failure in a way no single local drive can match. Cloud-to-cloud transfer via CloudsLinker reads directly from iCloud's servers, ensuring every original is captured at full resolution.
Selective transfer also makes sense if you're only archiving older albums to B2 while keeping recent photos in iCloud for active use on your Apple devices.
The first 10 GB of storage is free. Beyond that, you pay for storage and Class A/B/C API operations. For an archive with infrequent reads, the operations cost is typically negligible — storage is the main line item.
Conclusion
A few albums or a quick test? Download from iCloud and upload through the B2 web console. A structured archive migration with automation potential? Use the b2 CLI or rclone. A full iCloud library — hundreds of gigabytes or more — without tying up your bandwidth or hard drive? CloudsLinker moves everything cloud-to-cloud, directly from iCloud's servers to your B2 bucket. Setup takes ten minutes. Start with one album to verify your bucket structure before migrating the full library.
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 >