spotify_to_tidal: a command line tool for copying Spotify playlists into Tidal
A command line tool for importing your Spotify playlists into Tidal
At a glance
- What is it?
- spotify_to_tidal is an AGPL-3.0 Python tool that reads your Spotify playlists through the official API and recreates them as Tidal playlists, built for periodic synchronisation of very large collections rather than a one-off import. It suits a listener with a large Spotify library and a Tidal account, and it is the wrong tool for a one-time move, since it does not carry over your Liked Songs unless you ask for it explicitly.
- Who is it for?
- spotify_to_tidal fits a listener who keeps a large Spotify library and wants it mirrored into Tidal on a schedule, because the tool is built around repeated runs and a local database rather than a one-time transfer, and the OAuth setup is the standard Spotify app registration.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 114 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The design goal is repeated runs, not a single import
The README describes the tool as a command line tool for importing Spotify playlists into Tidal, and immediately adds the qualifier that matters, that due to various performance optimisations it is particularly suited for periodic synchronisation of very large collections. That sentence reframes the whole project. A one-off migration of twenty playlists is a drag and drop exercise in the Tidal app, and a tool that needs a registered Spotify app, a config file and a local database to do it is a poor trade for that. A library of thousands of playlists that you want kept in step on a schedule is a different problem, and the performance work is what makes it tractable. The repository tags reinforce the point with a synchronization topic alongside spotify and tidal.
Installation is an editable pip install from the clone
The installation instructions are to clone the repository and run one command.
python3 -m pip install -e .The editable install is the right call here, since the tool reads a config file from the project root and the README repeatedly refers to running things from the project root directory. The package is built with setuptools under the pyproject.toml, requires Python 3.10 or later, and declares its dependencies explicitly: spotipy at the 2.24 series for the Spotify side, tidalapi at 0.8.10 for Tidal, pyyaml for the config file, tqdm for progress output, sqlalchemy at 2.0 for the local store, and pytest with pytest-mock for the test suite. The console entry point is spotify_to_tidal, mapped to spotify_to_tidal.__main__:main, and the package source lives under src/.
Setup needs a Spotify app, and the redirect URI has to match exactly
The setup section is a numbered list and the third step is the one that catches people out. You rename example_config.yml to config.yml, register a new app on developer.spotify.com following the authorisation app settings guide, and paste the client ID and client secret into the Spotify section of the config file. Then you copy the value in redirect_uri from the config file into the Redirect URIs list at developer.spotify.com and press ADD, and finally you enter your Spotify username into the config file. The redirect URI has to be copied rather than typed, because Spotify compares it exactly, and the README is careful to say to copy the value from the config rather than invent one. The example_config.yml is also the place to find the remaining configuration options.
Three invocations cover the whole scope
Running the tool with no arguments synchronises all of your Spotify playlists with your Tidal account, from the project root directory.
spotify_to_tidalA single playlist can be targeted with the --uri option, which accepts either a bare playlist id or a full playlist uri.
spotify_to_tidal --uri 1ABCDEqsABCD6EaABCDa0a # accepts playlist id or full playlist uriAnd the Liked Songs collection, which in Spotify is a separate entity rather than a playlist, is handled by its own flag.
spotify_to_tidal --sync-favoritesFor further options there is the --help flag, and the example config file lists the configuration settings. One Windows detail is called out, that Windows ignores Python module paths by default so the tool has to be run as python3 -m spotify_to_tidal instead of the bare command.
The dependency list explains the state model
The pyproject.toml is short, and the choices in it describe what the tool does rather than how it is packaged. spotipy is the official Spotify Python client, and the pinned series matters because the library moves. tidalapi at 0.8.10 is the community Tidal client, and it is the only part of the stack that is not vendor official, which is worth knowing if the Tidal API changes. pyyaml handles the config file, tqdm draws the progress bars that make a long sync legible, and sqlalchemy at 2.0 is the ORM behind the local database. That database is the part that makes periodic synchronisation possible, since it is where the tool records what it has already seen so a second run does not recreate every playlist from scratch.
AGPL-3.0 and a project with recent but infrequent releases
The licence is AGPL-3.0, which is a meaningful detail for a tool that talks to your personal music library. The AGPL requires that modifications you distribute, including over a network, be offered under the same licence, so if you extend the tool for your own use and run it as a service for others, the source has to be published. For personal, local use it is not a practical constraint, but for anything commercial it is the thing to check first. The release history shows v1.0.7 on 2026-01-11, v1.0.6 on 2025-12-31 and v1.0.5 on 2025-10-16, so releases land in bursts rather than steadily, and the last push to the repository was on 2026-06-30 with the repository not archived. The repository also has a .circleci/ directory for continuous integration, a pytest.ini and a tests/ directory, which is a good sign for a tool that has to keep working against two third-party APIs.
Editorial conclusion
spotify_to_tidal fits a listener who keeps a large Spotify library and wants it mirrored into Tidal on a schedule, because the tool is built around repeated runs and a local database rather than a one-time transfer, and the OAuth setup is the standard Spotify app registration. It is a poor fit for a one-off migration, where the effort of registering an app and maintaining a config file outweighs what a manual drag of a few playlists costs, and a poor fit if you expect your Spotify library structure to arrive intact, since the tool creates Tidal playlists rather than reproducing them exactly. Verify first that you have a Spotify app registered with a redirect URI added, since the tool needs both the client ID and secret in the config file, and remember the Tidal side of the connection is a separate authentication you will be prompted for on the first run.
Frequently asked questions
How do I install spotify_to_tidal?
Clone the repository and run python3 -m pip install -e . from the project root. The package requires Python 3.10 or later and installs a console script named spotify_to_tidal.
What configuration does spotify_to_tidal need?
Rename example_config.yml to config.yml, register a new app on developer.spotify.com, copy the client ID and client secret into the Spotify section, copy the redirect_uri value from the config file into the Redirect URIs list at developer.spotify.com, and enter your Spotify username in the config file.
Can spotify_to_tidal sync just one playlist or my liked songs?
Yes. The --uri option takes a playlist id or a full playlist uri for a single playlist, and --sync-favorites syncs your Liked Songs collection separately, since Spotify treats it as a distinct entity rather than a playlist.
What licence is spotify_to_tidal under?
AGPL-3.0. That matters if you modify the tool and distribute or run a modified version as a network service, since the source must then be offered under the same terms.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/spotify2tidal-spotify-to-tidal)Was this useful?