Yougroup
Blog

Yougroup Blog

Build Your Own YouTube Wrapped From Your Watch History

Build your own YouTube Wrapped: export your history from Google Takeout and compute hours, top channels, and yearly shifts entirely on your machine.

Google has never shipped a Wrapped-style recap for YouTube. Spotify turns a year of listening into shareable slides, while YouTube's built-in time-watched stats offer a single total with no breakdown by channel, year, or theme. One number cannot tell you which channels absorbed your evenings, whether this year ran heavier than last, or where the hour you lost yesterday went.

Build the report yourself instead. Your complete viewing history lives in your Google account, and you can export it through Google Takeout in minutes. Computed on your own machine, with a spreadsheet or a short script, that archive becomes a personal YouTube Wrapped: exact view counts, a top-channels leaderboard, and year-over-year shifts you can act on. Nothing gets uploaded anywhere.

Two routes reach the same output. A no-code spreadsheet track suits power viewers who live in Excel or Google Sheets. A short-script track suits developers who would rather parse the JSON directly. Both end with aggregated counts per channel and per year, entirely on your device.

What your data can and cannot tell you

Know the limits before you count anything. As the Playback Stats guide to the file explains:

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.

This framing sets the scope of the whole project. View counts are exact: every playback event is a record, so counting views by channel and by year is pure arithmetic. Watch-time totals are not exact, because the file records no durations. An accurate hours figure needs an enrichment step, covered below, or honest count-based reporting with hours labeled as an estimate.

YouTube's built-in dashboard hits the same wall from the other side. It shows no per-channel hours, no yearly trend, and no way to separate one habit from another. Inspectable data beats a hand-wavy total, which is the reason to do this at all.

Step 1: export your watch history from Google Takeout

One mistake adds gigabytes to this export: by default, Google bundles every video you have ever uploaded in full. The export walkthrough from Decode My Feed avoids it in three moves.

  1. Open Google Takeout and select the YouTube and YouTube Music product.
  2. Click "All YouTube data included", press "Deselect all", then tick only "history".
  3. Create the export and wait. A history-only archive is usually ready within a few minutes, though Google says preparation can take hours or days.

What arrives is a watch-history file, watch-history.json, with MyActivity.json as a companion depending on the export format. Treat the archive like a bank statement. It is your complete viewing history, so keep it on your machine.

Inside watch-history.json

The file is a JSON array of playback events. Four fields do the real work: the video title, the channel name, the video ID, and the timestamp. The video ID plus timestamp pair identifies a unique view; the title and channel fields power the top-channels leaderboard. Nothing in these fields records how long you watched, only that a view happened.

Clean two kinds of noise before counting. Duplicate events are common, so deduplicate by video_id plus timestamp, the same approach local analyzer tools take. Filter out YouTube Music events as well, or every song stream will inflate your video-viewing stats. And depending on the export, MyActivity.json repeats the same events in Google's activity format; local tools combine both files so nothing is counted twice.

The no-code route: your YouTube watch history stats in a spreadsheet

Excel or Google Sheets is all this track needs.

From across a sunlit kitchen table, hands write with a pen in a soft-focus notebook beside a laptop whose screen faces away from the camera, with a coffee mug and small plant nearby.
Counts, top channels, and yearly shifts can all live in one sheet on your own machine.

Import the history file, or a CSV exported by one of the local tools in the next section. Split the timestamp column into date and time parts so you can group by day, month, and year. Then build two pivot tables: views by channel for the leaderboard, and views by year for the year-over-year comparison.

That is the core report, with zero code: counts, top channels, and yearly shifts in one local spreadsheet file. Nothing gets pasted into a web tool, and every formula stays visible in the sheet.

The script route: analyze your Google Takeout watch history with code

A short script parses the Takeout JSON directly. Load the file, deduplicate by video_id plus timestamp, drop YouTube Music events, then group what remains by channel and by year. Thirty lines of Python or JavaScript covers it, and both tracks converge on the same aggregated output.

Existing tooling saves even that effort. The open-source youtube-history-analyzer, which needs Python 3.8 or newer, runs a terminal interface that combines watch-history.json with MyActivity.json, deduplicates, filters YouTube Music, and exports a CSV ready for Excel or Google Sheets plus an interactive Plotly HTML report. To stay in the browser, Playback Stats parses the Takeout file entirely inside the tab, with no upload to a server.

The developer payoff is inspectability. The whole pipeline is code you can read line by line before running it, which is the point of doing this locally.

How to see your hours watched on YouTube

View counts are exact. Hours are not, because watch-history.json contains no video durations. Two paths close the gap.

The first is enrichment: fetch durations through the YouTube Data API and join them to your events. It mirrors the optional-key design Yougroup uses. The extension reads public channel uploads through YouTube RSS feeds with no API key at all; adding a key is optional and unlocks richer fields such as duration and view counts. One enrichment pass applied to your history yields total hours watched, broken down by channel and by year.

The second is to skip the API and report counts honestly. Top channels and yearly shifts need no durations. If you estimate hours anyway, frame the result as a range or an estimate rather than false precision, and say plainly how you computed it.

Interpreting your numbers

A finished report looks like this. One analyst who published a seven-year breakdown of his own history wrote:

A person sunk into a sofa in a dark living room, face lit only by the glow of an unseen screen, with a bowl of popcorn and a remote on the coffee table.
The yearly total impresses, but the minutes per day are what you can act on.
"I watched 21,396 videos totalling 2,042.5 hours in 7 years since starting my account. That is 255 work days (8h), or 85 full days (24h). 45 minutes per day on average."

The daily average is the number that matters. Totals impress or appall, but the average is what you can act on. Three analyses convert the counts into decisions:

  • Year-over-year comparison. Which years climbed, which dipped, and which channel changes drove the shift. A channel you subscribed to mid-year shows up as a step in the yearly counts.
  • Channel concentration. Sort the leaderboard by share of total views. When a handful of channels absorb most of your viewing, that concentration is the clearest signal for pruning subscriptions.
  • Theme breakdown. Group channels by theme, such as research, recipes, or interviews, and compute the share of views per interest. This is the same idea behind Yougroup's channel Lists, and it answers a question the leaderboard cannot: which interests, rather than which channels, fill your week.

Then adjust. Unsubscribe from the dead weight, rebalance themes that outgrew their purpose, and set a daily-average target you actually want. For a repeatable way to check whether the new setup holds, how to tell whether your YouTube curation system works lays out the evaluation loop. The report is a means to habit adjustment, not the end product.

Your data never leaves the machine

The privacy claim in this workflow is verifiable rather than promised. The Takeout export never leaves your disk. Every spreadsheet formula sits in the sheet, and every script line can be read before it runs.

The tempting alternative is the analyzer site that asks you to upload your history. Free third-party services may monetize exactly the data you are trying to keep private, and a complete viewing history is a detailed behavioral profile. Local analysis exists so you never make that trade, the same reasoning behind why your YouTube organizer should never see your data.

For a reference point, the only optional online touchpoint in this workflow is RSS for public uploads, the feed mechanism Yougroup uses. It involves no account, no API key, and no personal data. The same local-first rule applies throughout: no account, no hosted backend, no server-side sync, no product analytics.

One caution before sharing: channel names and timestamps in a screenshot of your report can identify you even when the numbers look anonymous.

From yearly report to daily habit

A wrapped-style report is annual by nature, but habits change weekly. The yearly deep-dive measures drift after the fact; an ongoing workflow keeps the feed honest as it happens.

Yougroup extends that philosophy year-round: curated channel Lists grouped by theme, a deduplicated cross-list feed that consolidates uploads from every channel in every list into one view, and locally marked watched status so the queue reflects reality. Playback queues you can sort by newest, popular, or interleaved and open directly on YouTube make watching a deliberate choice rather than a default; build the perfect YouTube watch queue with smart sorting covers those options in depth.

The extension is open source, so you can clone the repository, build it, and load the unpacked extension in Chrome 114 or newer, inspecting everything yourself before it touches your subscriptions.

Your data only works for you when you can see it. Keep it local, keep it honest, and run the report again next year.