From Models to Products: LLMs for Recommendation at Spotify Scale

Feature Image

Recommender systems have become a regular part of our lives, from the home pages of our favorite apps and websites to the music we hear, the shows we watch, and beyond. For users of Spotify, opening the app to a personally curated view capturing their tastes is a key part of their experience. Despite that success, recommender systems have remained largely opaque: users can influence them through likes, streams, shares, and saves, but these are indirect signals. When users want to steer the system in a new direction, it can be challenging to express those desires directly. If recommender systems could understand natural language, it would open the door to both better recommendations and entirely new ways of interacting with them.

Large Language Models (LLMs) have changed how we think about search, assistants, and content generation. Could they also change recommendations? At first glance, the answer seems obvious. Recommendation is fundamentally about understanding users over sequences of interactions, and LLMs excel at reasoning over long sequences, understanding language, following instructions, and combining many different signals into a single prediction. But recommendation systems have requirements that generic LLM applications do not.

A recommender cannot simply generate a plausible title. It must return a real catalog item. It must know whether that item is playable, available in the user's market, and appropriate for the current recommendation objective. It must personalize recommendations from years of listening behavior while operating over catalogs containing millions of items. And it has to do all of this within strict production latency, cost and reliability constraints.

These challenges motivated two complementary papers that Spotify is presenting at KDD 2026. One introduces NEO, a general framework for adapting LLMs into unified models for recommendation, search, and user understanding. The other presents GLIDE, a production system that brings many of these ideas online for podcast discovery at Spotify scale.

Although the two projects both focus on the use of LLMs in recommendation, they ask different questions.

  • NEO asks: How can we create a truly multi-task language-steerable recommendation model?

  • GLIDE asks: How can these ideas power a recommender model in production?

Together they describe a practical recipe for building grounded, personalized LLM-based recommendation systems.

Teaching an LLM to speak the catalog

One of the biggest obstacles in applying LLMs to recommendation is grounding. Language models naturally generate text. Recommendation systems need precise references to real catalog items. Imagine asking for an episode about artificial intelligence. A language model may generate the title of an episode, or even a plausible title of an episode that does not exist. A production recommender, however, must retrieve a specific catalog item that exists, is available to the listener, and satisfies product constraints.

Our work addresses this problem using Semantic IDs, a representation we described in earlier work. Instead of treating every item as an arbitrary identifier, each item is represented by a short sequence of discrete semantic tokens derived from its content. Similar items receive similar token sequences, giving the model a compact vocabulary that refers directly to real catalog entities while preserving semantic relationships. This approach easily handles catalogs containing millions of items while allowing an LLM to generate catalog entities just as naturally as it generates words. 

Once an LLM can operate directly over catalog entities, it becomes possible to ask a broader question: can a single model recommend, retrieve, explain, and reason about users while remaining practical enough for production?

NEO and GLIDE explore that question from complementary directions.

NEO: a unified model for search, recommendation, and reasoning

Traditional discovery systems often rely on separate models for recommendation, search, explanation, and user understanding. NEO asks whether these capabilities can instead be brought together within a single language-steerable model.

The key idea is to teach an LLM to operate jointly over natural language and catalog entities. Rather than consuming only text, NEO learns to process and generate mixed sequences of natural language and Semantic IDs. In practice, this means the model can take prompts containing text, user history, and item references, and produce outputs that are item identifiers, natural language, or a combination of both.

This unified interface brings together capabilities that are traditionally implemented separately. A prompt specifies the task, the target entity type, and the desired output format. The same model can therefore retrieve an item for a search query, recommend an episode, show, audiobook, or artist from user history, explain why a recommendation fits, or summarize a user's interests. In other words, the model is language-steerable: changing the instruction changes the behavior, without changing the model itself.

From Models to Products Image 1

Teaching an open-weight LLM to use an entirely new catalog vocabulary, however, is far from trivial. Inspired by recent advances in multimodal language models, NEO treats Semantic IDs as a new "language", or, more generally, as another modality that must first be aligned with the model's existing linguistic knowledge. Rather than introducing images or audio, NEO teaches the model to understand and generate structured catalog entities alongside natural language. Training therefore proceeds in stages. First, our Semantic Foundation stage maps items to Semantic IDs. Next, the model learns a bidirectional alignment between Semantic IDs and natural language, translating from text to Semantic IDs and back again. Only after this domain grounding step, the model undergoes a Capability induction stage that instruction tunes it across recommendation, retrieval, explanation, and user-understanding tasks.

From Models to Products Image 2

This staged training turns out to be essential. Across a heterogeneous catalog of more than 10 million items, semantically structured identifiers substantially outperform arbitrary item IDs, while the grounding stage preserves the language capabilities of the underlying LLM much better than alternative training strategies.

The result is a single, grounded, language-steerable model that can perform recommendation, search, explanation, and user understanding without relying on external tools.

GLIDE: from grounded generation to online podcast discovery

While NEO explores a general framework for language-steerable recommendation, GLIDE focuses on a more specific question: can these ideas power a production recommender? Built on a compact 1B-parameter LLM, GLIDE brings grounded generation to episode-level podcast recommendation at Spotify scale.

Podcast recommendation presents a distinctive challenge. Many listeners regularly return to favorite shows, yet they also seek new topics, formats, or voices depending on context. A successful recommender therefore needs to balance continuity with exploration.

GLIDE formalizes this around the notion of non-habitual listening. Rather than simply predicting what a listener is most likely to consume next, the model is trained to surface episodes outside a listener's current routine. It distinguishes between non-habitual but familiar content, such as a show the listener has enjoyed before but not recently, and non-habitual unfamiliar content, such as a completely new show.

Like NEO, GLIDE formulates recommendation as instruction-following over a catalog represented with Semantic IDs. Given the user’s recent listening history, lightweight long-term user context, and an explicit recommendation objective, the model generates episode Semantic IDs that are mapped back to real catalog items.

From Models to Products Image 3

A key addition is long-term personalization. Recent listening history captures short-term intent, but stable preferences are represented using dense user embeddings from an existing personalization model. These embeddings are projected into the LLM's hidden space and augment the prompt as soft tokens, allowing the model to condition on rich user state without serializing years of listening history into text. The result is a compact prompt that remains practical for production serving while preserving strong personalization.

Like NEO, GLIDE is also language-steerable. By changing the instruction, or, more specifically, the control token specifying the recommendation objective, the same model can emphasize either familiar or unfamiliar discovery, without retraining separate models for different recommendation scenarios.

Deploying the model

Building a strong recommendation model is only part of the challenge. Turning a language-steerable LLM into a production recommender also requires careful system design and evaluation.

At serving time, the system must assemble prompts, augment with user soft prompts, generate candidate Semantic IDs, resolve identifier collisions, map generated IDs back to eligible catalog items, and integrate them into Spotify's ranking pipeline.

Decoding is another important design choice. GLIDE uses beam search because alternative decoding strategies, while faster, resulted in substantially lower retrieval accuracy. The serving infrastructure was optimized to support wide beam searches while remaining within production latency constraints.

Evaluation also extends beyond traditional retrieval metrics. Offline metrics remain essential, but they do not always capture recommendation quality. A model can improve recall simply by recommending more popular content, even if those recommendations are less aligned with a listener's interests.

GLIDE therefore combines offline metrics with human evaluation and LLM-based judges. Human evaluations help uncover issues such as stale recommendations, language mismatches, or lack of diversity, while LLM-based judges provide a scalable way to assess interest alignment. Across multiple model iterations, the LLM-judge interest-alignment score improved from 0.44 to 0.91, reflecting qualitative improvements that offline retrieval metrics alone did not fully capture.

Results at scale

NEO shows that a single model can unify recommendation, search, explanation, and user understanding within one set of weights. Rather than specializing separate models for each task, the same model is steered through natural-language instructions while operating over a heterogeneous catalog of more than 10 million items and approximately 15 million users. This suggests that many recommendation capabilities traditionally implemented as separate systems can instead be expressed through a common language interface.

GLIDE takes a depth-first approach to demonstrate  how these ideas can be integrated into a production recommendation system. Rather than replacing Spotify's existing recommendation stack, GLIDE acts as an additional candidate generator, producing grounded recommendations that are passed to the downstream ranking pipeline. In a 21-day online A/B test on Spotify Home, covering approximately 20 million impressions per experiment cell, this approach increased non-habitual podcast listening by 5.4% and new-show discovery by 14.3%, while meeting production latency constraints and maintaining engagement guardrails.

Taken together, NEO and GLIDE outline a practical approach to building LLM-based recommendation systems: grounding the model in real catalog entities, preserving its language capabilities while teaching it the catalog, steering its behavior through natural-language instructions, and combining short-term interactions with compact long-term personalization. Just as importantly, they show that serving, decoding, and evaluation are not peripheral implementation details, but fundamental components of making generative recommendation systems practical.

More broadly, we see these ideas extending beyond recommendation. NEO frames recommendation as one instance of a more general problem: adapting LLMs to reason jointly over language, users, and structured domain entities. While our work focuses on recommendations at Spotify, we believe the same principles can help build grounded, steerable LLMs for many other large-scale applications.

Looking ahead

NEO and GLIDE explore recommendations, but they also point toward a broader research direction. Rather than treating recommendation as a standalone problem, they view it as an instance of a more general challenge: adapting LLMs to reason jointly over language, users, and structured domain entities.

Although we explored these ideas in recommendation, the underlying principles extend more broadly. The same principles of grounding models in domain-specific entities, preserving their language capabilities, and steering their behavior through natural-language instructions, could be applied to many other large-scale discovery and retrieval problems.

Many questions remain. How should we evaluate long-term recommendations rather than only immediate relevance? How can language steering support richer product objectives? And how can these systems become even more efficient to serve at scale?

Ultimately, we see the value of LLMs in recommendation not in their ability to generate text, but in their ability to reason jointly over language, user behavior, and real catalog entities – thus enabling both better recommendations and new steerable experiences for users. Grounding, steerability, personalization, and efficient system design are all essential pieces of making that vision practical.

If you would like to learn more, the full details are available in our KDD 2026 publications:

  • A Unified Language Model for Large Scale Search, Recommendation, and Reasoning (preprint)

  • Deploying Semantic ID-based Generative Retrieval for Large-Scale Podcast Discovery at Spotify (preprint)

We will be presenting both at KDD 2026. Please stop by if you'd like to discuss the work.

Acknowledgments

This work is the result of a collaborative effort across multiple teams at Spotify. We would like to extend our sincere gratitude to all the co-authors and contributors who made the NEO and GLIDE projects possible:

Sainath Adapa, Aaron Bernkopf, Martin Bomio, Tarun Chillara, Pooja Chitkara, Douglas J. Cole, Keshi Dai, Andreas Damianou, Catie Edwards, Juan Elenter, Francesco Fabbri, Ghazal Fazelnia, Sandeep Ghael, Paul Gigioli, Martin D. Gould, Timothy Christopher Heath, Maya Hristakeva, Bernd Huber, Tony Jebara, Eliza Klyce, Ilya Kopysitsky, Max Lefarov, Bryan Leung, Shawn Lin, Sahitya Mantravadi, Darren Mei, David Murgatroyd, Zahra Nazari, Enrico Palumbo, Gustavo Penha, Vladan Radosavljevic, Yves Raimond, Alexandra Ranieri, José Luis Redondo García, Oguz Semerci, Ivo Joel Senese, Petter Pehrson Skiden, Matthew N.K. Smith, Brian St. Thomas, Oskar Stål, Jan Stypka, Alexandre Tamborrino, Vincent Tang, Cara Van Uden, Mark VanMiddlesworth, Ali Vardasbi, Saaketh Vedantam, Divita Vohra, Alice Y. Wang, Reid Wilbur, Jacqueline Wood, Alyssa Yang, Yu Zhao.