Exportify: exporting Spotify playlists to CSV without a backend
Export/Backup Spotify playlists using the Web API
At a glance
- What is it?
- Exportify is a browser-only React app that turns Spotify playlists into CSV files through the Spotify Web API. It solves a real gap in the Spotify client, but it only exports, and it depends entirely on Spotify's API staying open to it.
- Who is it for?
- Adopt Exportify if you need a periodic CSV snapshot of your own Spotify playlists and you are fine with a browser-only tool that holds no data. Do not adopt it if you need scheduled, headless backups, an API, or a round-trip import path, because the README describes none of those.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 71 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The gap Exportify fills: Spotify has no built-in playlist export
The README opens with the problem in plain terms: there is no way to export, archive or backup playlists from the Spotify client itself. Exportify exists to close that single gap. It is a web app at exportify.app that reads your playlists through the Spotify Web API and writes them out as CSV files.
The intended user is someone who wants a durable copy of their own playlist data. That could be a DJ archiving a library, a listener who has spent years curating playlists and wants a snapshot before a subscription lapses, or an analyst who wants track metadata in a spreadsheet. It is not a music downloader, and the README never claims to be one. The exported data is metadata: track URIs, names, artist and album fields, durations, ISRCs, and optionally audio features. No audio files are produced.
The scope is deliberately narrow. Exportify reads playlists and writes files. There is no editing, no merging, no deduplication, and no server-side storage. The README states this directly: no data is saved, and the entire application runs in the browser.
How the browser talks to the Spotify Web API
The architecture is a Create React App single-page application. The package.json lists React 18, react-bootstrap, react-i18next, axios, jszip, file-saver and bottleneck among its dependencies, which maps cleanly onto what the app does: fetch from the Spotify API with axios, throttle those requests with bottleneck, assemble multi-playlist exports into a zip with jszip, and hand the result to the browser with file-saver.
The data flow is client-side end to end. You authorise the app with read-only Spotify access, the browser then calls the Spotify Web API for your playlists and their tracks, and the CSV is assembled in memory before being downloaded. Because there is no backend, there is no server that sees your playlists and no database that retains them. That is the design's main privacy argument, and it is also its main constraint: every export depends on the browser tab staying open and on Spotify's API responding.
Rate limiting is handled explicitly. The README points to a pull request describing advanced rate limiting handling for speedy exports, and bottleneck in the dependency list is consistent with that. The practical consequence is that large accounts take time. The README warns that Export All may take a while when many playlists exist or when they are large, and that the more data you request per track, the longer the export runs.
Installing Exportify and running a first export
Most people should use the hosted app. The README gives the link directly: open https://exportify.app/, click Get Started, grant read-only access to your playlists, then click Export next to a playlist. That produces a CSV download in the browser. Export All instead produces a zip file containing one CSV per playlist.
If you want to run it yourself, the repository ships a Dockerfile that installs dependencies and starts the Create React App development server on port 3000:
FROM node:18.18-alpine
COPY . /
RUN yarn install
EXPOSE 3000
ENTRYPOINT ["yarn", "start"]Building that image requires a Spotify application client ID, because the app authenticates against the Spotify Web API. The repository has a .env file at the top level, which is where that configuration belongs. The README does not spell out the variable name, so read .env before building.
For local development without Docker, the README gives the standard Create React App commands. Run yarn install first, then:
yarn install
yarn startThe README states that yarn start runs the app in development mode on http://127.0.0.1:3000. The page reloads on edits and lint errors appear in the console. yarn test launches the test runner in interactive watch mode, and yarn build produces a production bundle in the build folder.
The export itself is a CSV with a fixed set of columns. Track URI, Track Name, Artist URI(s), Artist Name(s), Album URI, Album Name, Album Artist URI(s), Album Artist Name(s), Album Release Date, Album Image URL, Disc Number, Track Number, Track Duration in milliseconds, Track Preview URL, Explicit, Popularity, ISRC, Added By and Added At are always present. Everything else is opt-in through the cog: artist genres, the twelve audio features fields (Danceability, Energy, Key, Loudness, Mode, Speechiness, Acousticness, Instrumentalness, Liveness, Valence, Tempo, Time Signature), and album genres, label and copyrights.
The re-import story is a manual workaround, not a feature
Exportify exports. It does not import. The README is honest about this and describes a workaround rather than a feature: open the CSV in Excel, select and copy the spotify:track:xxx URIs, create a playlist in Spotify, and paste them in. The README adds that this has only been tested with the desktop app.
That is a meaningful limitation. If your goal is migration between accounts or restoration after a loss, the round trip runs through a spreadsheet and a clipboard, and it depends on Spotify's own paste handling rather than on anything Exportify controls. There is no CLI, no import command, and no documented API. Anyone evaluating Exportify as a backup-and-restore tool should treat restore as a separate, manual problem that the project does not solve.
There is a second constraint buried in the README's notes: according to Spotify's documentation, folders are not returned through the Web API and cannot be created. So if your library is organised into folders, that structure is not part of the export. You get playlists, not the hierarchy they lived in.
Where Exportify breaks down: large libraries, search latency and API dependence
The clearest failure mode is scale. The README warns that Export All may take a while when many playlists exist or when they are large, and that requesting more data per track lengthens the export further. Because everything happens in a browser tab, a long export is a tab you cannot close. This is the wrong tool for an unattended nightly backup.
Playlist search has its own latency problem, and the README flags it with a warning. The Spotify API does not allow searching playlists directly, so Exportify must retrieve all playlists before it can filter them. With a very large number of playlists, there is a delay before the first search results appear. The advanced search syntax (public:true, public:false, collaborative:true, collaborative:false, owner:me, owner:[owner]) filters what has already been fetched; it does not make the fetch cheaper.
Everything also depends on Spotify's Web API continuing to allow this kind of access. Exportify is a client of that API, not a replacement for it. If authorisation changes, or the API is unavailable, the app has nothing to read. The README's note about folders is a small example of the same dependency: the export format is bounded by what Spotify chooses to return.
Finally, the data is metadata only. Track Preview URL points at a 30-second mp3 preview where Spotify provides one, but that is not the track. Anyone hoping to turn a playlist into audio files is looking at the wrong project.
Exportify compared with writing your own Spotify API script
The obvious alternative is a short script against the Spotify Web API: authenticate, page through a playlist's tracks, write rows to a file. That approach gives you scheduling, headless operation, custom columns and your own storage, none of which Exportify offers.
The difference in approach is where the work happens. Exportify puts the entire application in the browser, which is why it can promise that no data is saved: there is no server to save it on. A script puts the work on a machine you control, which is why it can run on a cron schedule but also why you now own token refresh, pagination, rate limiting and error handling. Exportify has already made those decisions, using bottleneck for rate limiting and jszip for bundling, and it ships a test suite built on React Testing Library and MSW for network-level mocking.
If you need one-off or occasional exports and you would rather not maintain auth code, Exportify is the shorter path. If you need exports on a schedule, or as part of a pipeline, a script is the right shape and Exportify is the wrong one. The two are not really competing on features; they compete on where the code lives.
Maintenance, licence and what the repository tells you
Exportify is MIT licensed, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are included. That is a permissive licence, and it matters here because the app is meant to be self-hosted by anyone who wants to. The hosted instance at exportify.app is a convenience, not the only route. This is not legal advice; read the LICENSE file in the repository for the actual terms.
The repository is not archived, and the last push was on 2026-07-22. The most recent tagged release listed is 2024-september, dated 2024-09-04, described in the README as a major release adding dark mode, internationalisation and search enhancements. The README's history section records three milestones: the project started in 2015, had a major release in 2020 adding search, artist and audio features, liked songs export and a new rate limiting system, and the 2024 release. That cadence suggests feature work arrives in occasional large batches rather than continuously.
Upgrade cost is low for users of the hosted app, since there is nothing to upgrade. For self-hosters, the dependency surface is the cost: React 18, react-scripts 5, Bootstrap 5, i18next and a set of Spotify-facing libraries that move when Spotify moves. Because the app is client-side, a breaking Spotify API change is a code change, not a config change, and the README does not document a compatibility or deprecation policy.
Editorial conclusion
Adopt Exportify if you need a periodic CSV snapshot of your own Spotify playlists and you are fine with a browser-only tool that holds no data. Do not adopt it if you need scheduled, headless backups, an API, or a round-trip import path, because the README describes none of those. Before relying on it, check the export columns you actually need (album, artist and audio features are opt-in via the cog) and confirm the Spotify account you will authorise has read access to the playlists you care about.
Frequently asked questions
Is Exportify safe to use?
The README states that no data is saved and that the entire application runs in the browser, and it asks only for read-only access to your playlists. That means the export happens client-side rather than on a server that stores your library. You still have to decide whether you trust the hosted instance at exportify.app; self-hosting from the repository is the alternative the MIT licence allows.
What is Exportify used for?
It exports and backs up Spotify playlists to CSV using the Spotify Web API, because the README notes there is no way to export, archive or backup playlists from the Spotify client for safekeeping. Export All produces a zip file with one CSV per playlist.
How do I use Exportify?
Open exportify.app, click Get Started, grant read-only access to your playlists, then click Export next to a playlist. Clicking Export All instead saves a zip file containing a CSV for each playlist in your account, which the README says may take a while for large libraries.
Is Exportify free?
The README presents the app as a free web tool at exportify.app with no account, pricing or paid tier mentioned, and the source is MIT licensed. Nothing in the README describes a paid plan or usage limit.
Can Exportify turn Spotify songs into MP3 files?
No. Exportify writes CSV metadata such as track URIs, names, artists, albums, durations and ISRCs. The Track Preview URL column points at a 30-second mp3 preview where Spotify provides one, but the export is not audio.
How do I get a Spotify CSV file?
Use Exportify: authorise read-only access, then click Export for a single playlist or Export All for a zip of CSVs. The README also notes that once you have the CSV, you can copy the spotify:track:xxx URIs from it and paste them into a new Spotify playlist to re-import, which has only been tested with the desktop app.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/watsonbox-exportify)