Spotify Downloader is an application that allows you to easily download songs from spotify without the need of Spotify Premium through an easy to use GUI and many customisable settings to get the output that you desire.
Note that users are responsible for any potential legal consequenses that comes with downloading music. I do not condone unauthorized downloading of copyrighted material and do not take any responsibility for user actions. I highly encourage you to purchase the songs directly from the artists to support them and their work
Only currently supports windows. Other platforms may be coming soon
The latest release can be found Here. For multiple use Installer Recommended, for single use Portable Recommended
Follow the instructions below depending on your chosen install type.
Installer
Note: Installer requires administrator privileges otherwise install will fail
IF A WINDOW COMES UP SHOWING "Windows protected your PC" click:
- More Info
- Run Anyway
Reasoning Behind This
This popup generally comes up when windows defender does not know much about a program being installed without a publisher. Since my program is not verified by microsoft, this will show up on first launch for almost everyone. There is not really anything that I can do about this.
Choose your install location. Default is "C:/Program Files/Spotify Downloader" but you can change this to anywhere you like.
Note: If the program is already installed in the chosen location, it will overwrite and update the old install
Select the Spotify Downloader component (selected by default)
The program will add a shortcut to the start menu and the name can be changed here
Click install and wait for the installer to finish
Now click Finish and the program is ready to be ran
You can open the program through the start menu or from the installed location through "Spotify Downloader.exe"
Portable/ZIP
Unzip the file to any location through your chosen unzipping software.
The program can now be ran through "Spotify Downloader.exe"
Please note that downloading too many songs in a short time span can lead to YouTube flagging your IP and preventing further downloads (Will not effect your YouTube experience). I have not experienced it personally and have downloaded a few thousand songs within a day on a few occasions when testing but there is a case where someone downloaded 5000 songs in one day which got their IP flagged so if you intend to download a large amount of songs it is safer to spread it out over a few days or limit your download speed in the settings.
Side Panel
Note: Icon colour can be toggled to white by changing the Sidebar Icons Colour setting

Download Screen Button
- Takes you to the setup or processing screen depending on if a download is started or not
Error Screen Button
- Takes you to the previous download's song errors
- Note: Button is non-interactable and faded if no previous download has errors
Settings Screen Button
- Takes you to the settings screen
Donate Button
- Click to donate and support the development of this program
- Note: Opens in browser
Update Button
- Click to check for updates
- The icon will change state depending on the checking status, and if an update is available or not
- If an update is available it will redirect you to the newest github release
- Note: Opens in browser
Submit Bug Button
- Click to submit an issue to the github repo
- Note: Opens in browser
Help Button
- Click to access the help documentation (What you are reading now)
- Note: Opens in browser
Setup

Download Status
- Shows the result of the last download
Enter Song/Playlist URL
- The URL to your songs you would like to download
- You can click the paste button directly to the right to input the copied text from your clipboard into the input
- Accepts:
- Singlular Songs
- Playlists
- Albums
Note: Your playlist or album must be public or else it will not work
How To Find Your URL
In App
- Right click Your chosen song or playlist
- Share
- Copy link to playlist
In Browser
- Click on your playlist or song
- Copy the URL
Select A Save Location
- The path to your download location
- You can click the browse button directly to the right to browse to a location
- Note: Saved between sessions
Settings
Note: All settings are saved between sessions


Overwrite Existing Files - Recommended: OFF
- If enabled, downloading will overwrite previously downloaded files or not
Codec - Recommended: M4A
- The format the each song will be output as
- Note: All formats will be converted from M4A and as a result WAV & FLAC are lossy and only implemented for convenience
Normalize Volume - Recommended: ON, -14dB
- If enabled, changes the value of all songs to the same depending on its average volume.
- Quite: -17dB
- Normal: -14dB
- Loud: -11dB
Audio Bitrate - Recommended: 192kb/s
- Sets the output quality of each song downloaded
- High Quality: 256kb/s
- Good Quality: 192kb/s
- Low Quality 128kb/s
Average File Size
- Displays a estimated file size based on the chosen bitrate
- File Size (MB) = (bitrate(kbs) * duration(seconds)) / 8) / 1024
- Does not take into account metadata, an extra ~0.9MB is added
Codec Details
- Displays conversion details to remind that it is converted from an M4A file
- Shows what type of metadata is used for the selected format
- Shows warnings in red when something is different (No cover art for example)
File Name
- Enclosing tag input sets the characters to open and close a tag
- Left character sets the opening input
- Right character sets the closing input
- File Name Input sets the output name of each song.
- Each tag must be enclosed with the characters set in the left input field
- Can only include these currently implemented tags:
- Song Name - Name of the song
- Album Name - Name of the album
- Song Artist - Name of the first artist of a song
- Song Artists - Names of each artist of a song "Artist1, Artist2, Artist3, ..."
- Album Artist - Name of the first artist of the songs album
- Album Artists - Names of each artist of a songs album "Artist1, Artist2, Artist3, ..."
- Song Time Seconds - Time of the song in seconds
- Song Time Minutes - Time of the song in minutes "01.23"
- Song Time Hours - Time of the song in hours "00.01.23"
- Year - Release Year of the song
- Month - Release month of the song
- Day - Release day of the song
- Codec - The codec of the downloaded song
Sub Folders
- Enclosing tag input sets the characters to open and close a tag
- Left character sets the opening input
- Right character sets the closing input
- Sub Folders Input sets the sub folders within the chosen directory that each song will be saved to
- Each tag must be enclosed with the characters set in the left input field
- Can only include these currently implemented tags:
- Song Name - Name of the song
- Album Name - Name of the album
- Song Artist - Name of the first artist of a song
- Song Artists - Names of each artist of a song "Artist1, Artist2, Artist3, ..."
- Album Artist - Name of the first artist of the songs album
- Album Artists - Names of each artist of a songs album "Artist1, Artist2, Artist3, ..."
- Song Time Seconds - Time of the song in seconds
- Song Time Minutes - Time of the song in minutes "01.23"
- Song Time Hours - Time of the song in hours "00.01.23"
- Year - Release Year of the song
- Month - Release month of the song
- Day - Release day of the song
- Codec - The codec of the downloaded song

Show Status Notifications - Default: ON
- If enabled, notifications will show when notable events happen during downloading to notify you incase it is in the background
Downloader Threads - Recommended: 6
- The amount of threads used while downloading songs. This will control how many songs download simultaneously but large values can negatively effect CPU usage. Cannot be changed during download.
Download Speed Limit - Recommended: 0MB/s
- The speed limit to downloading songs in MB/s. A value of 0 is uncapped
Spotify Client ID
- Spotify API Client ID used for fetching songs
- If empty uses the default Spotify API Client ID
Spotify Client Secret
- Spotify API Client Secret used for fetching songs
- If empty uses the default Spotify API Client Secret
For help creating your own spotify app and keys, view the lower section titled "Creating your own Spotify API keys"

Downloader Thread UI - Recommended: Compact
- Changes the style of each thread UI while downloading
- Compact: Newer compact and smaller design
- Original: Older larger design, spaces out details
- Dynamic: Switches between compact and original depending on threads used to fit the screen
Sidebar Icons Colour - Default: ON
- Enables colour for the sidebar icons
Check For Updates - Default: ON
- Toggles if the app checks for updates when launching
Downloading

Each track downloading will show its:
- Cover image
- Downloading index on that thread
- Title
- Artist(s)
- Progress Percent
- Downloading Status
You can see your total download progress on the counter at the bottom left.
Download Progress
- Shows your total download progress
- Located in the bottom left corner
Pause Button
- Pauses all current downloads
Cancel Button
- Cancels the current download and returns to the setup screen
Settings Button
- Opens the settings menu, download continues in the background while open
Download Errors

Shows all of the songs that failed to download due to various reasons that will be listed below each song
Creating your own Spotify API keys
Go to the spotify developer dashboard and sign in with your spotify account (Can be any it doesnt matter)
Click the "Create app" button and input the following fields:

- App Name: Anything you like
- App Description: Anything you like
- Redirect URIs: (For each input them and click the "Add" button on the right)
- Which API/SDKs are you planning to use? Tick "Web API"
Once you have read and accepted Spotify's Developer Terms of Service and Design Guidelines you can click the "Save" button at the bottom
Now in the app page, click the "Settings" button at the top right
In this menu click the "View client secret" button to access the secret and now you have both the Client ID and Client Secret. Copy these both into the respective fields in the Spotify Downloader and it will now use your keys

- Simple GUI
- Easy Downloading
- Multithreading
- Automatically splits playlists into smaller lists that download seperately speeding up download time significantly
- Automatic Metadata Saving
- Automatically saves the following to each file:
- Song Title
- Artists
- Album Name & Cover
- Track Number
- Spotify & Youtube ID used to download the song
- Many Downloading Settings
- Many settings for downloading including:
- Overwriting
- Audio Codec
- Volume Normalization
- Audio Bitrate
- Dynamic File Naming
- Sub-Folders
- Downloading Thread Count & Speed Limit
- Multiple GUI Settings
- Multiple File Formats
- M4A
- AAC
- MP3
- OGG Vorbis
- WAV
- FLAC
- Automatic Cleanup
Spotify Downloader is distributed under the GNU General Public License v3.0 from 17/04/2024 and Release v1.1.3
Spotify Downloader is a program that downloads songs from Spotify. Copyright (C) 2024 William Schack
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Where are songs downloaded from?
Despite what the title implies, songs are actually downloaded from youtube. The program retrieves the data of each song from spotify and uses a combination of the duration, title, artists, album, and views in special cases, to determine which songs on youtube correspond to those on spotify. You can find the algorithm behind this in Song.cpp under SearchForSong.How accurate are the downloads?
The downloads are almost always accurate and have only few times has downloaded the incorrect song being usually covers of a song. If the song is not on youtube at all, it will not download the song if there are no extremely similar songs in title, artists, duration, etc. After roughly 500 songs tested over many artists and genres I have only gotten around 5-10 incorrect which were all covers of songs that were not on youtube. You can find the algorithm behind this in Song.cpp under SearchForSong.What can I download from spotify?
You can download a playlist, album, episode, or individual songs. You also cannot download all songs from a given artist but if you need to get around this the only suggestion I have is to compile all of their songs into a playlist and input that into the program but I may have a look into supporting this in the future. If you need any help finding the link for your music, there is a guide Here under Setup > How To Find Your URL.What is the quality of the downloaded songs?
The audio quality of each song can be configured in the settings ranging from 33-256kb/s with an mp3 file, and 33-128kb/s for everything else in steps of 32 (excluding 33). The program downloads the highest quality stream from youtube usually being around a 128kb/s m4a file and converts it to the desired quality.Why are the lossless audio formats lossy?
Each file is downloaded as an M4A format through youtube at approx ~128kb/s. This is then later converted to the codec chosen in the settings. Because of this formats like WAV that are usually lossless will still have the quality of that M4A file and the quality cannot be increased further. Lossless audio formats where only implemented as it may be easier for some people to download it with those formats if they require them rather than converting each file themselves.Why would my IP be flagged and how can I fix it?
Downloading too many songs in a short time span can lead to YouTube flagging your IP and prevent further downloads (Will not effect your YouTube experience). I have not experienced it personally and have downloaded a few thousand songs within a day on a few occasions when testing but there is a case where someone downloaded 5000 songs in one day which got their IP flagged so it is only administered on overuse. I have no control over when YouTube flags your IP or have any clue what the threshold is but after it has been done there isn't much I can do. The only suggestion I have is to disable your VPN as its IP may have been previously flagged if you have one enabled or try using one if not.Why have there been months between updates?
When I first created this project I has a lot of free time on my hands and was able to work on it for as long as I wanted, but now I have other responsibilities that are taking up a good chunk of my time and there are other projects that I work on outside of this one so I just do not have the time to work on this constantly. This project is being made out of passion and I do work on it often enough to now release updates hopefully monthly and if not bi-monthly, but do not let that put you off as I enjoy working on this project and no matter the breaks that I have taken, this will continue to be developed. If anything does happen where I am unable to work on the project anymore, I will update the readme to reflect that.Packages Used
- Qt v6.5.3 - LGPL v3 License
- Python YT Music API - MIT License (Translated to C++)
- ffmpeg 2023-09-07-essentials-www.gyan.dev - LGPL v2.1 License
- yt-dlp 2025-01-12 - Unlicense
- Taglib v2.0.2 - LGPL v2.1 License, Mozilla Public License
Thanks to you for using my program :)