Spotify Scraper: Play Counts, Monthly Listeners & Playlists
Pricing
from $2.00 / 1,000 results
Spotify Scraper: Play Counts, Monthly Listeners & Playlists
Scrape Spotify play counts, streams, monthly listeners, followers, world rank, top cities, and biographies. Six modes: artist, track, album, playlist, search, and playlist discovery (find playlists by keyword with save counts). 180+ markets: K-pop, J-pop, Latin, Afrobeats. $2.79/1K on Starter.
Pricing
from $2.00 / 1,000 results
Rating
5.0
(1)
Developer
Sourabh Kumar
Maintained by CommunityActor stats
0
Bookmarked
393
Total users
83
Monthly active users
a day ago
Last modified
Categories
Features
Share
Spotify scraper: artists, tracks, albums, playlists and more
Get Spotify play counts, monthly listeners, followers, world rank and top cities. Paste any Spotify link, or type keywords to find playlists to pitch, then download a clean spreadsheet.
From $2.00 to $3.00 per 1,000 results, depending on your Apify plan. No start fee, no proxy setup, no login.
Works for every Spotify market and script: K-pop, J-pop, Latin, Afrobeats, Arabic and Hindi names come back as Spotify shows them.
Top use cases
- Check an artist's monthly listeners, world rank and top cities with Spotify monthly listeners and top cities for any artist.
- Compare K-pop acts side by side with K-pop artist stats on Spotify: BTS, BLACKPINK, Stray Kids.
- Get the exact stream count of any song with Spotify play counts for any song.
- Get play counts for every track on an album with Spotify album tracklist with play counts.
- Export a playlist with its tracks and save count with Export a Spotify playlist: tracks, artists and saves.
- Look up tracks, artists, albums and playlists by keyword with Spotify search: tracks, artists, albums and playlists.
- Find indie playlists to pitch, with curator contact links, with Indie playlist curators with save counts and contact links.
- Find hip hop playlists that take submissions with Hip hop and rap playlists to submit music to.
Pick a mode
Have Spotify links? Paste them into Spotify URLs or IDs (spotifyUrls) and press Start. You can mix artist, track, album and playlist links in one run: each link is read as what it is, whatever the mode says. The mode only matters for keywords and for bare IDs.
| You want | mode | Paste into |
|---|---|---|
| Monthly listeners, followers, world rank, top cities | artist | spotifyUrls (artist links or IDs) |
| Play count, label and release date of a song | track | spotifyUrls (track links or IDs) |
| Every track of an album with its play count | album | spotifyUrls (album links or IDs) |
| A playlist's tracks, play counts and save count | playlist | spotifyUrls (playlist links or IDs) |
| Tracks, artists, albums and playlists for a keyword | search | searchTerm (one keyword) |
| Playlists to pitch, filtered by saves, with curator contacts | playlistDiscovery | searchTerms (keywords) |
Max results (maxResults) is 50 by default. To scrape more than 50 links in one run, raise it or set it to 0 (no limit).
Every mode can be scheduled. Run it daily and you have a play count and monthly listener tracker.
Why this Spotify scraper?
- 🎧 Exact play counts: every track on an album or playlist, not only the top songs.
- 📈 Artist numbers the official API hides: monthly listeners, world rank and top 5 cities.
- 💿 One row per link: an album with all its tracks costs the same as one song.
- 🔎 Playlist discovery: about 1,000 playlists per keyword, filtered by saves, with curator contact links.
- 🔑 Nothing to set up: no Spotify developer app, no login, no proxy.
- 💸 Pay only for results: links that fail or don't exist are never charged.
1. Artist: monthly listeners, world rank and top cities
Paste artist links, spotify:artist: URIs or 22-character artist IDs.
Get one row per artist: monthly listeners, followers, world rank, top 5 cities with listener counts, top 10 tracks with play counts, biography, related artists and release counts.
| Option | Field | Default | What it does |
|---|---|---|---|
| Spotify URLs or IDs | spotifyUrls | Artist links, URIs or IDs. | |
| Include artist discography | includeDiscography | off | Adds the full lists of albums, singles, compilations and popular releases. Off returns counts only. |
| Max results | maxResults | 50 | How many artists to scrape. 0 means no limit. |
Input
{"mode": "artist","spotifyUrls": ["https://open.spotify.com/artist/3TVXtAsR1Inumwj472S9r4"]}
Output (one real row, selected fields)
{"type": "artist","spotifyId": "3TVXtAsR1Inumwj472S9r4","name": "Drake","monthlyListeners": 93853399,"followers": 119227640,"worldRank": 7,"topCities": [{"city": "London","country": "GB","region": "ENG","listeners": 1766215},{"city": "New York City","country": "US","region": "NY","listeners": 1438430}],"topTracks": [{"spotifyId": "1zi7xx7UVEFkmKfv06H8x0","name": "One Dance","playCount": 4558412672,"explicit": false},{"spotifyId": "514joG57v4yKTsfQmz7stz","name": "Janice STFU","playCount": 403908869,"explicit": true}],"topTracksCount": 10,"discography": {"albumsCount": 22,"singlesCount": 66,"compilationsCount": 0},"spotifyUrl": "https://open.spotify.com/artist/3TVXtAsR1Inumwj472S9r4"}
worldRank is filled only for artists inside Spotify's global ranking and is null for everyone else.
2. Track: play count of any song
Paste track links, URIs or IDs.
Get one row per track: play count, artists, album, label, release date, duration, explicit flag and a preview link.
| Option | Field | Default | What it does |
|---|---|---|---|
| Spotify URLs or IDs | spotifyUrls | Track links, URIs or IDs. | |
| Max results | maxResults | 50 | How many tracks to scrape. 0 means no limit. |
Input
{"mode": "track","spotifyUrls": ["https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"]}
Output (one real row, selected fields)
{"type": "track","spotifyId": "0VjIjW4GlUZAMYd2vXMi3b","name": "Blinding Lights","artists": [{"name": "The Weeknd","spotifyId": "1Xyo4u8uXC1ZmMpatF05PJ","isPrimary": true}],"album": {"spotifyId": "4yP0hdKOZPNshxUOjY0cZj","name": "After Hours","type": "ALBUM","releaseDate": "2020-03-20T00:00:00Z","label": "Republic Records"},"playCount": 5674785648,"durationMs": 200040,"explicit": false,"releaseDate": "2020-03-20T00:00:00Z","releaseDatePrecision": "DAY","spotifyUrl": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"}
Some older releases only have a year. Then releaseDate reads as January 1 and releaseDatePrecision is YEAR.
3. Album: every track with its play count
Paste album links, URIs or IDs.
Get one row per album: label, copyright, release date, track count, and every track with its play count. The whole album is one result.
| Option | Field | Default | What it does |
|---|---|---|---|
| Spotify URLs or IDs | spotifyUrls | Album links, URIs or IDs. | |
| Max results | maxResults | 50 | How many albums to scrape. 0 means no limit. |
Input
{"mode": "album","spotifyUrls": ["https://open.spotify.com/album/4yP0hdKOZPNshxUOjY0cZj"]}
Output (one real row, 2 of 14 tracks shown)
{"type": "album","spotifyId": "4yP0hdKOZPNshxUOjY0cZj","name": "After Hours","albumType": "ALBUM","artist": "The Weeknd","releaseDate": "2020-03-20T00:00:00Z","label": "Republic Records","trackCount": 14,"tracks": [{"spotifyId": "6b5P51m8xx2XA6U7sdNZ5E","name": "Alone Again","trackNumber": 1,"playCount": 234287046,"durationMs": 250053},{"spotifyId": "2K9Ovn1o2bTGqbsABGC6m3","name": "Too Late","trackNumber": 2,"playCount": 233102228,"durationMs": 239973}],"spotifyUrl": "https://open.spotify.com/album/4yP0hdKOZPNshxUOjY0cZj"}
4. Playlist: tracks, play counts and saves
Paste playlist links, URIs or IDs.
Get one row per playlist: name, owner, description, save count, and its tracks with play counts and the date each was added. The whole playlist is one result.
| Option | Field | Default | What it does |
|---|---|---|---|
| Spotify URLs or IDs | spotifyUrls | Playlist links, URIs or IDs. | |
| Max results | maxResults | 50 | How many playlists to scrape. 0 means no limit. |
Input
{"mode": "playlist","spotifyUrls": ["https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"]}
Output (one real row, 1 of 50 tracks shown)
{"type": "playlist","spotifyId": "37i9dQZF1DXcBWIGoYBM5M","name": "Today’s Top Hits","description": "The hottest 50. Cover: Ashe","owner": "Spotify","itemCount": 50,"saveCount": 33606554,"tracks": [{"spotifyId": "3zOYmiNOuyDL0ClxJcEJ0T","name": "Stop The Wedding!","artists": [{"name": "Ashe","spotifyId": "6P5NO5hzJbuOqSdyPB7SJM"}],"album": {"spotifyId": "4dem9qxmFf4RD6fqoCH6wc","name": "Stop The Wedding!","releaseDate": null},"durationMs": 198840,"playCount": 195641796,"contentRating": "NONE","explicit": false,"addedAt": "2026-11-06T05:02:41.791Z","itemType": "track"}],"spotifyUrl": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"}
5. Search: tracks, artists, albums and playlists for a keyword
Paste one keyword, in any language.
Get one row per search with four lists: tracks, artists, albums and playlists, up to 50 of each. Search results carry links and IDs but no play counts: paste the links you want into the other modes for full numbers.
| Option | Field | Default | What it does |
|---|---|---|---|
| Search term | searchTerm | The keyword to search. | |
| Max results | maxResults | 50 | Items per list, up to 50. |
Input
{"mode": "search","searchTerm": "lofi","maxResults": 20}
Output (one real row, 1 item per list shown)
{"type": "search","query": "lofi","tracks": [{"spotifyId": "5Y2FbfYRCaScEgpgdW9cB2","name": "Lofi","artists": ["Ponder"],"album": "Lofi","playCount": null,"durationMs": 144803,"spotifyUrl": "https://open.spotify.com/track/5Y2FbfYRCaScEgpgdW9cB2"}],"artists": [{"spotifyId": "1eDIWVJt7ZWKsrXw5WVNsN","name": "Lofi Girl","imageUrl": "https://i.scdn.co/image/ab6761610000e5ebb76821624d579822177cf3a3","spotifyUrl": "https://open.spotify.com/artist/1eDIWVJt7ZWKsrXw5WVNsN"}],"albums": [{"spotifyId": "20V6pMz1lSwL8wE65ZoizM","name": "Lofi Girl - Halloween 2026","artist": "Lofi Girl","albumType": "ALBUM","imageUrl": "https://i.scdn.co/image/ab67616d0000b2732ca76f167c3946face910ad3","spotifyUrl": "https://open.spotify.com/album/20V6pMz1lSwL8wE65ZoizM"}],"playlists": [{"spotifyId": "0vvXsWCC9xrXsKd4FyS8kM","name": "Lofi Girl - beats to relax/study to","owner": "Lofi Girl","description": "A daily selection of chill beats - perfect to help you relax & study 📚 Click here if you need lofi sleep 💤","imageUrl": "https://image-cdn-fa.spotifycdn.com/image/ab67706c0000da848bc80c95b9d248cf462c0bd1","spotifyUrl": "https://open.spotify.com/playlist/0vvXsWCC9xrXsKd4FyS8kM"}]}
6. Playlist discovery: find playlists to pitch
Paste keywords such as a genre or mood.
Get one row per playlist: save count, owner, whether Spotify runs it, the description, and any email, social handle or submission link the curator wrote in it.
| Option | Field | Default | What it does |
|---|---|---|---|
| Search terms | searchTerms | Keywords. Each one finds up to about 1,000 playlists. | |
| Minimum saves | minSaves | 0 | Only return playlists with at least this many saves. You pay only for those. |
| Skip Spotify-owned playlists | excludeSpotifyOwned | off | Keep only playlists run by people and brands. |
| Skip these playlists | excludePlaylistIds | Playlist links or IDs you already have. They are skipped and never charged. | |
| Search countries | searchCountries | Repeat every keyword as if searching from up to 10 countries. Each country adds playlists. | |
| Search languages | searchLanguages | Repeat every keyword in other Spotify languages. | |
| Max results | maxResults | 50 | How many playlists to return. 0 means no limit. |
Input
{"mode": "playlistDiscovery","searchTerms": ["indie rock", "indie pop", "bedroom pop"],"minSaves": 1000,"excludeSpotifyOwned": true,"maxResults": 100}
Output (one real row, selected fields)
{"type": "playlistDiscovery","spotifyId": "2zn5Uz49wyfb5RvIPxgify","name": "2000s Alternative & Indie Rock ","saveCount": 30254,"owner": "PK","ownerUsername": "syk1v6v29x1oc1do8pmm4xyp0","isSpotifyOwned": false,"description": "Indie & Alt Rock of the 21st century. For Submissions, go to melophobemusic.com","contactEmails": [],"contactHandles": [],"contactLinks": ["melophobemusic.com"],"searchTerm": "indie rock","searchRank": 28,"spotifyUrl": "https://open.spotify.com/playlist/2zn5Uz49wyfb5RvIPxgify"}
A playlist found by several keywords or countries comes back once and is charged once. To get only new playlists next time, paste the spotifyId column of this run into Skip these playlists.
Input reference
| Field | Type | Default | Notes |
|---|---|---|---|
mode | string | artist | One of artist, track, album, playlist, search, playlistDiscovery. Links decide their own type; the mode applies to bare IDs and keyword modes. |
spotifyUrls | string[] | Links, spotify: URIs or 22-character IDs. Country links such as intl-ko work. | |
maxResults | integer | 50 | 0 means no limit. Links: how many to scrape. Search: items per list, up to 50. Discovery: playlists returned. |
includeDiscography | boolean | false | Artist: full lists of albums, singles, compilations and popular releases instead of counts. |
searchTerm | string | Search keyword, in any language. Discovery uses it when searchTerms is empty. | |
searchTerms | string[] | Discovery keywords. | |
minSaves | integer | 0 | Discovery: only return, and charge for, playlists with at least this many saves. |
excludeSpotifyOwned | boolean | false | Discovery: leave out playlists Spotify itself runs. |
excludePlaylistIds | string[] | Discovery: playlist links or IDs to skip. | |
searchCountries | string[] | Discovery: up to 10 country codes (US, GB, MX, ...). Empty searches once from the United States. | |
searchLanguages | string[] | Discovery: language codes (en, de, ja, ...) to repeat each keyword in. |
Spotify Web API or this scraper?
| Spotify Web API | This scraper | |
|---|---|---|
| Setup | Register a developer app and handle OAuth | Nothing to set up |
| Play count per track | Not available | Every track |
| Monthly listeners, world rank, top cities | Not available | All three |
| Playlist save counts and curator contacts | Not available | Yes |
| ISRC, UPC, audio features | Available (audio features only for older apps) | Not included |
popularity, genres | Retired by Spotify in February 2026 | Not included |
Use it from an AI agent (Claude, ChatGPT, MCP)
Connect Claude, ChatGPT, Cursor or any MCP client to Apify's MCP server with this scraper as a tool:
https://mcp.apify.com?tools=sourabhbgp/spotify-scraper
Then ask in plain words. The agent fills in the input, and you pay the same per result. For example:
- "Get the play count of every track on https://open.spotify.com/album/4yP0hdKOZPNshxUOjY0cZj"
- "How many monthly listeners does Bad Bunny have, and which cities listen most?"
- "Find 100 indie rock playlists with at least 5,000 saves that Spotify doesn't run, with curator contacts."
- "Search Spotify for lofi and list the top playlists and artists."
Notes for the agent:
| Question | Mode | Minimum input |
|---|---|---|
| Numbers for an artist, track, album or playlist you have a link or ID for | any of artist, track, album, playlist | spotifyUrls |
| Numbers for an artist you only know by name | search, then artist | searchTerm, then the artist's spotifyUrl from the search row |
| Playlists for a genre or mood | playlistDiscovery | searchTerms (+ minSaves, excludeSpotifyOwned) |
- Keep the cost small: $3.00 per 1,000 results at most, and one link is one result however many tracks it holds. Set
maxResultsto what the question needs; inplaylistDiscoveryit is the number of playlists charged. - Links, not names:
spotifyUrlstakes links,spotify:URIs or 22-character IDs only. A name such as "Drake" is refused with[U_NOT_FOUND]: runsearchfirst and take the ID from itsartistslist. - Mixed links are fine: each link is read as its own type, whatever
modesays.modedecides only bare IDs,searchandplaylistDiscovery. - More than 50 links:
maxResultsdefaults to 50, so set it to the number of links or to 0. - Key output fields:
playCountis all-time streams of one track.monthlyListenersis unique listeners over the last 28 days.saveCountis how many users saved the playlist. Search rows haveplayCountnull by design. - Reading the result: the status message starts with a code when a run ends short:
[U_...]means the input,[E_...]means our side. TheRUN_SUMMARYrecord in the run's key-value store lists every input with its own outcome. - Time: links are read one after another, about 1 to 2 seconds each, so a few links take seconds. 100 discovery playlists from 3 keywords take under half a minute. Each search country adds time to a discovery run.
What people use it for
- 🎤 Artists and managers: track monthly listeners, top cities and stream counts after each release.
- 🏷️ Labels and A&R: compare artists and catalogues by real play counts.
- 📬 Playlist pitching: build a list of playlists by genre and save count, with curator contact links.
- 📊 Music analysts: schedule daily runs and chart how play counts and listeners move.
- 📣 Marketers: check which songs and cities to put ad money behind.
- 🌏 Regional markets: K-pop, J-pop, Latin, Afrobeats, Bollywood and Arabic artists, with names in their own script.
- 📜 Editorial playlist watchers: follow save counts and track changes on playlists like Today's Top Hits.
- 🧑💻 Developers and AI agents: pull Spotify numbers into Google Sheets, Make, Zapier, a database or an agent.
How much does it cost?
You pay per result, and each result is charged once. One result is one artist, track, album, playlist, search or discovered playlist. The price depends on your Apify plan:
| Apify plan | Per 1,000 results |
|---|---|
| Free | $3.00 |
| Starter | $2.79 |
| Scale | $2.50 |
| Business and above | $2.00 |
There is no start fee.
- Free plan: your $5 monthly credit covers about 1,600 results.
- Starter plan ($19): about 6,800 results a month.
Limitations
- Playlists return up to 500 tracks, albums up to 1,000.
itemCountstill shows the playlist's full size. - Playlist tracks have no album release date: Spotify leaves it out of playlist data, so
album.releaseDateis null there. - Search shows up to 50 items per list, without play counts.
- About 1,000 playlists per keyword in discovery: add keywords or countries for more. Each country adds run time, so raise the run timeout for long keyword lists.
- Curator contacts only when written: Spotify doesn't publish curator emails, so most playlists have none.
- No genres, popularity score or audio features: Spotify retired them or keeps them for old developer apps.
- No ISRC or UPC codes, and public data only: no private playlists or listening history.
FAQ
How do I scrape Spotify without coding?
Paste Spotify links, or pick a keyword mode and type keywords, then press Start. Download the results as Excel, CSV or JSON.
Can I track play counts and monthly listeners over time?
Yes. Save your input as a task and schedule it daily or weekly. Each run adds a dated snapshot you can compare.
Do I need a proxy or a Spotify account?
No. It works out of the box, with no Spotify developer app and no login.
What happens with a bad link, a deleted artist or a private playlist?
That link returns no row and is not charged. The run still finishes, and the RUN_SUMMARY record says what happened to each link.
Does it work for K-pop, J-pop, Arabic and other scripts?
Yes. Names come back in the script Spotify uses, and country links such as open.spotify.com/intl-ko/artist/... work like plain links. Artist IDs to try:
| Region | Artists |
|---|---|
| K-pop | BTS 3Nrfpe0tUJi4K4DXYWgMUX, BLACKPINK 41MozSoPIsD1dJM0CLPjZF, Stray Kids 2dIgFjalVxs4ThymZ67YCE |
| J-pop | YOASOBI 64tJ2EAv1R6UaZqc4iOCyj, Ado 6mEQK9m2krja6X1cfsAjfl |
| Latin | Bad Bunny 4q3ewBCX7sLwd24euuV69X, Karol G 790FomKkXshlbRYZFtlgla, Peso Pluma 12GqGscKJx3aE4t07u7eVZ |
| Afrobeats | Burna Boy 3wcj11K77LjEY1PkEazffa, Wizkid 3tVQdUvClmAT7URs9V3rsp, Tyla 3SozjO3Lat463tQICI9LcE |
| India | Arijit Singh 4YRxDV8wJFPHPTeXepOstw, AP Dhillon 6LEG9Ld1aLImEFEVHdWNSB |
| Arabic | Amr Diab 5abSRg0xN1NV3gLbuvX24M, Fairuz 0dwFxqYkvZLSA6U6XfQcDV |
Can I use it from code or an AI agent?
Yes. Connect it to an AI agent through Apify's MCP server (see above), push results to Google Sheets, Make, Zapier or a webhook, or start a run through the Apify API:
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~spotify-scraper/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"spotifyUrls":["https://open.spotify.com/artist/3TVXtAsR1Inumwj472S9r4"]}'
Is scraping Spotify legal?
It collects only what Spotify shows any visitor, with no login. How you use the data is your responsibility, especially personal data such as curator names and contacts. This scraper is not affiliated with Spotify.
Your feedback
Something missing or wrong? Open an issue.