FixMyTakeout

Import a Google Takeout export into Immich with the right dates

Immich puts each photo on the timeline by the capture date inside the file, and by the file's modified time when there is none. A fixed export has both, so photos land on the day they were taken instead of the day they were uploaded.

As at 29 September 2026, for the current Immich server and CLI.

Date Immich readsEXIF DateTimeOriginal (and its sub-second form)
No date inside the fileThe file's modified time
CaptionsImageDescription, then Description

Upload with the Immich CLI

The command-line uploader is the reliable route for thousands of files, and it keeps each file's modified time, which Immich uses as the fallback date.

  1. Fix the export with FixMyTakeout and unzip every fixmytakeout-part- zip into one folder, for example ~/Pictures/takeout-fixed. Use your computer's own unzip so each file keeps the date the zip gives it.
  2. Install the CLI: npm i -g @immich/cli.
  3. In Immich, open Account Settings, create an API key, then log in from the terminal: immich login https://your-immich-server/api YOUR_API_KEY.
  4. Try a dry run first: immich upload --recursive --dry-run ~/Pictures/takeout-fixed.
  5. Upload for real: immich upload --recursive ~/Pictures/takeout-fixed. The CLI does not look inside subfolders unless you pass --recursive.
  6. To turn each folder (each "Photos from" year and each album) into an Immich album, add --album.
npm i -g @immich/cli
immich login https://your-immich-server/api YOUR_API_KEY
immich upload --recursive --album ~/Pictures/takeout-fixed

Commands and flags from the Immich CLI documentation.

Or upload in the web app

  1. Unzip the parts as above.
  2. Open Immich in your browser and click Upload.
  3. Select the files. The web uploader sends each file's modified time along with it, so undated files still fall back to the right day.

For a large library the CLI is easier to restart if something interrupts it.

Which date Immich uses

Immich's metadata service takes the first of these tags that holds a valid date. The ones marked below are written by FixMyTakeout when a file needs them.

OrderTag Immich readsWritten by FixMyTakeout
1SubSecDateTimeOriginalDerived from DateTimeOriginal
2SubSecCreateDateDerived from CreateDate
3DateTimeOriginalYes, photos
4CreationDateYes, videos (Apple's Keys tag)
5CreateDateYes, photos and videos
6MediaCreateDateYes, videos
7 to 11DateTimeCreated, GPSDateTime, DateTimeUTC, SonyDateTime2, SourceImageCreateTimeNot needed

If none is present, Immich takes the earliest of the date the uploader reports for the file and the stored file's own dates. Both the CLI and the web app report the file's modified time, which FixMyTakeout sets to the capture time when you unzip. An XMP sidecar next to a file overrides all of the embedded dates; FixMyTakeout does not create sidecars, so the dates inside the files are the ones that count.

Tag order from Immich's server code, metadata.service.ts; sidecar behavior from XMP sidecars.

Location and captions

Immich reads GPSLatitude and GPSLongitude and ignores a position of exactly 0, 0, which is what Takeout writes when a photo has no location. FixMyTakeout writes GPS only from real coordinates, so photos without a place stay off the map rather than landing in the Gulf of Guinea.

For captions Immich takes ImageDescription, then Description (the XMP dc:description field). FixMyTakeout writes a caption you typed in Google Photos into both.

When immich-go is the better choice

If Immich is the only place your photos are going and you are comfortable in a terminal, the free open-source immich-go reads Takeout zips directly and matches the JSON files itself:

immich-go upload from-google-photos --server=https://your-immich-server --api-key=YOUR_API_KEY /path/to/takeout-*.zip

Two things to know before choosing it. It skips any file that has no JSON file unless you add --include-unmatched. And it sends the dates to Immich rather than writing them into the files, so the photos themselves stay undated. FixMyTakeout suits you when you also want a fixed copy of every file for a drive, a second library or a backup, or when you would rather not use the command line.

Check the result

  1. Open a photo in Immich and click the info button. The date and place should match what Google Photos showed.
  2. Open fixmytakeout-report.csv and filter the date_source column for none found: those files had no date anywhere and will sit at their export date.
  3. Screenshots and saved images are the quickest spot check, because those are the files that had no date inside them before.