A chatbot that lets users explore their Spotify listening history, discover insights about their music taste, and control playback through natural language.
Timber is a conversational AI assistant for Spotify built on a multi-agent LangGraph architecture. It connects to your Spotify account, syncs your listening history into BigQuery, and lets you ask questions about your music taste, get personalised recommendations, and control playback through natural language. Queries are routed intelligently between a BigQuery agent for historical analysis and a Spotify agent for live API tasks, with chat history persisting across sessions via Firestore.
I have always been a heavy music listener, and I've become curious about how my taste has evolved over time. I built Timber to allow me to explore that. I took inspiration from services like stats.fm, which provides personalised statistics, but I wanted to be able to actually "talk" to my data. Inspiration also came from projects like MySpotiPal, but I wanted something that could handle more complex, multi-turn questions without falling apart. Timber is my attempt at building that properly, utilising a real agentic backend instead of a single prompt chain.
Spotify gives you a lot of data, but very little access to it. The official app tells you what is playing now and surfaces algorithmically curated playlists, but if you want to understand your own listening habits in any meaningful depth, you are largely on your own. Third-party services like stats.fm fill some of that gap with dashboards and charts, but they are static. You can see your top artists, but you cannot ask questions.
The failure mode is a wall of numbers you cannot interrogate. What did my listening look like during a specific period? Do I actually listen to that artist as much as I think I do? What should I put on right now based on my mood and history? None of those questions have a natural home in the tools that exist today. Timber is built to answer them.
The AI side works in three layers. A "Manager" agent sits at the top, reads your message, and picks up enough of the recent conversation to understand what you actually mean. From there it decides where to send the question: a Spotify agent handles live playback and playlists, a BigQuery agent writes and runs queries against your personal listening history, and a web search picks up anything about general music knowledge that falls outside either of those. Whatever comes back, the Manager pulls it into one response and sends it to you over a live connection. To keep things efficient, the system quietly trims older parts of the conversation as it grows so it is never carrying more context than it needs.
On the data side, Timber has two ways of building up your listening history. The first is a background sync that regularly checks the Spotify "Recently Played" API and writes new plays into BigQuery, Google's cloud database for large-scale analytics, making sure nothing gets counted twice. The second is for bulk history: Spotify lets you request a full export of everything you have ever listened to, and Timber accepts that file, processes it, and loads it into the same database. Once your data is in, every query is read-only and locked to your account, so there is no way for one person's history to show up in someone else's results. The whole application runs as a container on Google Cloud Run.
Timber is live and fully deployed on Google Cloud Run. Users can connect their Spotify account, upload their listening history, and start asking questions in plain language straight away. Ongoing work includes improving the Manager agent's routing accuracy and expanding the range of analytical questions the BigQuery agent can handle. The thing I am most pleased with is how natural the conversation feels, handling follow-up questions and context switches without losing the thread.