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
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
- Open the phone’s Settings app.
- Go to Location, then Location services, then Timeline.
- Tap Export Timeline data, then Continue.
- Pick a folder and tap Save. The file is
Timeline.json.
iPhone and iPad
- Open the Google Maps app and tap your profile picture or initial.
- Tap Settings, then Location & Privacy.
- Tap Export Timeline data, then Save to Files.
- 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
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
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
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
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.
| Export | Format | Points | Visits | Trips | Years |
|---|---|---|---|---|---|
| google-takeout-to-sqliteLocation History.json | Takeout Records.json | 2 | 0 | 0 | 2015 |
| bionicLocation History.json | Takeout Records.json | 4 | 0 | 0 | 2014 to 2021 |
| bionic2020_January.json | Takeout Semantic Location History | 3 | 1 | 1 | 2020 |
| kgeo-timelinerecords.json | Takeout Records.json | 12 | 0 | 0 | 2015 |
| kgeo-timelinesemantic-2021-august.json | Takeout Semantic Location History | 329 | 64 | 61 | 2021 |
| niimpyRecords.json | Takeout Records.json | 7 | 0 | 0 | 2016 to 2023 |
| timeline_geotaggerbasic_example.json | Android Timeline export | 45 | 1 | 3 | 2023 to 2025 |
| gtlparserexample_timeline.json | Android Timeline export | 188 | 11 | 13 | 2023 |
| POC-BrowserDAOios-location-history.json | iOS Timeline export | 71 | 10 | 7 | 2024 |
| POC-BrowserDAOandroid-location-history.json | Android Timeline export | 9 | 1 | 1 | 2024 |
| POC-BrowserDAOlocation-history.json | Android Timeline export | 14 | 10 | 7 | 2024 |
| kgeo-timelinesettings.json | Not location data: refused | ||||
| kgeo-timelinetimeline-edits.json | Not 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
| Gaps | The 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. |
|---|---|
| Jumps | Positions 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. |
| Mileage | Trip 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. |
| Activities | Driving, cycling or the bus are Google’s guesses. The converter shows them as written and doesn’t correct them. |
| Times | Phone 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
| Size | Files 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. |
|---|---|
| iPhone | The iPhone export has no altitude, accuracy or speed, and its path points are a minute apart at best. |
| Several phones | Records.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 variants | Google 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 read | Timeline 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.