Move Google Photos to Immich with Google Takeout and immich-go
Doc-based, not yet hands-on tested. This guide is written from the official documentation and has not yet been tested hands-on by us. Check the current official docs before running anything.
Pinned version: Immich v3.3.5 (latest GitHub release, published 2026-10-22 03:12 JST / 2026-10-21 18:12 UTC — https://github.com/immich-app/immich/releases/tag/v3.3.5). Last checked: 2026-10-24.
Transparency note: This guide is based on the official documentation linked below. It was not hands-on tested by us. Commands are copied from the official docs as of the date above; always check the current docs before running them.
This guide also uses immich-go v0.32.0 (latest release, published 2026-06-25 — https://github.com/simulot/immich-go/releases/tag/v0.32.0). immich-go is a community tool maintained outside the Immich project.
Immich v3 compatibility: the v0.32.0 release notes say it "brings full compatibility with Immich V3.0.0" and stays backward-compatible with V2. The README says "Compatible with Immich V2 and V3", and it also warns: "This is an early version, not yet extensively tested" and "Keep a backup copy of your files for safety." Neither source mentions v3.3.5 specifically, so compatibility with v3.3.5 itself is unconfirmed.
Why not just upload the Takeout folder? Google Takeout exports photos together with separate JSON metadata files. immich-go's from-google-photos command "intelligently matches photos with their JSON metadata to preserve albums, descriptions, and locations" (immich-go README). Uploading the raw files skips that matching step. The sources we read don't say how capture dates are handled, so check dates on a test batch yourself.
Prerequisites
- A running Immich server (see our Docker Compose setup guide). The official compose file publishes it on port 2283 (post-install).
- Enough disk space for the archives plus the imported library. Remember that Immich adds about 10–20% for thumbnails and transcodes (requirements).
This page contains affiliate placeholders. See our affiliate disclosure.
[AFFILIATE: Amazon Associates — external HDD/SSD for Takeout archives]
Step 1 — Export with Google Takeout
Start at https://takeout.google.com, select Google Photos, and request the export. On the export options page, Google lets you choose a maximum archive size; "if the data you're downloading is larger than this size, multiple archives will be created" (Google help). Download all the parts into one folder. Keep the zips as they are, because immich-go reads takeout-*.zip directly.
Step 2 — Create an Immich API key
In Immich, create an API key for the user you're importing into. immich-go's installation docs list these permissions:
asset.read, asset.statistics, asset.update, asset.upload, asset.copy, asset.delete, asset.download, album.create, album.read, albumAsset.create, server.about, stack.create, tag.asset, tag.create, user.read.
Pausing Immich's background jobs during the upload (--pause-immich-jobs, on by default) needs an admin-linked key with these additional permissions: job.create and job.read. As of v0.32.0, the asset.replace permission is no longer needed.
Step 3 — Install immich-go
Download the binary for your OS from the releases page. The docs say it has no prerequisites ("just download and run").
Step 4 — Dry run, then import
Do a dry run first (--dry-run "simulate[s] upload without actual transfers"):
immich-go upload from-google-photos --dry-run --server=http://<MACHINE_IP>:2283 --api-key=<YOUR_API_KEY> <TAKEOUT_DIR>/takeout-*.zip⚠️ Caution (untested combination): we haven't tested immich-go v0.32.0 against Immich v3.3.5. Make and verify an Immich backup before the real import, and try a single album first (
--from-album-name). When the import is finished, delete the API key in Immich.
If the output looks right, run the real import:
immich-go upload from-google-photos --server=http://<MACHINE_IP>:2283 --api-key=<YOUR_API_KEY> <TAKEOUT_DIR>/takeout-*.zipUseful documented options (upload command docs):
--include-unmatched: also upload files that have no matching JSON.--from-album-name="Vacation 2023": import a single album, which works well as a test batch.--pause-immich-jobs: defaulttrue. Pauses server jobs during the upload.
Step 5 — Check the result
- Compare item counts and spot-check older photos for correct dates and locations.
- Check that the albums came across.
- Keep your Takeout zips and your Google copy until you've made and tested an Immich backup (see our backup & restore guide).
Sources
- https://support.google.com/accounts/answer/3024190
- https://github.com/simulot/immich-go (README, docs/installation.md, docs/commands/upload.md)
- https://github.com/simulot/immich-go/releases/tag/v0.32.0
- https://docs.immich.app/install/requirements
- https://github.com/immich-app/immich/releases/tag/v3.3.5