spotdl
Download your Spotify playlists and songs along with album art and metadata
What it is and what it does
spotDL is a command-line tool that fetches songs from Spotify playlists and downloads them from YouTube, automatically embedding album art, lyrics, and metadata into the resulting audio files. It supports multiple operations: downloading individual tracks or entire playlists, syncing directories to keep them in sync with playlist changes, saving metadata without downloading, and updating metadata on existing files.
The tool depends on a large ecosystem of music and web libraries—Spotify API clients (spotipy, spotipyfree), YouTube downloaders (yt-dlp, ytmusicapi), metadata handlers (mutagen), and a web interface built on FastAPI and Jinja2. It requires FFmpeg for audio processing and recommends Deno for reliable YouTube access. The package is actively maintained, supports Python 3.10 through 3.14, and has no known security vulnerabilities.
Use it for:
- Backup Spotify playlists as local files with full metadata and album art intact.
- Keep a local music directory synchronized with a Spotify playlist, automatically downloading new additions and removing deleted tracks.
- Download individual songs from Spotify for offline listening without a premium subscription.
- Batch-update metadata and album art on existing music files using the `meta` operation.
- Access a web interface for downloading single songs when command-line usage is inconvenient.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
spotDL downloads songs from Spotify playlists on YouTube, embedding album art, lyrics, and metadata into the files.
Yes, if you accept the legal responsibility for downloading music and have or can install FFmpeg and Deno. spotDL is actively maintained, has low install friction, carries no known vulnerabilities, and offers a mature feature set for playlist backup and sync. The MIT license is permissive. Install it if offline Spotify access is your goal; skip it if you need lossless audio or have legal concerns about YouTube-sourced downloads.
Install
spotdl on PyPI
pip
pip install spotdluv
uv add spotdlpoetry
poetry add spotdlInstalling spotdl
Before you install
Low friction install with a pure Python wheel. Actively maintained with a recent release; however, it requires external system dependencies (FFmpeg mandatory, Deno recommended) that must be installed separately or via spotDL's own download commands.
License in practice
MIT license permits free use, modification, and distribution with minimal restrictions, making it safe for personal and commercial projects.
Quickstart
pip install spotdl
spotdl download "https://open.spotify.com/track/..."
# or for a playlist:
spotdl download "https://open.spotify.com/playlist/..."
FFmpeg is required; install via `spotdl --download-ffmpeg` or system package manager. Deno is strongly recommended for reliable YouTube downloads, especially for videos marked 'made for kids'.
Verify before relying
- Whether the 128 kbps bitrate from regular YouTube accounts is acceptable for your use case, or if 256 kbps (YouTube Music premium) is necessary.
- Legal status of downloading copyrighted music in your jurisdiction—spotDL disclaims responsibility for user actions.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (<3.15,>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 21 — beautifulsoup4, datastar-py, fastapi, jinja2, mutagen, platformdirs, pydantic, pykakasi, python-multipart, python-slugify, rapidfuzz, requests, rich, soundcloud-v2, spotipy, spotipyfree, syncedlyrics, uvicorn, websockets, yt-dlp, ytmusicapi |
| Maintenance | actively maintained — 25 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 290,310/month — #7,991 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: spotdl-4.5.2-py3-none-any.whl
Keywords: downloader, music, spotdl, spotify
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
pytubepytube downloads YouTube videos and playlists…
permissive · top 5,000 on PyPI
syncedlyricsFetches synchronized lyrics in LRC format for…
permissive · top 15,000 on PyPI
spotapiSpotAPI wraps Spotify's private and public APIs…
unclear · top 15,000 on PyPI
youtube_dlCommand-line tool to download videos from…
permissive · top 15,000 on PyPI
ytmusicapiytmusicapi lets you programmatically interact…
permissive · top 15,000 on PyPI
spotipyFreeProvides a Spotipy-compatible interface to…
unclear · top 15,000 on PyPI
eyeD3eyeD3 reads, edits, and displays ID3 metadata…
copyleft · top 15,000 on PyPI
spotipySpotipy is a Python client library for the…
permissive · top 15,000 on PyPI
pytubefixDownloads YouTube videos, playlists, and…
permissive · top 15,000 on PyPI
musicbrainzngsProvides Python bindings to query the…
permissive · top 15,000 on PyPI