Move Google Photos to Immich: Keep Dates, Locations and Albums

7 min read

,
Immich web and mobile app screenshots showing a photo timeline, the destination when moving Google Photos to Immich

The safest way to move Google Photos to Immich is to export with Google Takeout, then import the archives with immich-go. That tool reads Google’s JSON sidecar files alongside the photos, which gives dates, locations and albums a better chance of arriving correctly. It is still a migration to check, not a promise that every piece of Google Photos metadata will transfer.

Do not delete your Google library after the first import. Keep the Takeout ZIP files, compare a sample of older photos and videos in Immich, and make a separate backup of the new library before you remove anything.

What you need before you start

  • A machine to run Immich. Immich recommends a 64-bit Linux server with at least 6GB of RAM (8GB recommended) and 2 CPU cores (4 recommended). A small PC, mini server or NAS that can run Docker works. Our home server and NAS beginner’s guide covers choosing the hardware.
  • Docker with the Compose plugin. Immich’s docs say to use docker compose, not the older standalone docker-compose.
  • Enough disk space for your library plus thumbnails and the database.
  • A computer with fast access to the Takeout files to run immich-go. It can be the server itself.
  • Time. Google says a Takeout export can take hours or days, and the import plus Immich’s background processing of a large library will take a while too.

You need enough space for the original media, Immich’s thumbnails and database, and the Takeout download while you import. Immich says its PostgreSQL database should be on local storage, ideally an SSD, rather than a network share. Check the current Immich requirements for your server before installing.

Step 1: Export your library with Google Takeout

Google Takeout (takeout.google.com) is Google’s official export tool. Google’s help page explains that you choose which products to include, a delivery method and a file type and size.

  1. Go to takeout.google.com and sign in.
  2. Google pre-selects every product you use. Deselect everything except Google Photos. The “All data included” button lets you narrow down what is exported, but for a full migration leave everything selected.
  3. Click Next step.
  4. Choose a destination. Google offers a download link by email, or adding the files to Google Drive, Dropbox, OneDrive or Box. Files added to Drive count toward your Google storage.
  5. Choose Export once. Google also offers scheduled exports every two months for a year, and for Google Photos those can be incremental, covering only new and updated data.
  6. Set file type to .zip. immich-go reads ZIP files directly but does not read .tgz, which you would have to extract first.
  7. Choose a large archive size. The immich-go best-practice guide suggests 50GB parts, which keeps the number of files down.
  8. Click Create export and wait for the email.

A few things Google says about exports are worth knowing up front. Data that is in the process of being deleted is not included, you cannot pick a custom date range, and larger exports are split across multiple archives. Download every part and check that each file finished downloading. A missing part is the most common cause of photos that end up without their metadata.

Why you should not just unzip and upload

Open a Takeout archive and you will see your photos and videos sitting next to JSON files with similar names. Those JSON “sidecar” files hold information Google keeps outside the image: the date the photo was taken (especially for images that had no EXIF date), GPS coordinates, the description you added, whether it was a favorite, archived or in the trash, and which albums it belonged to.

Matching each JSON file to its photo is messy. Long file names are truncated, duplicates get numbered suffixes, edited copies have their own names, and a photo’s JSON can even end up in a different ZIP part from the photo. The immich-go technical docs describe a “puzzle solver” that tries a series of name-matching rules to pair them correctly. A plain drag-and-drop upload does none of this, so dates and locations can be wrong or missing.

Step 2: Install Immich with Docker Compose

The official Docker Compose method is the one Immich recommends for most people. On your server:

mkdir ./immich-app
cd ./immich-app
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Open .env in a text editor and set these values:

  • UPLOAD_LOCATION: where your photos will be stored, for example ./library or a path on your large drive.
  • DB_DATA_LOCATION: where the database lives, for example ./postgres on a local SSD.
  • TZ: your time zone, such as Europe/London or Asia/Kolkata.
  • DB_PASSWORD: change the default to a random password using only the characters A-Za-z0-9.
  • IMMICH_VERSION: the default v3 tracks the current major release.

Then start the stack:

docker compose up -d

Open http://<server-ip>:2283 in a browser and click Getting Started. The first account you create becomes the administrator. If other people in your household are moving their libraries too, create their accounts under Administration > Users and give each person their own import.

Two compatibility notes from Immich’s requirements page: from v3, the machine learning container on amd64 needs a CPU with x86-64-v2 support, and a system with 4GB of RAM can work if you disable machine learning, at the cost of face recognition and smart search.

Set your storage layout before importing

Immich’s storage template decides how uploaded files are arranged on disk. If you want a particular folder layout, set it in Administration > Settings > Storage Template before the large import. You can change it later, but Immich then has to migrate existing files.

Immich storage template settings page with template presets and a preview of the folder path used when moving Google Photos to Immich
Set the storage template in Administration > Settings before you import. Screenshot: Immich documentation

Create an API key and install immich-go

In Immich, create an API key for the account that should own the imported photos. Keep the key private. Download immich-go from the project’s official releases for your computer, then check its current upload documentation before running a command. immich-go is a separate project, not part of Immich itself.

Test the import before uploading

Put all the Takeout ZIP parts together. A photo and its JSON metadata can end up in different parts, so point immich-go at the whole export rather than importing one archive at a time. Replace the example server address, API key and path below with your own values.

immich-go upload from-google-photos \
  --server=http://your-server-ip:2283 \
  --api-key=YOUR_API_KEY \
  --dry-run \
  /path/to/takeout-*.zip

The --dry-run flag simulates the upload. Check the summary for unmatched files or counts that look wrong. If you are happy with it, remove that flag and run the same command to begin the real import. Keep your API key out of screenshots and shared command history.

What comes across, and what needs checking

immich-go can use Takeout JSON to recover dates, GPS coordinates and descriptions where available. It can recreate albums, and its current options include importing archived or partner photos. The defaults do not include trashed photos. People names can be added as tags; they do not recreate Google’s face groups. Immich performs its own face detection afterwards.

Immich Explore page showing the People row from facial recognition
Immich runs its own facial recognition after import, so people are named again. Screenshot: Immich documentation

Shared links, Google Photos Memories and some edits need separate attention. Compare a sample from different years, including edited photos, videos and items from shared albums. If a date or location is wrong, check that all ZIP parts were included and that the matching JSON was present. A raw file upload without those sidecars may lose information that Takeout kept.

Immich search options panel with filters for people, places, camera, dates and media type
Immich search filters cover people, location, camera and date. Screenshot: Immich documentation

Keep a backup before leaving Google Photos

Once the import finishes, set up the Immich mobile app for new phone photos. Then back up both the uploaded files and the Immich database to another disk or location. An Immich server is not, by itself, a second copy of your library. Only consider deleting the Google copy after checking counts, albums, dates and locations and confirming that your independent backup works.

About the author