Moving and sharing
Moving off Spotify and Keeping What Matters
Cancelling Spotify is easy. The part people miss is that playlists and listening history were doing work behind the scenes, and those are the things worth migrating first.
What you can take with you
Playlists come across through imports. Spotify connects over OAuth if you want the direct route, or you can export with a third-party tool, convert the CSV here and import the JSON without connecting anything.
Listening history is harder, because Spotify does not export it in a usable form. Aurral reads history from Last.fm, ListenBrainz or Koito instead. If you have scrobbled to any of those for years, you already have years of history waiting.
- Spotify playlists: OAuth import, or Exportify CSV converted to JSON.
- YouTube Music playlists: paste a public playlist URL.
- Last.fm: three station types, no account needed beyond a username.
- ListenBrainz: link once, reuse the token for imports.
What genuinely cannot be replaced
Two things, and pretending otherwise leads to a bad setup.
First, the catalogue. Spotify is a licensing arrangement with every label. A self-hosted server has whatever you can find through your own sources, which for most artists is fine and for some is not.
Second, the editorial layer. Release Radar playlists and editor-picked sets are curation Aurral cannot reproduce, because they depend on label and promoter relationships.
| Capability | Self-hosted equivalent | How close it is |
|---|---|---|
| Personalised recommendations | Discover with your own history | Different mechanism, similar outcome |
| Weekly discovery mix | A weekly Flow | Very close, and tunable |
| Release Radar | Release Radar Flow template | Close; built from your library instead |
| Editorial playlists | Deezer editor playlists via sync | Partial; no Spotify equivalents |
| Full catalogue | Your download sources | Depends entirely on sources |
| Cross-device playback | Navidrome, Plex or Jellyfin | As good or better |
A migration order that works
Import playlists before cancelling, not after. Once the account is gone the OAuth route is closed, and the only remaining path is a CSV export which you may no longer be able to produce.
Set up history next. Connect Last.fm or ListenBrainz before you start cancelling things, so recommendations have signal from the first build rather than starting blind and improving slowly.
- Import your essential playlists while the Spotify connection still works.
- Convert and import anything OAuth will not cover, using the CSV route.
- Connect a listening-history provider so recommendations have signal.
- Run a library scan so Aurral knows what you already own.
- Create one weekly Flow before you cancel, and let it run a week.
- Cancel, and keep Spotify only for the two things self-hosting cannot do.
Keeping the catalogue you cannot replace
If you want both, that is a completely reasonable arrangement. Use the streaming service for new releases and editorial content, and the self-hosted server for playing what you own without interruption.
The practical pattern is: let a Release Radar Flow find what interests you, add it to your library, and then cancel the streaming subscription once a month of self-hosted discovery feels sufficient. A month is long enough to know.
Frequently asked questions
Can I import Spotify playlists without connecting Spotify?
Yes. Export with Exportify, convert the CSV to JSON using the free converter on this site, then import the JSON file. Everything happens in your browser.
Will my recommendations be as good at first?
Not immediately. Without history Aurral starts from your library alone. Connect Last.fm, ListenBrainz or Koito before you start listening and the first build is already better.
What is the most common mistake when leaving Spotify?
Cancelling before importing playlists. The OAuth route closes with the account, and the CSV route requires an export you can no longer produce.
Do I have to give up editorial playlists?
Mostly. Deezer editor playlists can be synced, but Spotify's editorial relationships have no equivalent.
Ready to set it up
One container and one media path is genuinely all it takes. Everything else in this page is something you add when the need appears.