viewhack

Spotify data viewer: your top artists, songs and hours, year by year

Drop the ZIP from Spotify's “Download your data”, or the JSON files inside it: the extended streaming history (Streaming_History_Audio_*.json) or the account data (StreamingHistory_music_*.json). See how many hours you listened, your top 50 artists, songs, albums and podcasts by time or by plays, for all time or any one year, and when in the day and week you listen. Save every play, and each list, as CSV.

The files are read on your device. Nothing is uploaded, and nothing is fetched: no cover art, no links to Spotify.

What it shows

Getting the files from Spotify

Where to ask
Sign in on spotify.com in a browser, open your account's Privacy settings and find Download your data. Tick Extended streaming history for every year since the account was opened, and Account data if you also want the other files. Spotify e-mails a download link when the files are ready; it says the account data takes up to 5 days and the extended history up to 30.
What arrives
my_spotify_data.zip, holding a Spotify Extended Streaming History folder (Streaming_History_Audio_2019-2021_0.json and so on, a few years per file, plus Streaming_History_Video_*.json) and/or a Spotify Account Data folder (StreamingHistory_music_0.json, StreamingHistory_podcast_0.json, beside playlists, library and other files this page skips). Downloads from before 2023 used a MyData folder with StreamingHistory0.json or endsong_0.json; those are read too.
What to drop
The ZIP as it is, the unzipped folder, or any of the JSON files, several at once. Files that are not streaming history are skipped and named.

The two histories

FileCoversOne row holdsMissing
Extended streaming history
Streaming_History_Audio_*.json, Streaming_History_Video_*.json
the life of the accountts (when the stream ended, UTC, to the second), ms_played, track, artist and album names, spotify_track_uri, or episode_name and episode_show_name for a podcast; reason_start, reason_end, shuffle, skipped, offline, platform, conn_countrynothing this page needs; skipped is empty in many older rows
Account data
StreamingHistory_music_*.json, StreamingHistory_podcast_*.json
about the last year onlyendTime (when it ended, UTC, to the minute), artistName and trackName, or podcastName and episodeName, and msPlayedalbums, skips, platform, country, shuffle

Given both, the page uses the extended history and leaves out the account-data rows that fall inside its dates, because they are the same streams twice; it says how many. Account-data rows after the extended history ends are kept. An account-data song gets its album from the extended history when the same artist and title are there.

How the figures are worked out

A play
A stream that lasted 30 seconds or more by default, the length Spotify uses to count a stream for its play counts and royalty payments. The threshold is a box on the page: set 10 s to count quick listens, 60 s to count only songs you stayed with, 0 to count every stream. Changing it changes plays, the “by plays” rankings and each artist's first play, never the time listened.
Time listened
The sum of ms_played over every stream in the range, short ones included. A song skipped after 8 seconds adds 8 seconds.
Dates and hours
Spotify writes the time each stream ended, in UTC. Each stream is placed at the time it started (end minus time played) and shown in this device's local time, so a 40-minute episode that ended at 00:20 counts at 23:40 the evening before. Listening done in another time zone shows at your home clock, not the clock where you were.
Skip rate
The share of a song's streams that Spotify marked skipped, or that ended with the next-track button (reason_end “fwdbtn”), out of the streams where the extended history records either. The account-data files record neither, so a song heard only there shows “–”.
First play
The start of the earliest stream by that artist that reaches the threshold, across all the files dropped, whichever year is picked.

A worked example

The page is tested with a made-up download: an extended history for June 2022 and March 2023 and account data for January 2024, 20 streams in all once one duplicate is left out. The Quiet Engines lead by time (5 streams of Northbound, 20 min), but Nina Arlo leads by plays: 6 plays in 19 min 45 s, because one of her 7 streams was skipped at 25 s. Lower the threshold to 10 s and that stream becomes her seventh play; Mara Velt's two 20-second streams from 2022 count too, which moves her first play from January 2024 back to June 2022. Saved as CSV, all time is 20 stream rows and 2023 alone is 9.

What this cannot do