Skip to content
AI music for creatorsCreate BGM for your next video.Try Musefy
Google Takeout field guide

YouTube watch-history.json format and fields

Google Takeout stores YouTube watch activity as a JSON array. Each entry describes an activity event, its video or channel information when available, and a timestamp. This guide explains the fields Playback Stats can use and the details the export does not contain.

Typical location
YouTube and YouTube Music/history/watch-history.json
Top-level shape
An array of activity objects
Processing
Locally in your browser

Safe example

What one history entry looks like

A typical file starts with an array and contains one object per recorded activity. This example uses placeholder titles and URLs; it does not contain real viewing data.

You do not need to paste or upload your history to inspect its structure. A local text editor can open JSON, and Playback Stats reads the selected file only inside your browser tab.

watch-history.json
[
  {
    "header": "YouTube",
    "title": "Watched Example video title",
    "titleUrl": "https://www.youtube.com/watch?v=example",
    "subtitles": [
      {
        "name": "Example channel",
        "url": "https://www.youtube.com/channel/example"
      }
    ],
    "time": "2026-07-24T12:34:56.000Z",
    "products": ["YouTube"],
    "activityControls": ["YouTube watch history"]
  }
]

Field reference

How Playback Stats reads each field

Google may omit fields when a video, channel, or activity detail is unavailable. Playback Stats keeps usable records and limits each calculation to the data actually present.

FieldShapeWhat it containsHow it is used
titlestringThe activity label shown in the export, usually including the video title.Used as the video label. If it is missing but titleUrl exists, the event is kept with an “Unknown Video” label.
titleUrlstringThe YouTube URL associated with the activity, when Google can provide one.Used to group repeat views of the same video. Missing URLs make reliable URL-based grouping impossible.
subtitlesarrayOptional source information. A YouTube record commonly stores the channel in the first item.The first subtitles[].name value is used for channel rankings. Records without it remain usable but have no channel attribution.
timeISO 8601 stringThe timestamp attached to the activity event.Used for daily, monthly, weekday, hourly, and streak calculations when it is a valid date.
headerstringThe Google product heading for the activity entry.Not needed for Playback Stats calculations.
products / activityControlsarraysGoogle product and activity-setting metadata included with some records.Not needed for Playback Stats calculations.

Common variations

Why some records have fewer details

A video or channel is unavailable

Deleted, private, or otherwise unavailable videos may have a generic title and no usable URL or channel. The event can still exist in the export.

Channel metadata is missing

The subtitles array is optional. Playback Stats can still count the event, but it cannot include that record in channel rankings without subtitles[].name.

The timestamp is missing or invalid

A record without a valid time value cannot contribute to timelines, hourly patterns, date ranges, or streak calculations.

Important limitation

An activity event is not a watch-duration record

YouTube watch-history.json does not include reliable minutes watched, completion percentage, or resume position for each event. It can support viewing counts and patterns, but not an accurate lifetime watch-time total.

What the file can support

  • Video and channel frequency when identifying fields are available
  • Daily, monthly, weekday, and hourly activity from valid timestamps
  • First and latest recorded events, busiest days, and active-day streaks
  • Patterns within the exported records—not activity removed or never saved by Google

Ready to analyze your export?

Select the original watch-history.json file on Playback Stats. Parsing and analysis happen locally, with no YouTube login, API key, or file upload to a server.

Learn how channel and repeat-video rankings work

Browser only

No upload endpoint

Original JSON

No conversion needed

Open source

Inspect the parser