Split large Spotify playlists (exported via Exportify) into parts of up to 100 tracks, then import them into Spotify using the desktop paste assistant or the Spotify Web API.
- Split — reads an Exportify CSV, detects the track URI column, and writes
part_XX.csvpluspart_XX_uris.txtfiles (100 tracks per part by default). - Publish — creates playlists in Spotify via paste (recommended), api, or auto (API with paste fallback).
- Python 3.11+
- Exportify export of your playlist
- Spotify desktop app for paste mode
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
pip install -e ".[dev]"Copy your Exportify CSV to data/playlist.csv (or set INPUT_CSV).
jupyter notebook notebooks/split_and_publish.ipynbRun all cells: split, then publish. First-time setup installs the package with %pip install -e ..
spotify-split split --input data/playlist.csv
spotify-split publish --mode paste- Open Exportify and sign in with Spotify.
- Export the playlist you want to split.
- Save the CSV as
data/playlist.csv(or another path and pass--input). - Run split; outputs go to
output/playlist_parts/by default.
See examples/exportify_columns.md for expected CSV columns.
| Mode | Description |
|---|---|
paste |
Default. Copies track URIs to the clipboard; you paste into new playlists in the Spotify desktop app. No Premium or API credentials required. |
api |
OAuth + Spotify Web API. Requires Premium on the developer app owner account. Set SPOTIFY_CLIENT_ID and SPOTIFY_CLIENT_SECRET in .env. |
auto |
Tries API first; falls back to paste on Premium or network errors. |
Copy .env.example to .env and fill in credentials only if you use api or auto:
copy .env.example .envSet PUBLISH_MODE=api or use spotify-split publish --mode api.
- Paste mode works with Throne TUN + System proxy enabled.
- API mode uses a dedicated HTTP session with
trust_env=Falseso Spotify requests bypassHTTP_PROXYenvironment variables. If OAuth still fails behind a proxy, add Spotify domains to your proxy DIRECT rules.
├── src/spotify_playlist_split/ # library
├── notebooks/split_and_publish.ipynb
├── data/ # your CSVs (gitignored)
├── output/ # generated parts (gitignored)
└── examples/exportify_columns.md
MIT — see LICENSE.