Spotify to Tidal Migration — AI Skill for Claude Code, Cursor & Cline
Migrate your entire Spotify music library to Tidal using an AI coding assistant (Claude Code, Claude Desktop, Cursor, VS Code/Cursor Cline, OpenCode, Codex CLI, Pi). The AI handles everything — authenticating both services, matching tracks by ISRC, importing, keeping your playlists in order, and generating reports for failed imports.
What gets migrated: liked tracks, saved albums, followed artists, all playlists (tracks in Spotify order), and a special "Liked Songs" playlist on Tidal with your liked tracks in the exact order they appear on Spotify.
Quick Start (no tech experience needed)
You don't need to know how to code. You'll copy-paste a few commands and two sets of "keys" (like passwords apps use to talk to each other), and an AI assistant does the rest. This guide uses Claude Desktop claude.ai/download:
-
Install this skill. Open a terminal (Mac/Linux: search "Terminal" in Spotlight; Windows: search "Terminal") and paste:
curl -sSf https://raw.githubusercontent.com/aalzubidy/spotify-to-tidal/master/install.sh | bashThis copies the migration instructions into Claude Desktop automatically.
-
Get your Spotify keys. Go to developer.spotify.com/dashboard, log in with your normal Spotify account, click Create app, give it a name, set the Redirect URI to
http://127.0.0.1:3030/callback, select web api under which SDK to use. Once created, you'll see a Client ID and Client Secret — keep this page open, you'll need to copy them in step 4. Also add your own Spotify email under User Management on that same app page. -
Get your Tidal keys. Go to developer.tidal.com/dashboard/, log in with your Tidal account, click Create app, give it a name, create it, then click on settings and set the Redirect URI to
http://localhost:3030/callback. On the scopes section, select all available permissions.Click save. Copy the Client ID and Client Secret it gives you. -
Make a folder for your keys. Create a new folder anywhere (e.g. on your Desktop) called
spotify-tidal-working-directory. Inside it, create a plain text file namedspotify-to-tidal.envwith this content, filling in the four values you copied above:SPOTIFY_CLIENT_ID=paste_your_spotify_client_id SPOTIFY_CLIENT_SECRET=paste_your_spotify_client_secret TIDAL_CLIENT_ID=paste_your_tidal_client_id TIDAL_CLIENT_SECRET=paste_your_tidal_client_secret -
Ask Claude to do the migration. Open Claude Desktop and type:
"Migrate my music from Spotify to Tidal. My working directory is
./spotify-tidal-working-directory(full path: paste the actual folder path here)"Claude will open your browser twice (once to log into Spotify, once for Tidal), then handle matching and importing everything for you — pausing to ask before it changes anything on your Tidal account. When it's done, it'll show you an HTML report you can open in your browser with the results.
That's it. If you get stuck on any step, the sections below have more detail, or ask your AI assistant directly — it can usually walk you through it.
Why this vs. other Spotify → Tidal tools
- Runs locally & private — unlike web services (TuneMyMusic, FreeYourMusic), nothing but your own machine and the official APIs see your library.
- ISRC-exact matching — tracks are matched by exact ISRC against Tidal's catalog, not fuzzy title/artist guessing.
- Full library, in order — playlists, liked songs (in original Spotify order), saved albums, and followed artists — not just playlists.
- Absolutely Free - You don't pay anything, clone it, add it to your agent and it's free to use - no limit on songs.
- Personally Tested - I personally tested it with my own library of 10k+ songs and playlists and getting about 93% coverage due to some songs not available on Tidal.
Full Setup & Reference
The Quick Start above is enough for most people. This section has the full detail — other AI tools besides Claude Desktop, all install flags, and the exact prerequisites.
Install
curl -sSf https://raw.githubusercontent.com/aalzubidy/spotify-to-tidal/master/install.sh | bash
Or clone and run locally:
git clone https://github.com/aalzubidy/spotify-to-tidal.git
cd spotify-to-tidal
./install.sh # interactive — picks which tools to install
./install.sh --all # install to every detected AI tool
./install.sh --claude # Claude Code / Claude Desktop only
./install.sh --opencode # OpenCode only
./install.sh --cursor # Cursor (native skills) only
./install.sh --codex # Codex CLI only
./install.sh --cline # VS Code / Cursor Cline extension only
./install.sh --pi # Pi coding agent only
The script auto-detects which AI coding assistants you have installed and installs the skill into their skills directory. Supported tools:
- Claude Code / Claude Desktop (
~/.claude/skills) - OpenCode (
~/.config/opencode/skills) - Cursor (
~/.cursor/skills) - Codex CLI (
~/.agents/skills) - VS Code / Cursor Cline extension (
~/.cline/skills) - Pi coding agent (
~/.pi/agent/skills)
After installation, follow the setup steps below and tell your AI tool: "Migrate my music from Spotify to Tidal"
Prerequisites
- Python 3.8+ with
pip install requests - A Spotify account and a Tidal account
- An AI coding assistant that supports skills/custom instructions (Claude Code, Claude Desktop, Cursor, VS Code/Cursor Cline, OpenCode, Codex CLI, Pi)
Setup
Step 1 — Create a Spotify Developer App
- Go to developer.spotify.com/dashboard and log in
- Click Create app
- Set Redirect URI to:
http://127.0.0.1:3030/callback - Note your Client ID and Client Secret
- Under User Management, add your Spotify account email address (required while in development mode)
Step 2 — Create a Tidal Developer App
- Go to developer.tidal.com/dashboard/apps and log in
- Click Create app
- Set Access tier to:
THIRD_PARTY - Set Redirect URI to:
http://localhost:3030/callback - Enable these scopes:
user.read,collection.read,collection.write,playlists.read,playlists.write,search.read - Note your Client ID and Client Secret
Step 3 — Create a Working Directory
mkdir spotify-tidal-working-directory
Create a file named spotify-to-tidal.env inside it:
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
TIDAL_CLIENT_ID=your_tidal_client_id
TIDAL_CLIENT_SECRET=your_tidal_client_secret
Step 4 — Load the Skill and Run
Load this skill into your AI tool (point it at this SKILL.md file or the skill directory), then tell it:
"Migrate my music from Spotify to Tidal. My working directory is
./spotify-tidal-working-directory"
The AI will walk through each phase, pause for your approval at key checkpoints, and handle all the auth, matching, and importing automatically.
What Happens (Phases)
| Phase | What the AI does | Your involvement |
|---|---|---|
| 1. Spotify Export | Authenticates to Spotify, fetches your full library, saves JSON | Open a browser auth page once |
| 2. Tidal Auth | PKCE login to the official Tidal v2 API | Open a browser auth page once |
| 3. Analysis | Matches every track by exact ISRC against Tidal's catalog (read-only) | Wait; AI shows you match stats |
| 4. Import | Likes tracks, saves albums, follows artists, creates playlists, creates "Liked Songs" playlist | Approve before it starts |
| 5. Verify | Reads your Tidal account back and checks everything landed | Review the health report |
| 6. Reports | Generates HTML reports for migration, verification, and missing tracks | Open the HTML files in a browser |
The import is append-only and idempotent — re-running is safe and skips items already in Tidal.
Running Individual Phases
You don't have to run everything at once. Tell the AI what you want:
| Say this | What runs |
|---|---|
| "Export my Spotify library" | Phase 1 only |
| "Analyze the Tidal import" | Phase 3 only (requires Spotify export) |
| "Import to Tidal" | Phase 4 only (requires analysis) |
| "Verify my Tidal import" | Phase 5 only |
| "Generate migration report" | HTML report from existing result files |
| "What tracks didn't transfer?" | Missing tracks HTML report |
Output Files
All files are written to your working directory:
| File | What it contains |
|---|---|
spotify-export.json |
Your full Spotify library |
tidal-match-cache.json |
ISRC → Tidal ID match cache (resumable) |
tidal-analysis.json |
Human-readable match summary |
tidal-import-result.json |
Import results |
tidal-verification-result.json |
Verification read-back results |
migration-report.html |
Overview: what was imported |
verification-report.html |
Health check: what's actually on Tidal |
tidal-missing-tracks-report.html |
Tracks not found in Tidal's catalog |
spotify-tokens.json |
Spotify OAuth tokens (auto-managed) |
tidal-openapi-session.json |
Tidal PKCE session (auto-managed) |
Tips
- Interrupted run? Re-run the same command — the match cache resumes from where it stopped, no repeated lookups.
- Already have some tracks on Tidal? The import is append-only; existing items won't be duplicated.
- Missing tracks? Open
tidal-missing-tracks-report.html— these are tracks unavailable in Tidal's catalog (or region-locked), not import errors. - "Liked Songs" playlist appears as a regular UNLISTED playlist on Tidal alongside your other playlists, with your liked songs in Spotify order.
License
This project is licensed under the Mozilla Public License 2.0 — see the LICENSE file for details. Copyright (c) 2026 aalzubidy.
No comments yet
Be the first to share your take.