My Last.fm account knows about every song I’ve listened to since 2008.
~6,500 artists, ~7,700 albums, ~170,000 tracks.
When I listened to the MP3 files I brought with me from high school, I made sure Last.fm was scrobbling. When I listened to the mix CDs my best friend made me, Last.fm listened too. When I tried Spotify for a few months, when I switched to Hype Machine, when I listen to the CDs I own or the albums I bought from Bandcamp, everything I’ve played in iTunes, on my iPods, on Music.app on iOS, on Marvis, during my short-lived Roon experiment, through Plexamp. It’s all there.
Last.fm remembers every day of the last fourteen years of my life.
Last.fm is an anomaly, a mutation of the internet, and a service that just celebrated its 20th birthday.
Now you could say so what, right? Myspace is still alive and its website still technically loads. Google is like, 100 years old or something. So what.
Sure. First of all Myspace launched in 2003, so it’s technically 19 years old. That’s right: Last.fm is older than Myspace! And Google is…well who gives a shit about Google. Do you feel anything when I say “Google”? No you don’t.
Also thing is, Myspace doesn’t exist the way Last.fm still exists. I don’t know what Myspace is today, it looks like it’s a social network for singers and actors? No one who uses it today sits and thinks about where it was and how it got to where it is now.
Last.fm had a lot of ups and downs. In its heyday it had a technical blog and a staff that posted photos of server rooms and office space, it had actual streaming radio that did intelligent things with music it knew you liked, they put random slogans at the bottom of site pages. It was scrappy and ambitious. They figured out how to create a plugin that automatically scrobbled what you listened to in iTunes, but that also figured out how to scrobble what you listened to on your iPod.1 As far as I know, that’s the only useful thing any third party app did with what happened on your iPod.
Everything was fine. No everything was great! Then came a redesign or two, the streaming died and got replaced with a hacky “we’ll just play YouTube videos and pretend you’re streaming” setup, Groups which was actually fun died, CBS bought the company (that was the moment I thought it was all over), and then a long silence during which it felt like every other month a piece of the site would disappear. They used to let you export your data, that went away. https://status.last.fm which was a proper service status page now redirects to a Twitter account. It all felt a little grim. Okay a lot grim.
But. Throughout all of this, the ups, downs, happy days and sad, not being owned by a large media conglomerate and being owned by a large media conglomerate, the site never stopped accepting scrobbles.2
And in a world that has turned its back on, then mooned the interconnectivity of Web 2.0, in a world where APIs get turned off and rarely on, Last.fm still commands death-defying loyalty with music listeners who demand scrobbling of old and new music apps and streaming services.
There are signs of life. The listening reports feature gets improvements every once in a while. Library search is here.3 Their Twitter account is fairly active. The site isn’t…you know, dead. Every time I update that plot I wonder how many more years of data I’ll be able to add to it. Who knows. It’s the internet, and nothing is forever, even if some things feel like they are.
I mentioned in passing that Last.fm used to let you export your data including all scrobbles and loved tracks, and that this disappeared at some point. So how did I make the plot at the top of this post?
Listenbrainz is part of the MetaBrainz Foundation.4 Its goal is to be a “public [and] permanent” store of your listen history, to make this data available for download, and share this in some technically knowable and supported fashion.
Here is how I think of Listenbrainz: Yes we all can hardly believe that Last.fm still stands, but the clock is ticking. You know that right? Don’t you want a backup plan? Don’t you want a way to get your money outta that bank before it craters? That’s Listenbrainz.
The good. Listenbrainz will let you import all your listens from Last.fm, and will let you download it in a fairly structured payload. That’s how I made the plot at the top.
The bad. This is a manual process. You have to remember to come back and do it regularly. Why? Because it seems to basically load and scrape each page of listens from your Last.fm profile. Why? Probably because Last.fm doesn’t want them doing this, and probably has no API for it. Lord knows the APIs they do have barely work. The other reason this is bad is that it might stop working.
Listenbrainz has an API. Technically music players can start letting you authenticate with Listenbrainz in addition to or instead of Last.fm and send your listens there too. As far as I know, as of today no Mac/iOS music players do this.
It wasn’t black magic, but it was still technically impressive. I don’t know if they ever officially said how that worked, but I’m fairly sure it relied on play counts. Whenever you listened to music on your iPod (or iPhone) the playcounts were incremented, and when you synced your device to your computer the playcounts in your iTunes library got updated too. Last.fm would use a track’s changed playcount and last played timestamp to decide what you listened to since the last sync. One thing I can’t remember is whether the plugin could figure out if you played tracks A -> B -> A. A’s playcount would be incremented twice, and its last played timestamp would show the latest play, so as far as the plugin could guess, what you did was B -> A -> A. So if the plugin could figure out that you played A -> B -> A, the solution must be more sophisticated than I thought. ↩︎
There are frequent downtimes, but the core service seems well-designed enough that it always catches up with what I played once it’s back online. ↩︎
The blog post before that one is from Feb 2019. The one before that was Sep 2017. So it’s still a little sad. ↩︎
The one Metaverse that actually exists. ↩︎