{"id":13434037,"url":"https://github.com/watsonbox/exportify","last_synced_at":"2025-04-29T18:54:11.016Z","repository":{"id":32057049,"uuid":"35628788","full_name":"watsonbox/exportify","owner":"watsonbox","description":"Export/Backup Spotify playlists using the Web API","archived":false,"fork":false,"pushed_at":"2025-04-06T20:52:36.000Z","size":6183,"stargazers_count":3497,"open_issues_count":12,"forks_count":451,"subscribers_count":47,"default_branch":"master","last_synced_at":"2025-04-22T11:52:29.738Z","etag":null,"topics":["playlists","spotify","spotify-api","spotify-web-api"],"latest_commit_sha":null,"homepage":"https://exportify.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/watsonbox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-05-14T18:27:52.000Z","updated_at":"2025-04-22T08:39:05.000Z","dependencies_parsed_at":"2024-01-14T04:27:22.856Z","dependency_job_id":"7c607dda-e41b-4f1f-8c61-4303facaab18","html_url":"https://github.com/watsonbox/exportify","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/watsonbox%2Fexportify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/watsonbox%2Fexportify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/watsonbox%2Fexportify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/watsonbox%2Fexportify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/watsonbox","download_url":"https://codeload.github.com/watsonbox/exportify/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251565702,"owners_count":21609977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["playlists","spotify","spotify-api","spotify-web-api"],"created_at":"2024-07-31T02:01:43.800Z","updated_at":"2025-04-29T18:54:10.997Z","avatar_url":"https://github.com/watsonbox.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","others"],"sub_categories":[],"readme":"[![Build Status](https://api.travis-ci.com/watsonbox/exportify.svg?branch=master)](https://travis-ci.com/github/watsonbox/exportify)\n\n\u003ca href=\"https://exportify.app/\"\u003e\u003cimg src=\"assets/screenshot.png\"/\u003e\u003c/a\u003e\n\nExport your Spotify playlists to [CSV](https://en.wikipedia.org/wiki/Comma-separated_values) by clicking on this link: [https://exportify.app/](https://exportify.app/).\n\nAs many users have noted, there is no way to export/archive/backup playlists from the Spotify client for safekeeping. This application provides a simple interface for doing that using the [Spotify Web API](https://developer.spotify.com/documentation/web-api/).\n\n**No data will be saved - the entire application runs in the browser.**\n\n## Features\n\n- ⚙️ Optional inclusion of album, artist and audio features data in export files\n- 🔍 Playlist search with [advanced search syntax](#advanced-search-syntax) and results export\n- 🌓 Dark mode\n- 🗺 Available in 10 languages (English, French, Spanish, Italian, German, Portuguese, Swedish, Dutch, Japanese and Arabic)\n- 📱 Mobile friendly\n- ℹ Quick reference help\n- 🚀 [Advanced rate limiting handling](https://github.com/watsonbox/exportify/pull/75) for speedy exports\n- 👩‍💻 Modern [React-based development stack](#stack) + test suite\n\n## Usage\n\n1. Fire up [the app](https://exportify.app/)\n2. Click 'Get Started'\n3. Grant Exportify read-only access to your playlists\n4. Click the 'Export' button to export a playlist\n\nClick 'Export All' to save a zip file containing a CSV file for each playlist in your account. This may take a while when many playlists exist and/or they are large.\n\n### Re-importing Playlists\n\nOnce playlists are saved, it's also pretty straightforward to re-import them into Spotify. Open up the CSV file in Excel, for example, select and copy the `spotify:track:xxx` URIs, then simply create a playlist in Spotify and paste them in. This has only been tested with the desktop app.\n\n### Export Format\n\nTrack data is exported in [UTF-8](https://en.wikipedia.org/wiki/UTF-8) encoded [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) format with the following fields from the [Spotify track object](https://developer.spotify.com/documentation/web-api/reference/get-several-tracks):\n\n- Track URI\n- Track Name\n- Artist URI(s)\n- Artist Name(s)\n- Album URI\n- Album Name\n- Album Artist URI(s)\n- Album Artist Name(s)\n- Album Release Date\n- Album Image URL (typically 640x640px jpeg)\n- Disc Number\n- Track Number\n- Track Duration (ms)\n- Track Preview URL (mp3)\n- Explicit?\n- Popularity\n- ISRC ([International Standard Recording Code](https://isrc.ifpi.org/en/))\n- Added By\n- Added At\n\nBy clicking on the cog, additional data can be exported.\n\n\u003ca href=\"https://watsonbox.github.io/exportify/\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/17737/100668594-72be1600-335c-11eb-90d6-c9ae873e347d.png\"/\u003e\u003c/a\u003e\n\nBy selecting \"Include artists data\", the following fields will be added from the [Spotify artist object](https://developer.spotify.com/documentation/web-api/reference/get-multiple-artists):\n\n- Artist Genres\n\nAnd by selecting \"Include audio features data\", the following fields will be added from the [Spotify audio features object](https://developer.spotify.com/documentation/web-api/reference/get-several-audio-features):\n\n- Danceability\n- Energy\n- Key\n- Loudness\n- Mode\n- Speechiness\n- Acousticness\n- Instrumentalness\n- Liveness\n- Valence\n- Tempo\n- Time Signature\n\nAdditionally, by selecting \"Include album data\", the following fields will be added from the [Spotify album object (full)](https://developer.spotify.com/documentation/web-api/reference/get-an-album)\n\n- Album Genres\n- Label\n- Copyrights\n\nNote that the more data being exported, the longer the export will take.\n\n### Playlist Search\n\nIf you're searching for a specific playlist to export, you can use the search facility to find it quickly by name:\n\n\u003ca href=\"https://watsonbox.github.io/exportify/\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/17737/100201109-eb0d7d00-2eff-11eb-993e-7ed955e2361c.gif\"/\u003e\u003c/a\u003e\n\n- Searching is _case-insensitive_.\n- Search results can be exported as a zip file by clicking \"Export Results\"\n\n\u003e [!WARNING]\n\u003e Please be aware that if you have a very large number of playlists, there may be a small delay before the first search results appear since the Spotify API itself doesn't allow for searching directly, so all playlists must be retrieved first.\n\n#### Advanced Search Syntax\n\nCertain search queries have special meaning:\n\n| Search query | Meaning |\n|----|----|\n| `public:true` | Only show public playlists |\n| `public:false` | Only show private playlists |\n| `collaborative:true` | Only show collaborative playlists |\n| `collaborative:false` | Don't show collaborative playlists |\n| `owner:me` | Only show playlists I own |\n| `owner:[owner]` | Only show playlists owned by `[owner]` |\n\n\n## Development\n\nThis project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\nIn the project directory, first run `yarn install` to set up dependencies, then you can run:\n\n**`yarn start`**\n\nRuns the app in the development mode.\\\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.\\\nYou will also see any lint errors in the console.\n\n**`yarn test`**\n\nLaunches the test runner in the interactive watch mode.\\\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n**`yarn build`**\n\nBuilds the app for production to the `build` folder.\n\n### Stack\n\nIn addition to [Create React App](https://github.com/facebook/create-react-app), the application is built using the following tools/libraries:\n\n* [React](https://reactjs.org/) - A JavaScript library for building user interfaces\n* [Bootstrap 5](https://getbootstrap.com/) - styling and UI components\n* [Font Awesome 6](https://fontawesome.com/) - vector icon set and toolkit\n* [react-i18next](https://react.i18next.com/) - internationalization framework\n* [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) - light-weight solution for testing React DOM nodes\n* [MSW](https://mswjs.io/) - network-level request mocking (more of my own thoughts [here](https://watsonbox.github.io/posts/2020/11/30/discovering-msw.html))\n\n### History\n\n- 2015: Exportify is [born](https://github.com/watsonbox/exportify/commit/b284822e12c3adea8fb83258fdb00ec4690701e1)\n- 2020: [Major release](https://watsonbox.github.io/posts/2020/12/02/exportify-refresh.html) including search, artist and audio features, liked songs export, and a new rate limiting system\n- 2024: [Major release](https://watsonbox.github.io/posts/2024/09/04/exportify-updates.html) including dark mode, internationalization, and search enhancements\n\n## Notes\n\n- According to Spotify's [documentation](https://developer.spotify.com/web-api/working-with-playlists/):\n\n  \u003e Folders are not returned through the Web API at the moment, nor can be created using it\".\n\n  Unfortunately that's just how it is.\n\n- I've [gone to some lengths](https://github.com/watsonbox/exportify/pull/75) to try to eliminate errors resulting from excessively high usage of the Spotify API. Nonetheless, exporting data in bulk is a fairly request-intensive process, so please do try to use this tool responsibly. If you do require more throughput, please consider [creating your own Spotify application](https://github.com/watsonbox/exportify/issues/6#issuecomment-110793132) which you can use with Exportify directly.\n\n- Disclaimer: It should be clear, but this project is not affiliated with Spotify in any way. It's just an app using their API like any other, with a cheeky name and logo 😇.\n\n- In case you don't see the playlists you were expecting to see and realize you've accidentally deleted them, it's actually possible to [recover them](https://support.spotify.com/us/article/can-i-recover-a-deleted-playlist/).\n\n\n## Error Monitoring\n\nError monitoring provided by Bugsnag.\n\n\u003ca href=\"http://www.bugsnag.com\"\u003e\n  \u003cimg src=\"assets/bugsnag.png\" width=\"200\" /\u003e\n\u003c/a\u003e\n\n## Running With Docker\n\nTo build and run Exportify with docker, run:\n\n**`docker build . -t exportify`**\n\n**`docker run -p 3000:3000 exportify`**\n\nAnd then open [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\n## Contributing\n\n1. Fork it ( https://github.com/watsonbox/exportify/fork )\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwatsonbox%2Fexportify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwatsonbox%2Fexportify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwatsonbox%2Fexportify/lists"}