Aurral

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.

CapabilitySelf-hosted equivalentHow close it is
Personalised recommendationsDiscover with your own historyDifferent mechanism, similar outcome
Weekly discovery mixA weekly FlowVery close, and tunable
Release RadarRelease Radar Flow templateClose; built from your library instead
Editorial playlistsDeezer editor playlists via syncPartial; no Spotify equivalents
Full catalogueYour download sourcesDepends entirely on sources
Cross-device playbackNavidrome, Plex or JellyfinAs 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.

  1. Import your essential playlists while the Spotify connection still works.
  2. Convert and import anything OAuth will not cover, using the CSV route.
  3. Connect a listening-history provider so recommendations have signal.
  4. Run a library scan so Aurral knows what you already own.
  5. Create one weekly Flow before you cancel, and let it run a week.
  6. 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.