How to Transfer iCloud Photos to an FTP/SFTP Server: Three Methods That Actually Work
Want to get your iCloud Photos library onto your own FTP or SFTP server? This guide covers three real approaches—browser download and FTP upload, a Python-based icloud-photos-downloader script with FTP push, and cloud-to-cloud transfer via CloudsLinker—so you can pick what fits your setup.
Introduction
If you're running your own server or NAS and want a proper backup of your iCloud Photos library there, you've probably realized Apple doesn't make it easy. There's no built-in 'send to FTP' button. What you end up with is a workflow question: do I download everything manually first, write a script, or use something that handles the cloud-to-server transfer for me? I've gone through all three options. Here's what each looks like in practice, and when it makes sense to use each one.
- Method 1: Download from iCloud Photos and Upload to FTP via Browser
- Method 2: Use icloud-photos-downloader + Python FTP Script
- Method 3: Transfer Directly in the Cloud with CloudsLinker
- Quick Comparison
- Important Things to Know
- Frequently Asked Questions
- Step-by-Step Video: Transfer iCloud Photos to Ftp / SFTP
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.
FTP (File Transfer Protocol) and its encrypted variant SFTP are standard protocols for transferring files to a remote server you control — whether that's a VPS, a home NAS, or a dedicated hosting account.
- Full control over storage location and folder structure.
- No per-GB subscription if you own the server hardware.
- Works with any FTP client — FileZilla, Cyberduck, WinSCP, and more.
- SFTP adds encryption in transit; plain FTP does not.
One real limitation: your server needs a public IP address reachable from the internet for remote transfers to work. A NAS sitting behind a home router with no port forwarding won't be accessible from cloud transfer services.
The typical person doing this isn't just backing up casually — they already have infrastructure they're paying for. A photographer with a Hetzner VPS, a self-hoster with a Synology NAS, someone running their own media server. The goal is usually to consolidate everything onto storage they already own, rather than keep paying Apple for iCloud capacity.
One common scenario: you run a local Plex or Jellyfin setup and want your photo archive in the same place as your other media — organized by year, accessible over your home network, and not dependent on any cloud subscription. FTP or SFTP into your NAS is the natural fit for that.
- No recurring storage costs if you're using your own hardware.
- Full folder control: organize by date, event, or whatever structure you prefer.
- Works with existing server workflows — rsync, backup scripts, RAID, etc.
- No vendor dependency once files are on your server.
The trade-off worth being honest about: FTP is not as seamless as consumer cloud services. Transfers can silently skip files if there are permission issues or timeouts, so you'll want to verify after the fact. And if your server goes down mid-transfer, you're picking up from scratch unless the tool you're using supports resumption.
Method 1: Download from iCloud Photos, Then Upload via FTP Client
This is the manual approach — no scripts, no special tools beyond an FTP client.
Log in to iCloud Photos on the web, select your images or albums, download them to your computer, and then transfer them to your server using an FTP client like FileZilla or Cyberduck.
- No programming required
- Works for small to medium libraries
- Full manual control over what gets transferred and where it lands
The obvious downside is time. Downloading from iCloud and re-uploading to FTP means your local connection carries all the traffic twice. For anything above 50–100 GB, that's a significant bottleneck — especially if your upstream speed is modest.
For a few albums or a one-off export of recent photos, this is perfectly fine. For an entire multi-year library, it starts to feel like a weekend-consuming chore.
Method 2: Use icloud-photos-downloader with a Python FTP Upload Script
If you're comfortable with the command line, this combination gives you much more control — especially for scheduling or automating recurring syncs.
The workflow has two parts: first use icloud-photos-downloader (a well-maintained open source CLI tool) to pull your photos locally, then run a Python script to push them to your FTP server.
Here's the basic flow:
- Install icloud-photos-downloader via pip:
pip install icloudpd - Run it to download your library:
icloudpd --directory ./photos --username [email protected] - Once downloaded, use the Python script below to upload to your FTP server.
Here's a minimal Python script to upload a local folder to FTP:
import ftplib
import os
FTP_HOST = "your.server.com" # Must be publicly accessible
FTP_USER = "your_ftp_username"
FTP_PASS = "your_ftp_password"
ACCESS_PATH = "/photos/icloud" # Remote base path (optional, set to "" if not needed)
LOCAL_DIR = "./photos"
def upload_directory(ftp, local_path, remote_path):
for item in os.listdir(local_path):
local_item = os.path.join(local_path, item)
remote_item = remote_path + "/" + item
if os.path.isfile(local_item):
with open(local_item, "rb") as f:
ftp.storbinary(f"STOR {remote_item}", f)
print(f"Uploaded: {remote_item}")
elif os.path.isdir(local_item):
try:
ftp.mkd(remote_item)
except ftplib.error_perm:
pass # Directory already exists
upload_directory(ftp, local_item, remote_item)
with ftplib.FTP(FTP_HOST) as ftp:
ftp.login(FTP_USER, FTP_PASS)
if ACCESS_PATH:
ftp.cwd(ACCESS_PATH)
upload_directory(ftp, LOCAL_DIR, "")
print("Done.")
A few notes on this script: FTP_HOST must resolve to a publicly reachable IP address —
a NAS on your local network with no port forwarding won't work here.
ACCESS_PATH is optional; use it if your FTP account only has write permissions
under a specific directory. If you need encryption, switch to
ftplib.FTP_TLS or use the paramiko library for SFTP instead.
This approach is genuinely useful if you want to run recurring incremental syncs —
icloudpd supports --only-print-filenames and date filters, so you can
script a nightly job that picks up new photos automatically.
Method 3: Transfer iCloud Photos to FTP/SFTP Directly in the Cloud (No Downloads)
Skip the Local Download Entirely
If your photo library is already several hundred gigabytes, pulling everything down to your laptop just to push it back up to a server is a slow, bandwidth-heavy process. CloudsLinker can handle the transfer between iCloud Photos and your FTP/SFTP server entirely server-side — your local machine doesn't need to be involved at all.
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 Your FTP/SFTP Server
Next, choose FTP or SFTP from the cloud list. You'll need to fill in your server credentials directly:
- Host — your server's public hostname or IP address (must be internet-accessible)
- FTP Username — your FTP account username
- FTP Password — your FTP account password
- Access Path (optional) — the remote base directory if your account is restricted to a specific path
After saving, your FTP server will appear alongside iCloud Photos as an available destination in the dashboard.
Step 3: Configure and Start the Transfer
Open the Transfer section. Select iCloud Photos as the source and your FTP/SFTP server as the destination.
You can select specific albums rather than moving your entire library at once. For large collections, transferring album by album is generally more reliable and easier to verify afterward.
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 FTP/SFTP
Which method makes sense depends mostly on your technical comfort level and how much you're moving. The browser approach needs no setup but gets slow fast. The script approach is powerful but requires a working Python environment and some command-line familiarity. Cloud-to-cloud via CloudsLinker is the most hands-off option once you have your server credentials ready. Here's a quick side-by-side.
| Method | Ease of Use | Speed | Best For | Uses Local Bandwidth | Skill Level |
|---|---|---|---|---|---|
| Web Browser (Download → FTP Upload) | ★★★★★ | ★★★☆☆ | Small batches, occasional exports | Yes (download + upload) | Beginner |
| icloud-photos-downloader + Python FTP Script | ★★★☆☆ | ★★★☆☆ | Automation, scheduled syncs, large libraries | Yes (local staging required) | Intermediate |
| CloudsLinker (Cloud-to-Server) | ★★★★★ | ★★★★★ | Large libraries, hands-off transfers | No | Beginner |
For a small export, the browser method is fine — download, drag into FileZilla, done. If you want recurring automated backups and don't mind writing a bit of Python, the icloudpd + script approach is genuinely flexible. But for a one-time bulk migration of a large library without tying up your local machine, a cloud-to-server transfer via CloudsLinker tends to be the least painful route.
FTP transfers have a few failure modes that cloud-to-cloud transfers don't. Worth knowing about these before you start, especially for large libraries.
- Your FTP host must be publicly reachable: cloud services and transfer tools connect to your server over the internet. A NAS on your home network without port forwarding — or a server behind a restrictive firewall — won't be accessible. Confirm your host resolves correctly before you start.
- FTP transfers can fail silently: unlike some cloud services, plain FTP doesn't always surface errors clearly. After transferring, spot-check a few folders on the server to make sure files actually arrived. For larger migrations, consider verifying file counts or using SFTP which tends to be more reliable.
- Use SFTP instead of FTP where possible: plain FTP sends your credentials and data unencrypted. If your server supports SFTP (most do), use that. It's the same workflow but with encryption in transit.
- Watch out for HEIC files: iCloud Photos stores photos in HEIC format. These land on your FTP server as-is — which is fine for archiving, but if you later need to share or view them on non-Apple systems, you may want to convert to JPEG separately. Don't do the conversion during the transfer; just get the files there first.
- Check disk space on the server first: FTP uploads can fail mid-way if the remote disk fills up, and you won't always get a clear error. Know roughly how much space your library needs before starting.
- Move in batches for large libraries: pick a year or an album, transfer it, verify it's there, then move on. Trying to push 300 GB in one go increases the risk of something going wrong mid-transfer with no easy way to resume.
- Prefer SFTP credentials over plain FTP: if you're entering server credentials into any tool, make sure the connection is encrypted. For CloudsLinker, credentials are used only to establish the transfer session. You can update or revoke them on your server side at any time.
The most common mistake is rushing the whole library at once and not verifying afterward. FTP is reliable for most transfers, but it rewards a methodical approach — especially when iCloud Photos is on one end and your own server infrastructure is on the other.
Frequently Asked Questions
Step-by-Step Video: Transfer iCloud Photos to FTP or SFTP
If you prefer to see the process in action, this video walks through how to move your photos from iCloud Photos to an FTP or SFTP server. You'll see how to connect iCloud Photos and your FTP server in CloudsLinker, enter the server credentials such as host, username, password, and port, configure the transfer settings, and run the migration without downloading anything locally. This method works well whether you're backing up a small photo album or transferring a large photo library.
Conclusion
Getting iCloud Photos onto an FTP or SFTP server takes a bit more setup than syncing to another cloud service, but it's very doable. Manual downloads work for smaller collections, the Python script approach gives you real control and automation, and CloudsLinker handles the whole thing server-side without touching your local machine. Whatever route you go, verify your files once they land on the server—FTP transfers occasionally miss files silently, so a quick spot-check is worth it.
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 >