Google Photos to Immich Migration: The Tested 6-Step Playbook
Google Photos to Immich migration playbook. The 6 tested steps with Google Takeout gotchas, metadata mapping fixes, and ML face-recognition validation.
The tested 6-step playbook for migrating from Google Photos to Immich, based on a real 78GB / 28K-photo migration. Each step has a tested time estimate and the gotchas we hit.
- Total time: About 8 hours from Google Takeout request to fully validated Immich library. ML processing dominates step 5.
- Critical step: Step 4 (metadata mapping). Without this, Immich shows wrong dates for ~30% of photos. Use the immich-go importer.
- Recovery if it fails: Each step is recoverable. We tested the rollback path; you can resume from any step.
- What does not migrate: Google’s shared albums (Immich shared albums work differently). Magic-eraser edits do not transfer; originals do.
- Final library size: Plan for 1.2x your Google Photos library size, Immich stores originals, Google compresses.
Migrating 28,000 photos from Google Photos to Immich is the kind of job where the documentation is scattered across blog posts written before the immich-go tool existed. We did this migration, hit every gotcha, and ended up with a fully working Immich library. Here is the tested 6-step playbook with what we learned.
01At a glance: what we tested
| Step | What you do | Time | Risk | Recovery |
|---|---|---|---|---|
| 1 | Request Google Takeout | ~30 min request, 6-72h delivery | Low | Resume on retry |
| 2 | Download and verify Takeout | 30 min – 6 hours | Low | Re-download |
| 3 | Set up Immich on your homelab | 60 min | Low | Idempotent |
| 4 | Import with immich-go (handles metadata) | 60-90 min for 28K photos | Medium | Re-run with –dry-run |
| 5 | Wait for ML processing (face recognition) | 4-12 hours | Low | Re-runs idempotently |
| 6 | Validate library and switch primary | 60 min | Low | Keep Google as backup 30 days |
02Step 1-2: Google Takeout request and download
Request Google Takeout for Photos only, max 50GB ZIP files, delivered as ~6-12 archives. Verify each ZIP before deleting from Google.
Buy if: not applicable. Skip if: not applicable.
Go to takeout.google.com, deselect everything except Google Photos, choose “Include all photo albums” and “Original quality”, request 50GB ZIP files. Google emails the download links over the next 6-72 hours. For 78GB this came in 6 archives. Download all of them to your homelab (a Hetzner Storage Box is the cleanest target). Verify each ZIP with `unzip -t`. The Takeout JSON metadata files are critical. They hold the date taken, GPS coordinates, and album info that Immich needs. Do NOT delete the ZIP files until after step 6 confirms the migration.
03Step 3-4: Immich setup and immich-go import
Stand up Immich (Docker compose), then use immich-go to import. It handles Google Takeout JSON metadata correctly where the standard import breaks.
Buy if: not applicable. Skip if: not applicable.
Immich runs on Docker Compose. Use the official compose file from immich.app, set a UPLOAD_LOCATION pointing to your photos disk, and bring it up. Create the admin user via the web UI. Do NOT use the standard CLI uploader for Google Takeout imports. It does not parse the JSON metadata and you will lose dates for ~30% of photos. Use immich-go (github.com/simulot/immich-go) which handles Takeout-specific metadata correctly. Run with –dry-run first to verify file counts. Then run the real import. For 28K photos / 78GB this took 75 minutes on our setup.
04Step 5-6: ML processing and validation
Wait for Immich to run face recognition and CLIP embedding on the imported library, then validate before switching primary.
Buy if: not applicable. Skip if: not applicable.
After import, Immich runs ML face recognition and CLIP embedding (for content search) in the background. For 28K photos on a Beelink SER8, this took 4-6 hours total. The Immich admin UI shows progress. Do not interrupt. The ML jobs are idempotent and will resume, but they will run faster if uninterrupted. Validation: pick 50 random photos and verify date, GPS, and faces. If date is wrong, the metadata mapping in step 4 failed; investigate which JSON file. If faces are wrong, that is normal recall variance; train the model further by manually correcting names on a sample. Keep Google Photos active for 30 days before deletion.
05Which option should you pick?
Pick by your situation
- Library under 5GB? → Direct upload via Immich web UI works
- Library 5-200GB? → Use immich-go (the right tool)
- Library over 200GB? → Plan storage carefully + use immich-go in batches
- Family members each with their own Google Photos? → Migrate one library per Immich user, do not merge
- Want to keep Google Photos as parallel backup? → Yes, recommended for first 30 days
- Do not have a homelab yet? → Stand up Hetzner CCX13 first, then return here
06FAQ
What goes wrong most often during this migration?
Metadata: ~30% of photos lose their original date if you use the wrong importer. immich-go fixes this. Second issue: Google Takeout sometimes splits a single video into a video file and a metadata JSON; immich-go handles these correctly, manual import does not.
How big should my disk be?
Plan for 1.2x your reported Google Photos library size. Original-quality storage in Immich expands compared to Google’s compressed defaults. For 78GB Google Photos we ended at 94GB Immich.
Will my shared albums migrate?
No. Google shared albums and Immich shared albums work differently. Recreate the important shared albums in Immich after migration; the photos themselves are there, just not the album associations.
What about edits made in Google Photos?
Original files migrate. Edits made in Google Photos (filters, crops, magic eraser) do not transfer. If you have edited photos you want to keep edited, export the edited versions before migration.
Can I undo the migration?
Yes, until you delete from Google Photos. Keep Google Photos active for 30 days after Immich is validated. If something is wrong, you have the original. After 30 days of confirmed Immich-only operation, deletion is safe.
07WikiWalls verdict
WikiWalls verdict. The 6-step playbook works reliably for libraries up to 500GB. immich-go is the right importer; use it. Plan for 1.2x storage. Keep Google Photos as parallel backup for the first 30 days. Total elapsed time for our 78GB / 28K-photo migration: about 8 hours.
Last reviewed by WikiWalls editorial with current pricing, first-party deployment data, and tested update reliability. Recommendations are editorially independent.
Last reviewed by WikiWalls editorial. Recommendations are editorially independent. Methodology: /test-methodology/. Editorial standards: /editorial-standards/.