Skip to content

geschke/suno-bulk-downloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Suno Bulk Downloader

A Python script to bulk download your Suno AI music library — organized by workspace, with full metadata and embedded ID3 tags.

Built with the assistance of Claude by Anthropic.

Why this exists

I've been using Suno for a while now and genuinely enjoy it — at some point I had accumulated well over a thousand generated tracks and wanted to back them all up properly, including lyrics, prompts and cover art.

The natural first step was to look for existing tools. I tried a couple of browser extensions. One of them handled smaller libraries fine but kept failing somewhere around 650 songs — consistently, no matter what I tried. Another one had issues when I wanted to re-download a workspace I had already partially downloaded, this time to also get the metadata files I had missed the first time around. Nothing broke catastrophically, but it just didn't behave reliably enough for my use case.

I also came across a few standalone scripts on GitHub. Some of them worked well enough for basic downloading, but what I specifically needed was workspace support — I organize my songs into workspaces on Suno, and I wanted that structure reflected locally. The ability to download a single workspace, skip one, or pick a few by name was something I couldn't find in a ready-made solution without significant modification. At that point the choice was either to keep evaluating tools or to just build something that fit my needs. With a bit of help from an AI assistant, the latter turned out to be the faster path.

This was built for personal use. I'm publishing it on the off chance that someone else finds it useful — if you do, great. If not, there are plenty of other approaches out there. Suno unfortunately doesn't offer an official bulk export, so the ecosystem of unofficial tools will likely keep growing regardless.

Features

  • 📁 Workspace-aware — downloads songs into separate folders per workspace
  • 🎵 ID3 tag embedding — title, artist, year, genre and cover art are written directly into each MP3
  • 🖼️ Cover art — high-resolution cover image saved as a separate file and embedded in the MP3
  • 📄 Full metadata — lyrics, style prompt and all track info saved as .txt and .json per song
  • 🔁 Resume support — already downloaded files are skipped, so you can restart at any time
  • 🐢 Conservative download settings — generous delays between requests to avoid rate limiting
  • 🔌 Single connection — no parallel requests, strictly sequential to be a polite API client
  • 🔍 Workspace filtering — include or exclude specific workspaces via --only / --skip

Disclaimer

This tool is not affiliated with, endorsed by, or sponsored by Suno AI.
It is an independent, unofficial utility that uses your existing Suno session token to access your own content.
Use it responsibly and in accordance with Suno's Terms of Service.

API Stability Notice

This script was developed and tested against Suno's internal API as of March 2026. It uses endpoints that are not officially documented or supported by Suno.

Suno can change, rename or remove these endpoints at any time. If the script suddenly stops working — returning errors like 404, 405 or unexpected empty results — the API has likely changed. In that case the endpoints and/or request format in the script would need to be updated accordingly.

Requirements

  • Python 3.10 or higher
  • A Suno account with songs in your library

Installation

# 1. Clone the repository
git clone https://github.com/geschke/suno-bulk-downloader.git
cd suno-bulk-downloader

# 2. Create a virtual environment (recommended)
python -m venv venv

# Windows
venv\Scripts\activate

# macOS / Linux
source venv/bin/activate

# 3. Install dependencies
pip install -r requirements.txt

Getting Your Bearer Token

The script authenticates using your existing Suno browser session. No password is required.

  1. Open Chrome or Edge and go to suno.com
  2. Make sure you are logged in
  3. Open Developer Tools: F12
  4. Go to the Network tab
  5. Reload the page: F5
  6. Type feed in the filter field
  7. Click on the v3 POST request
  8. Under Request Headers, find the Authorization entry — it reads: Bearer ey...
  9. Copy only the part after Bearer — the long ey... string

⚠️ Tokens expire after a few hours. If the script reports a 401 error, simply get a fresh token and restart — already downloaded files will be skipped automatically.

🔒 Your token is never stored or transmitted anywhere other than directly to Suno's own API.

Usage

List all workspaces

python suno_download.py --list-workspaces --token "ey..."

Output:

Available workspaces:
  My Workspace
  Der Kluft
  Votfr Playlist
  AT01
  ...

Total: 16 workspace(s)

Download all workspaces

python suno_download.py --token "ey..."

Download a specific workspace only

python suno_download.py --only "AT01" --token "ey..."

Skip a specific workspace

python suno_download.py --skip "My Workspace" --token "ey..."

Also include a full library dump (all songs in one folder)

python suno_download.py --include-library --token "ey..."

Test run (first workspace + 5 songs only)

python suno_download.py --debug-first --token "ey..."

Custom output directory

python suno_download.py --output "D:\Music\Suno" --token "ey..."

Set token in the script instead of passing it every time

Open suno_download.py and set:

SUNO_TOKEN = "ey...your_token_here..."

Output Structure

suno_library/
├── AT01/
│   ├── Song Title__a1b2c3d4.mp3      ← audio with embedded tags + cover
│   ├── Song Title__a1b2c3d4.jpeg     ← cover art
│   ├── Song Title__a1b2c3d4.txt      ← lyrics, style prompt, metadata
│   └── Song Title__a1b2c3d4.json     ← full raw API response
├── Der Kluft/
│   └── ...
└── _library_all/                     ← only with --include-library
    └── ...

Configuration

You can adjust these constants at the top of suno_download.py:

Setting Default Description
SUNO_TOKEN "YOUR_TOKEN_HERE" Your bearer token
OUTPUT_DIR ./suno_library Download destination
DELAY_BETWEEN_DOWNLOADS 8.0 s Pause between songs
DELAY_BETWEEN_FILES 2.5 s Pause between files within a song
MAX_RETRIES 6 Retry attempts on error
MAX_BACKOFF 120 s Maximum backoff wait time

Performance

With default settings (~13 seconds per song including delays):

Songs Estimated time
100 ~22 minutes
500 ~1.8 hours
1000 ~3.6 hours
1700 ~6 hours

The conservative timing is intentional — it keeps request rates low and reduces the risk of hitting Suno's rate limits or triggering any automated blocks.

Credits

  • Built with the assistance of Claude (Anthropic) — an AI assistant that helped design, debug and iterate on this tool through conversational development
  • Suno API endpoint research done by inspecting browser network traffic

License

MIT License — see LICENSE for details.

About

A Python script to bulk download your Suno AI music library — organized by workspace, with full metadata and embedded ID3 tags.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages