Listening Post is the music tracking app I always wanted.
TL;DR: Download the beta, have fun.
For years, I’ve used Shazam and Last.fm to keep track of the bangers around me, but checking my Last.fm profile, you’d be forgiven to think that all I ever listen to is upbeat DJ sets – because the recognition apps work with Apple Music or Spotify pretty exclusively, which means they only track what I listen to on Apple Music — which happens to be mostly upbeat DJ sets while working.[1]
But that’s not the whole picture! Music is all around us. For example, during the day, I often have the radio set to FM4 or ego.fm in the background. Or I’m at my favorite coffee shop, working on my Macbook — there’s music, too! But it’s not on Apple Music, and so it “doesn’t count”.
So I built Listening Post: a macOS 15.6+ menubar app that keeps an open ear to the music around me.
Before we go any further, though – and feel free to skip this chapter! – …
Why?
In addition to what I just explained, in short: Data sovereignty.
I hate lock-in. As nice as Last.fm is, it shouldn’t be my source of truth! Over the years, I’ve been burned more than once by services that held all my data, then jacked up the prices, or decided I’m not their target demo anymore. (Fair game, but I don’t have to like it.)
And yes, I want to share my music listening when I feel like it. Using a scrobbling service like Last.fm is fine but I want to share to it, not fully rely on it. And that only works if my data is truly my own. Therefore, Listening Post keeps that data on my machine, and happily exports to local files as it goes along, in formats I can work with (CSV, JSONL).
Sure, I could get all my data out of Last.fm (or whatever site you might be using) by ways of their API but that API might go away overnight. That’s not a cheerful thought, is it.
Also, I kind of loathe the relay-my-own-data-back-to-me way of working with Last.fm et al. I create something (e.g., a listen), that goes into Last.fm, and when I want to use it, I have to exfiltrate it back out. That’s backwards.
On a related note: I like ListenBrainz for its non-commercial, “public good” ethos. I want to support that by adding a good native macOS app to the mix.
I could go on
but let’s continue.
How does the music recognition work?
Listening Post hears what you hear. Every minute, it quickly uses the microphone to checks if for playing music; when it detects a song (using Apple’s ShazamKit), it’ll verify the recognition a few seconds later. If its successful in that, the recognized track is saved to its internal database.
No audio leaves your Mac! Only a tiny “digital fingerprint” is created, which can’t ever be reversed into audio. It’s entirely safe to keep this app running. To verify this claim, feel free to check LP’s network traffic.
Then, it continues to …
Enriching recognized tracks
Track enrichment is the process of adding extra metadata to a song after Shazam identifies it. When Listening Post recognizes a track, Shazam provides basic information like artist, title, and Apple Music details. Enrichment fills in the gaps by querying external services for additional identifiers and links that Shazam doesn’t provide — things like MusicBrainz recording IDs, service-specific URLs (like Last.fm’s track link), and release year.
The app uses three enrichment sources: ListenBrainz provides MusicBrainz recording IDs (which are more reliable than other sources), Last.fm provides direct links to the track’s Last.fm page, and Deezer provides the release year by looking up the track’s ISRC code. Each source is only queried when its corresponding channel is enabled and configured. For example, if you haven’t set up Last.fm, the app won’t bother asking Last.fm for data.
Enrichment happens asynchronously in the background after a track is recognized, once per unique track (not per recognition!), so repeat plays of the same song don’t trigger redundant lookups. If an enrichment request fails, the system retries a few times before giving up.
Once a track is enriched and good to go, it’s added to an outbox queue, waiting for the end of the so-called …
Publication delay
When a track is recognized, it gets added to a queue for each enabled channel. The app waits for the configured publish delay (default: 5 mins) before sending tracks to any channel — this gives you time to skip false positives (or tell the app to forget particularly awful songs) before they’re recorded anywhere. If publishing fails for a particular channel, the track stays in the queue for retry.
After the delay, the track is sent to Listening Post’s …
Channels
Channels are output destinations where Listening Post sends recognized tracks (you could say it “posts … your listens”!).[2]
The app currently supports five channels: Last.fm and ListenBrainz for scrobbling, Apple Music for adding tracks to your library, Files for exporting local files, and Shortcuts for running local automations. Each channel can be independently enabled or disabled, and some require configuration (like API credentials) before they work.
But channels are not only for automation, they also add functionality to the menu, in the form of …
Track actions
Global actions are actions like Like/Unlike and Forget track. When you like a track, and have remote channels enabled (Last.fm and/or ListenBrainz), then this info will be relayed to those channels, meaning your like will propagate to Last.fm or ListenBrainz.
Then there are so-called channel track actions which only become available when a channel is enabled, and is properly configured, and the track is fully recognized and enriched.
For example, once you’ve enabled the Last.fm channel, and have authenticated the app there, and the track is ready to go, then the channel’s track actions will let you open the track on the site, let you copy the track’s link to your clipboard:
And that’s the gist of it.
Welcome to the beta!
It’s very, very early days, so expect a couple of rough edges. The feature set isn’t nearly complete, either. I’ve been working on it for the last three weeks, so it’s just a minimally viable product at this point.
Still: I’d be delighted if you would Listening Post a good spin, and if you like it, give me some feedback. There are “Contact the author” links in the app for sending a mail, or post here in the LP forum. I read everything!
And if you’re now curious and want to learn more, here are some more in-depth posts. (A proper documentation site will comes soon.)
The channels, explained
- HowTo: The Last.fm channel
- HowTo: The ListenBrainz channel
- HowTo: The Apple Music channel
- HowTo: The Local Files channel
- HowTo: The Shortcuts channel

