Google Timeline Converter

See the Timeline you exported from Google Maps on a map, day by day, and save any date range as GPX, KML or a table of trips.

Opens
Android, iPhone and Takeout exports
Exports
GPX, KML, GeoJSON, CSV, XLSX
Files
.json.zip
Uploads
None

Drop your Timeline export here

Timeline.json from Android, location-history.json from iPhone, or a Takeout .zip, Records.json and monthly files. Several at once are fine.

Read in this tab: nothing is uploaded. Only map tiles are downloaded.

Not affiliated with Google. Google Maps and Timeline are trademarks of Google LLC.

See it work

A week from an Android phone: one day picked, saved as GPX and a trips table
The sample Timeline.json, an invented week in Lisbon, opens on the map. One day is picked from the Days list, the Trips tab lists its trips with distances, and the day is saved as GPX next to the trips CSV. Recorded automatically from this page.

How to export your Timeline

On Android, on iPhone, and what older Takeout archives hold

Since 2024 Google keeps Timeline on your phone, not in your account, so the export is made on the phone. Copy the file to your computer, or open this page on the phone itself.

Android

  1. Open the phone’s Settings app.
  2. Go to Location, then Location services, then Timeline.
  3. Tap Export Timeline data, then Continue.
  4. Pick a folder and tap Save. The file is Timeline.json.

iPhone and iPad

  1. Open the Google Maps app and tap your profile picture or initial.
  2. Tap Settings, then Location & Privacy.
  3. Tap Export Timeline data, then Save to Files.
  4. Pick a folder and tap Save. The file is location-history.json.

Older Takeout archives

Before the move to phones, Google Takeout delivered Location History as a zip with Records.json (every position) and aSemantic Location History folder of monthly files (trips and places). Drop the zip, or the files from it, as they are.

Steps as in Google’s help article Manage your Google Maps Timeline, checked in November 2026. Menu names change between versions.

Which file do you have

Four formats, told apart by what is inside, with a fragment of each

The converter looks at the first lines of the file, not its name, which Google translates. The fragments come from the sample: an invented week in Lisbon written in all four formats, not anyone’s real history. Its routes are © OpenStreetMap contributors (ODbL), routed with OSRM.

Android Timeline export

Timeline.json, Android phone, since 2024

Coordinates are text with degree signs; times carry the zone offset of the phone at export time.

{
  "semanticSegments": [
    {
      "startTime": "2025-05-12T06:48:12.000+01:00",
      "endTime": "2025-05-12T07:09:29.000+01:00",
      "startTimeTimezoneUtcOffsetMinutes": 60,
      "endTimeTimezoneUtcOffsetMinutes": 60,
      "visit": {
        "hierarchyLevel": 0,
        "probability": 0.8541582822799683,
        "topCandidate": {
          "placeId": "ChIJsamplegH-HeB1srMhgCFYfE",
          "semanticType": "UNKNOWN",
          "probability": 0.913422167301178,
          "placeLocation": {
            "latLng": "38.7692996°, -9.1287999°"
          }
        }
      }
    },
    {
      "startTime": "2025-05-12T07:09:29.000+01:00",
      "endTime": "2025-05-12T07:28:19.000+01:00",
      "startTimeTimezoneUtcOffsetMinutes": 60,
      "endTimeTimezoneUtcOffsetMinutes": 60,
      "activity": {
        "start": {
          "latLng": "38.7686953°, -9.129343°"
        },
        "end": {
          "latLng": "38.7134114°, -9.1377841°"
        },
        "distanceMeters": 6436,
        "topCandidate": {
          "type": "IN_PASSENGER_VEHICLE",
          "probability": 0.800289511680603
        }
      }
    },
    {
      "startTime": "2025-05-12T05:00:00.000+01:00",
      "endTime": "2025-05-12T07:00:00.000+01:00",
      "timelinePath": [
        {
          "point": "38.769316°, -9.1288332°",
          "time": "2025-05-12T06:49:00.000+01:00"
        }
      ]
    },
    …
  ],
  "rawSignals": [
    {
      "position": {
        "LatLng": "38.7134977°, -9.1386798°",
        "accuracyMeters": 23,
        "source": "WIFI",
        "timestamp": "2025-05-17T00:06:57.000+01:00"
      }
    },
    …
  ],
  "userLocationProfile": …
}

iOS Timeline export

location-history.json, iPhone, since 2024

A bare list; every number is a string. Path points count minutes from the segment start.

[
  {
    "endTime": "2025-05-12T07:28:19.785+01:00",
    "startTime": "2025-05-12T07:09:29.757+01:00",
    "activity": {
      "probability": "0.839362",
      "end": "geo:38.713411,-9.137784",
      "topCandidate": {
        "type": "in passenger vehicle",
        "probability": "0.662168"
      },
      "distanceMeters": "6436.397461",
      "start": "geo:38.768695,-9.129343"
    }
  },
  {
    "endTime": "2025-05-12T06:00:00.000Z",
    "startTime": "2025-05-12T04:00:00.000Z",
    "timelinePath": [
      {
        "point": "geo:38.769316,-9.128833",
        "durationMinutesOffsetFromStartTime": "109"
      }
    ]
  },
  …
]

Takeout Records.json

Records.json, Takeout, until 2024

Every raw position, from seconds to minutes apart, with accuracy and device. No trips or places.

{
  "locations": [
    {
      "latitudeE7": 387686953,
      "longitudeE7": -91293430,
      "accuracy": 11,
      "source": "GPS",
      "deviceTag": -1187253410,
      "timestamp": "2025-05-12T06:09:33.686Z"
    },
    …
  ]
}

Takeout Semantic Location History

2025_MAY.json, Takeout, until 2024

One file a month: trips with Google’s distance and visited places with names.

{
  "timelineObjects": [
    {
      "activitySegment": {
        "startLocation": {
          "latitudeE7": 387686953,
          "longitudeE7": -91293430
        },
        "endLocation": {
          "latitudeE7": 387134114,
          "longitudeE7": -91377841
        },
        "duration": {
          "startTimestamp": "2025-05-12T06:09:29Z",
          "endTimestamp": "2025-05-12T06:28:19Z"
        },
        "distance": 6436,
        "activityType": "IN_PASSENGER_VEHICLE",
        "waypointPath": {
          "waypoints": [
            {
              "latE7": 387687994,
              "lngE7": -91289155
            },
            …
          ]
        }
      }
    },
    …
  ]
}

Tested on real exports

13 public files and 12 quirk files, checked against an independent reading

Each file is read twice: by this converter, and by a separate, plain Python script that loads it whole. The counts must match exactly, the distances to 5 cm. 13 of 13 public files match.

ExportFormatPointsVisitsTripsYears
google-takeout-to-sqliteLocation History.jsonTakeout Records.json2002015
bionicLocation History.jsonTakeout Records.json4002014 to 2021
bionic2020_January.jsonTakeout Semantic Location History3112020
kgeo-timelinerecords.jsonTakeout Records.json12002015
kgeo-timelinesemantic-2021-august.jsonTakeout Semantic Location History32964612021
niimpyRecords.jsonTakeout Records.json7002016 to 2023
timeline_geotaggerbasic_example.jsonAndroid Timeline export45132023 to 2025
gtlparserexample_timeline.jsonAndroid Timeline export18811132023
POC-BrowserDAOios-location-history.jsoniOS Timeline export711072024
POC-BrowserDAOandroid-location-history.jsonAndroid Timeline export9112024
POC-BrowserDAOlocation-history.jsonAndroid Timeline export141072024
kgeo-timelinesettings.jsonNot location data: refused
kgeo-timelinetimeline-edits.jsonNot location data: refused

The quirk files are ours: a byte-order mark, degree signs mangled to ° or saved as a Latin-1 byte, coordinates overflowed past 32 bits, two phones in one file, offsets that disagree, iPhone times in mixed zones. GPX exports of every file pass the GPX 1.1 schema and KML exports the OGC KML 2.2 schema; GPSBabel 1.8.0 reads them back with the same numbers of points.

What Google doesn’t save, and how accurate it is

Gaps, jumps, and why the mileage is an estimate
GapsThe phone records only while location is on and the battery allows it. A day can have a morning and an evening and nothing between; the map draws a straight line across the gap.
JumpsPositions from Wi-Fi and cell towers can be off by hundreds of metres. Records.json keeps each position’s accuracy, and the CSV export includes it, so you can filter them out.
MileageTrip distances are Google’s own estimate when the export has one, otherwise measured as straight lines between the recorded points. Neither is an odometer: sparse points cut corners, noisy ones add distance.
ActivitiesDriving, cycling or the bus are Google’s guesses. The converter shows them as written and doesn’t correct them.
TimesPhone exports say in which time zone each segment happened, and days are counted in it. Takeout files store UTC only, so their days follow your device’s current time zone.

Limits

Formats, size, and what isn’t in the exports
SizeFiles are read as a stream in a background worker, so exports of about 1 GB open on a desktop computer. Phones have less memory; split a very large history into years with the date range before exporting.
iPhoneThe iPhone export has no altitude, accuracy or speed, and its path points are a minute apart at best.
Several phonesRecords.json can mix the positions of every phone you owned. They are kept apart by device, the one with most points first, so the track doesn’t jump between two pockets.
New variantsGoogle changes the export format without notice. If your file isn’t recognised, the error names what the file starts with; the converter never guesses from the file name.
Not readTimeline edits, Settings.json, Wi-Fi scans and activity guesses between positions. Place names exist only in Takeout monthly files.

Questions

How do I convert Google Timeline JSON to GPX?

Drop the file above, pick the days with the date range or the Day, Month and Year buttons, and press GPX. Each day becomes one track, and visited places become waypoints. Tick “one track per trip” to get a track per drive, walk or ride with its activity as the type.

Can I see my Timeline on a computer again?

Yes, from the exported file. Google Maps on the web no longer shows Timeline, but the export from your phone opens here with every day on the map, the places you visited and your trips.

Which file do I need from an old Takeout?

Records.json for every recorded position, the Semantic Location History files for trips and places, or simply the whole zip. With both, the positions come from Records.json and the trips from the monthly files.

Can I use it as a mileage log?

The Trips tab lists each trip with its date, start and end time, places, activity and kilometres, and Trips XLSX saves it for Excel or Numbers. The distances are estimates from phone data, so check them against your odometer before you claim expenses.

Does it work with the iPhone export?

Yes. The iPhone’s location-history.json is a different format from Android’s, with every number written as text; both are recognised. It has less detail: no altitude, accuracy or speed.

Is my location history uploaded?

No. The file is read in your browser, in a background worker, and nothing is sent anywhere. The only downloads are the map tiles of the area you look at, from the map provider you pick.

More tools in Maps.