What's in your Google Maps Timeline export

Updated

Google has used four different file layouts for location history over the years: two current ones from the phone (Android and iPhone) and two older ones from Google Takeout. They describe the same things (places you stayed, trips between them and raw GPS points) in different shapes. This page walks through each format field by field. All examples below use made-up coordinates.

TimelineMap detects the format automatically. Your file is processed on your device and never uploaded to our servers.

New Android export: Timeline.json

This is what Export Timeline data produces on Android. It is one JSON object with three top-level keys.

{
  "semanticSegments": [
    {
      "startTime": "2026-05-02T08:10:00.000+03:00",
      "endTime": "2026-05-02T08:42:00.000+03:00",
      "startTimeTimezoneUtcOffsetMinutes": 180,
      "endTimeTimezoneUtcOffsetMinutes": 180,
      "visit": {
        "hierarchyLevel": 0,
        "probability": 0.91,
        "topCandidate": {
          "placeId": "ChIJ-synthetic-example",
          "semanticType": "HOME",
          "probability": 0.87,
          "placeLocation": { "latLng": "47.1500000°, 27.5800000°" }
        }
      }
    },
    {
      "startTime": "2026-05-02T08:42:00.000+03:00",
      "endTime": "2026-05-02T09:05:00.000+03:00",
      "activity": {
        "start": { "latLng": "47.1500000°, 27.5800000°" },
        "end": { "latLng": "47.1620000°, 27.6010000°" },
        "distanceMeters": 2140.5,
        "topCandidate": { "type": "IN_PASSENGER_VEHICLE", "probability": 0.8 }
      }
    },
    {
      "startTime": "2026-05-02T08:00:00.000+03:00",
      "endTime": "2026-05-02T10:00:00.000+03:00",
      "timelinePath": [
        { "point": "47.1510000°, 27.5830000°", "time": "2026-05-02T08:45:00.000+03:00" }
      ]
    }
  ],
  "rawSignals": [
    {
      "position": {
        "LatLng": "47.1512345°, 27.5834567°",
        "accuracyMeters": 12,
        "altitudeMeters": 61.2,
        "source": "WIFI",
        "timestamp": "2026-05-02T08:45:03.000+03:00"
      }
    }
  ],
  "userLocationProfile": {
    "frequentPlaces": [
      { "placeId": "ChIJ-synthetic-example", "placeLocation": "47.1500000°, 27.5800000°", "label": "HOME" }
    ]
  }
}

semanticSegments

The main list. Each segment is a stretch of time with a start and an end:

  • startTime / endTime: ISO timestamps that include the local UTC offset, for example +03:00.
  • startTimeTimezoneUtcOffsetMinutes / endTimeTimezoneUtcOffsetMinutes: the same offset in minutes. These let TimelineMap place each entry on the right local day, wherever you were at the time.

Each segment then carries one of three payloads:

  • visit: a stay somewhere. topCandidate.placeId is Google's internal place ID, topCandidate.semanticType is a label such as HOME, WORK, SEARCHED_ADDRESS or UNKNOWN, probability is how sure Google was, and placeLocation.latLng holds the coordinates as a text string like "47.15°, 27.58°".
  • activity: a trip. start and end hold latLng strings, distanceMeters is the estimated distance, and topCandidate.type is the guessed mode: WALKING, CYCLING, IN_PASSENGER_VEHICLE, IN_BUS, IN_TRAIN, FLYING and so on.
  • timelinePath: a list of {point, time} entries, each a coordinate string with its timestamp. These are the dots that draw the actual route.

rawSignals

Lower-level data the phone collected. Three kinds appear:

  • position: a single fix with LatLng (note the capital letters), accuracyMeters, altitudeMeters, source (GPS, Wi-Fi, cell) and timestamp.
  • wifiScan: nearby Wi-Fi access points seen at a moment, with signal strengths. No coordinates.
  • activityRecord: the phone's motion guesses (still, walking, in vehicle) with confidence values.

Raw signals usually cover only recent weeks. Older history exists only as semantic segments.

userLocationProfile

Google's summary of you: frequentPlaces (place IDs and coordinates labelled HOME, WORK and so on) and sometimes a persona block with travel-mode affinities. TimelineMap uses the home entry, when present, to work out days away from home and your furthest point.

New iPhone export

The Google Maps app on iPhone exports the same information in a different shape, which is why tools written for the Android file often fail on it.

[
  {
    "startTime": "2026-05-02T08:10:00.000+03:00",
    "endTime": "2026-05-02T08:42:00.000+03:00",
    "visit": {
      "hierarchyLevel": "0",
      "probability": "0.91",
      "topCandidate": {
        "placeID": "ChIJ-synthetic-example",
        "semanticType": "Home",
        "probability": "0.87",
        "placeLocation": "geo:47.150000,27.580000"
      }
    }
  },
  {
    "startTime": "2026-05-02T08:00:00.000+03:00",
    "endTime": "2026-05-02T10:00:00.000+03:00",
    "timelinePath": [
      { "point": "geo:47.151000,27.583000", "durationMinutesOffsetFromStartTime": "45" }
    ]
  }
]
  • The top level is a plain array of segments, not an object with semanticSegments.
  • Coordinates are "geo:47.15,27.58" strings instead of degree strings.
  • Numbers such as probabilities and distances are stored as strings ("0.91").
  • The place ID key is spelled placeID.
  • timelinePath points have a durationMinutesOffsetFromStartTime instead of a timestamp; the time is the segment's startTime plus that many minutes.
  • There is no rawSignals section.

Old Takeout: Records.json

From Google Takeout before the December 2024 change. It is a single huge list of raw points, often hundreds of megabytes for a long history.

{
  "locations": [
    {
      "latitudeE7": 471512345,
      "longitudeE7": 275834567,
      "accuracy": 14,
      "altitude": 61,
      "velocity": 3,
      "heading": 120,
      "activity": [
        {
          "timestamp": "2019-03-14T07:45:10.120Z",
          "activity": [
            { "type": "IN_VEHICLE", "confidence": 76 },
            { "type": "STILL", "confidence": 12 }
          ]
        }
      ],
      "source": "WIFI",
      "deviceTag": 1234567890,
      "timestamp": "2019-03-14T07:45:03.000Z"
    }
  ]
}
  • latitudeE7 / longitudeE7: integers equal to degrees × 107. Divide by 10,000,000 to get normal coordinates: 471512345 → 47.1512345°.
  • timestamp: an ISO time in UTC. Older files use timestampMs instead, milliseconds since 1970 stored as a string.
  • accuracy: estimated error radius in metres.
  • altitude, velocity (m/s) and heading (degrees): present only on some points.
  • activity[]: motion guesses, each with its own timestamp and a list of {type, confidence} pairs (confidence 0–100).
  • source: GPS, WIFI or CELL.
  • deviceTag: a number identifying which phone recorded the point.

Old Takeout: Semantic Location History

A folder with one subfolder per year and one file per month, named like 2019/2019_MARCH.json. Each file has a timelineObjects array, and each object is either a placeVisit or an activitySegment.

{
  "timelineObjects": [
    {
      "placeVisit": {
        "location": {
          "latitudeE7": 471500000,
          "longitudeE7": 275800000,
          "placeId": "ChIJ-synthetic-example",
          "name": "Example Café",
          "address": "1 Example Street"
        },
        "duration": {
          "startTimestamp": "2019-03-14T06:10:00Z",
          "endTimestamp": "2019-03-14T06:42:00Z"
        },
        "placeConfidence": "HIGH_CONFIDENCE"
      }
    },
    {
      "activitySegment": {
        "startLocation": { "latitudeE7": 471500000, "longitudeE7": 275800000 },
        "endLocation": { "latitudeE7": 471620000, "longitudeE7": 276010000 },
        "duration": {
          "startTimestamp": "2019-03-14T06:42:00Z",
          "endTimestamp": "2019-03-14T07:05:00Z"
        },
        "distance": 2140,
        "activityType": "IN_PASSENGER_VEHICLE",
        "waypointPath": { "waypoints": [{ "latE7": 471550000, "lngE7": 275900000 }] },
        "simplifiedRawPath": { "points": [{ "latE7": 471560000, "lngE7": 275910000, "timestamp": "2019-03-14T06:50:00Z" }] }
      }
    }
  ]
}
  • placeVisit.location: E7 coordinates, placeId, and in these older files usually a name and address too.
  • placeVisit.duration: startTimestamp and endTimestamp in UTC.
  • placeVisit.placeConfidence: HIGH_CONFIDENCE, MEDIUM_CONFIDENCE, and so on.
  • activitySegment.startLocation / endLocation: E7 coordinates of the trip ends.
  • activitySegment.distance: metres. activityType: the travel mode.
  • waypointPath (snapped route points) and simplifiedRawPath (thinned GPS points with timestamps): the shape of the trip.

What TimelineMap uses

Every format is turned into the same three things:

  • Visits: start, end, coordinates, place ID, semantic type and name (if the file has one).
  • Trips: start, end, travel mode, distance and the route points.
  • Points: time, coordinates and accuracy, from timelinePath, rawSignals positions or Records.json.

Wi-Fi scans, activity records, persona data, velocity and heading are ignored. Paths are simplified for drawing on the map, while exports keep full detail.

Why place names are usually missing

The new phone exports contain only a place ID and coordinates for most visits, not the name of the café or shop. Looking names up would mean sending your locations to the Google Places service, which costs money and would take your history off your device, so TimelineMap doesn't do it. Instead, it shows the city and country from an offline dataset, and you can name places yourself. Those names are stored only in your browser. Old Semantic Location History files usually do include names, and TimelineMap shows them.

Ready to look at yours? Open your file, or see how to export it first.