# Takeoutfix > Takeoutfix fixes a Google Photos export made with Google Takeout. Takeout keeps each photo's capture date, GPS location and caption in a separate JSON file (IMG_1234.jpg.json, IMG_1234.jpg.supplemental-metadata.json and cut-off variants such as .suppl.json), so importing into Apple Photos, Lightroom, a NAS or another cloud scrambles the timeline. Takeoutfix matches every photo and video to its JSON and writes the date, GPS and caption back into the files, in the person's browser; nothing is uploaded. The scan and 20 files are free; fixing a whole library costs $9 once, with free re-runs of the same library for 7 days. No account, no subscription. Made by Nobody (https://getnobody.org). Not affiliated with Google. ## How it works 1. Export Google Photos with Google Takeout (.zip, largest part size) and download every part. 2. Open https://takeoutfix.getnobody.org in Chrome or Edge on a computer and add all the zip parts at once (or the folder they were extracted into). Nothing is unzipped to disk and nothing is uploaded. 3. The free scan indexes every part, reads every JSON sidecar and matches it to its photo or video, including supplemental-metadata names, names cut off at 51 characters, "(1)" duplicates, -edited copies (and localized ones such as -bearbeitet and -modifié), Live Photo pairs and album copies. It shows the match rate and how many files will be fixed. 4. Fix 20 files free to import and check, or pay $9 for the whole library. 5. Takeoutfix writes a fixed copy of every file into a folder you choose, sorted by year and month (or year, or Takeout's own folders): EXIF for JPEG, HEIC, PNG, WebP, AVIF and TIFF (XMP inside GIF); the creation time inside MP4, MOV and 3GP videos, plus GPS and caption for videos up to 64 MB (larger videos get those in an .xmp file); an .xmp file next to camera RAW, BMP and videos that can't be edited in a browser (AVI, MKV, MPEG, WMV, WebM). Album copies and duplicates can be skipped. 6. A report (also saved as takeoutfix-report.csv) lists every file, what was written, and anything that couldn't be fixed and why. Limits it states honestly: a browser can't set file modified dates (the dates are inside the files, which photo apps read); EXIF local times are written in a chosen time zone with the offset; Live Photos can't be merged back into one Apple Live Photo. ## Use it from your AI - MCP server: `https://takeoutfix.getnobody.org/mcp/` (Streamable HTTP). Add it to Claude or ChatGPT as a custom connector. Create a key with `POST /api/v1/workspaces`. - Tools, all read-only: get_supported_formats, match_takeout_files, explain_sidecar, get_takeout_guide, get_pricing, list_passes. No tool reads, writes or receives a photo; fixing happens in the person's browser. - Useful for: explaining why Apple Photos shows the wrong dates after a Takeout import, pairing a list of Takeout file names with their JSON files, showing what date and place a given JSON holds, walking someone through the Takeout export, and quoting the price. ## REST API - Base URL: `https://takeoutfix.getnobody.org/api/v1`, JSON. OpenAPI: `/api/v1/openapi.json`. - Public: `POST /workspaces` (returns a key and MCP URL), `GET /pricing`, `GET /formats`, `GET /guide`, `POST /match` (`{ media: [{ path, size }], sidecars: [{ path, title? }] }`, up to 2,000 of each, paths relative to the Google Photos folder), `POST /sidecars/explain` (`{ fileName, sidecar, timeZone? }`). - With `Authorization: Bearer `: `POST /checkout` (`{ library: { libraryHash, mediaCount, sidecarCount } }`), `POST /passes/{passId}/confirm`, `GET /passes?library=`, `GET /passes/{passId}`, `POST /passes/{passId}/runs` (`{ libraryHash, mediaCount, sidecarCount }`). - Paying: `POST /checkout` returns a pending pass and a Razorpay order; the person pays in Razorpay's window in the browser, and `POST /passes/{passId}/confirm` with the signed result (`razorpay_payment_id`, `razorpay_order_id`, `razorpay_signature`) marks it paid after the signature is verified. Sending `{}` asks Razorpay directly, for a confirm that was interrupted. - A pass is bound to the library hash: the lowercase hex SHA-256 of the library's sorted file list (path and size of every photo and video) and its JSON count, computed in the browser. Only the hash and the two counts are ever sent. - Errors are `{ error, message }`. 402 means the library isn't paid for or its 7 days of re-runs are over, 409 means the pass is for a different library, 413 means a request or library is too large, 429 means a limit was hit (10 checkouts per workspace per hour, 50 runs per pass, and per-network limits). ## Pricing Scanning, the match report and fixing 20 files are free. Fixing a whole library costs $9 (US dollars), paid once. For 7 days after paying, the same library can be run again as often as needed. No subscription. ## Guides - Index: https://takeoutfix.getnobody.org/guides/ - supplemental-metadata.json files: https://takeoutfix.getnobody.org/guides/supplemental-metadata-json/ - .suppl.json and cut-off names: https://takeoutfix.getnobody.org/guides/suppl-json-and-cut-off-names/ - photoTakenTime vs creationTime: https://takeoutfix.getnobody.org/guides/phototakentime-vs-creationtime/ - Apple Photos shows the wrong date after Takeout: https://takeoutfix.getnobody.org/guides/apple-photos-wrong-date-after-takeout/ - Google Photos to Apple Photos: https://takeoutfix.getnobody.org/guides/google-photos-to-apple-photos/ - -edited and (1) duplicate files: https://takeoutfix.getnobody.org/guides/edited-and-duplicate-files/ - Sitemap: https://takeoutfix.getnobody.org/sitemap.xml ## Legal - Terms of Service: https://takeoutfix.getnobody.org/terms - Privacy Policy: https://takeoutfix.getnobody.org/privacy