Spotify Scraper—Play Counts, Tracks, Artists, Playlists, Lyrics
Pricing
from $0.12 / 1,000 scraped items
Spotify Scraper—Play Counts, Tracks, Artists, Playlists, Lyrics
Spotify play counts (stream counts) for any track, album or artist's top tracks, plus tracks, artists, albums, playlists, lyrics, credits, concerts and charts. 50+ categories, pay per result.
Pricing
from $0.12 / 1,000 scraped items
Rating
5.0
(1)
Developer
Eduardo Airaudo
Maintained by CommunityActor stats
1
Bookmarked
80
Total users
26
Monthly active users
10 days ago
Last modified
Categories
Share
Spotify Scraper — Full Coverage, Pay-Per-Event
Extract any public Spotify data: play counts (stream counts) for tracks, albums and artists' top tracks, plus tracks, artists, albums, playlists, users, podcasts, concerts, charts, lyrics, credits, recommendations and more. 50+ categories, accepts Spotify IDs, URLs or search keywords.
Built to undercut canadesk/spotify ($10/mo + usage) and canadesk/spotify-plus ($16/mo + usage):
- $0 monthly rental fee
- $0.20 per 1,000 result items (pay-per-event) — $1.00 per 1,000 from September 28, 2026, with automatic discounts on paid Apify plans
- $0.30 per 1,000 single-entity fetches (bulk-fetch)
- Raw data optional — slim output by default
Spotify play counts (stream counts)
Get the all-time play count Spotify shows next to every song, as a plain number you can sort, chart and export to CSV, Excel or JSON. Look it up for single tracks, for every track on an album, or for an artist's top tracks.
| Category | Paste | One row per | Extra columns |
|---|---|---|---|
track_play_count | Track IDs, URLs or URIs | track | album, release date, duration, explicit |
album_play_counts | Album IDs, URLs or URIs | track on the album | track and disc number |
artist_play_counts | Artist IDs, URLs or URIs | artist top track (up to 10) | topTrackRank, artistName, monthlyListeners, followers, worldRank |
Every row has a numeric playCount column plus id, name, uri, url and the credited artists. A track that Spotify returns without a play count is skipped and never charged. Open the Play counts tab of the dataset for a ready-made table.
Play count of individual tracks
{"mode": "get","category": "track_play_count","queries": ["https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b","spotify:track:4iV5W9uYEdYUVa79Axb7Rh"]}
Play counts for every track on an album
{"mode": "get","category": "album_play_counts","queries": ["https://open.spotify.com/album/1NAmidJlEaVgA3MpcPFYGq"]}
Artist top tracks with play counts and monthly listeners
{"mode": "get","category": "artist_play_counts","queries": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"]}
Play count output sample
{"category": "track_play_count","mode": "get","query": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b","ok": true,"id": "0VjIjW4GlUZAMYd2vXMi3b","name": "Blinding Lights","type": "track","uri": "spotify:track:0VjIjW4GlUZAMYd2vXMi3b","url": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b","playCount": 5587020553,"artists": ["The Weeknd"],"artistIds": ["1Xyo4u8uXC1ZmMpatF05PJ"],"albumId": "4yP0hdKOZPNshxUOjY0cZj","albumName": "After Hours","releaseDate": "2020-03-20T00:00:00Z","durationMs": 200040,"trackNumber": 9,"explicit": false,"data": { "…": "upstream track object" }}
artist_play_counts rows carry the artist's stats next to each top track:
{"category": "artist_play_counts","name": "The Fate of Ophelia","playCount": 1655436525,"topTrackRank": 1,"artistId": "06HL4z0CvFAxyc27GXpf02","artistName": "Taylor Swift","monthlyListeners": 100466571,"followers": 163965313,"worldRank": 5}
Play counts are the figures Spotify reports at scrape time, so they grow between runs. Schedule the Actor to track stream growth over time.
Features vs. canadesk/spotify
| Feature | canadesk | canadesk-plus | This actor |
|---|---|---|---|
| Monthly rental | $10 | $16 | $0 |
| Tracks / Artists / Albums | ✅ | ✅ | ✅ |
| Playlists / Users / Podcasts | ✅ | ✅ | ✅ |
| Lyrics (word-synced + translations) | ✅ | ✅ | ✅ |
| Track credits (producers, writers) | ❌ | ❌ | ✅ |
| Artist — appears on / featuring | ❌ | ❌ | ✅ |
| Artist — discovered on (playlists) | ❌ | ❌ | ✅ |
| Artist — related / discography rich | ❌ | partial | ✅ |
| Concert feed + concert locations | partial | partial | ✅ |
| Spotify Charts — Top 200 / Viral | ❌ | ❌ | ✅ |
| Top 20 by monthly listeners/followers | ❌ | ❌ | ✅ |
| Recommendations (seed → playlist) | ❌ | ❌ | ✅ |
| Search suggestions (autocomplete) | ❌ | ❌ | ✅ |
| Lyrics search | ❌ | ❌ | ✅ |
| Partner-API rich payloads | ❌ | ❌ | ✅ |
| Cross-platform enrichment | ❌ | ❌ | ✅ |
| No 50-result cap | ❌ | ✅ | ✅ |
| No simultaneous-entry cap | ❌ | ✅ | ✅ |
Input
All input fields are documented in the input form.
| Field | Type | Purpose |
|---|---|---|
mode | string | get / search / chart — optional, inferred from category |
category | string | 51 categories (see below) |
queries | array | IDs, URLs, spotify:*:* URIs or search keywords |
maxResultsPerQuery | int | 1 – 1000 (default 50) |
market | string | ISO country (default US) |
lyricsLanguage | string | ISO lang for lyric translations |
chartDate | string | YYYY-MM-DD for historical charts |
concurrency | int | Parallel requests (1 – 20) |
delayMs | int | Pause between requests |
includeRaw | bool | Attach raw upstream JSON |
enrichWithContrast | string | ytmusic, applemusic, amazonmusic, pandora, gaana, tencent |
Categories
Play counts (mode=get):
track_play_count, album_play_counts, artist_play_counts.
Single entities (mode=get):
track, track_credits, track_lyrics, album, album_tracks, album_metadata, artist, artist_overview, artist_albums, artist_singles, artist_appears_on, artist_discovered_on, artist_featuring, artist_related, artist_discography_overview, playlist, playlist_tracks, user_profile, user_followers, recommendations, partner_playlist, partner_track, partner_album, partner_artist_overview, partner_artist_discography.
Concerts:
artist_concerts, partner_concert and concerts_by_location (mode=get); search_concert_artists and search_concert_locations (mode=search).
Search (mode=search):
search_multi, search_tracks, search_artists, search_albums, search_playlists, search_users, search_podcasts, search_episodes, search_genres, search_top_results, search_suggestions, search_lyrics.
Charts (mode=chart):
chart_top_200_tracks, chart_viral_tracks, chart_top_artists, chart_top_albums, chart_top_monthly_listeners, chart_top_followers.
Example inputs
Get artist overview from URL
{"mode": "get","category": "artist_overview","queries": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"]}
Search tracks
{"mode": "search","category": "search_tracks","queries": ["bohemian rhapsody","taylor swift anti-hero"],"maxResultsPerQuery": 20,"market": "US"}
Top 200 tracks — Mexico
{"mode": "chart","category": "chart_top_200_tracks","queries": ["MX"],"chartDate": "2026-04-22"}
Word-synced lyrics with Spanish translation
{"mode": "get","category": "track_lyrics","queries": ["0VjIjW4GlUZAMYd2vXMi3b"],"lyricsLanguage": "es"}
Get song credits (writers, producers, performers)
No API key is required when you run this Actor on Apify. Select get, choose
track_credits, and paste a Spotify track ID, URL, or URI:
{"mode": "get","category": "track_credits","queries": ["4iV5W9uYEdYUVa79Axb7Rh"]}
Output
Each item is a flat JSON object with:
category— what was scrapedmode— get / search / chartquery— original inputid,type,name,uri,url— normalized entity fieldsplayCount— all-time Spotify play count (a number) on play-count rows, and on any other track row whose payload includes it (for examplealbum_tracksandpartner_track)- plus every field returned by the upstream API
- optional
raw— full upstream JSON (includeRaw=true) - optional
contrast— cross-platform data (enrichWithContrast)
Failed queries are never charged
Only successful results are pushed to the default dataset and charged. Failed
queries are written to the ERRORS record in the run's key-value store with
charged: false and a kind:
permanent— Spotify has no data for that input: a track without lyrics, an unknown or invalid ID, a search with no results. These are not retried, because asking again gives the same answer.transient— a temporary upstream problem (rate limit, 5xx, timeout). These are retried with backoff before being recorded.
The run ends with a status message such as
Delivered 120 items; 2 queries failed upstream and were not charged.FAILED only when nothing
was delivered and at least one query hit a temporary upstream error, so
automated retry policies can detect it. A run in which every input simply has
no data on Spotify succeeds with 0 items and costs nothing. RUN_SUMMARY
reports transientErrors and permanentErrors.
Pricing (pay-per-event)
| Event | Price | When charged |
|---|---|---|
result-item | $0.0002 until Sep 27, 2026; $0.001 from Sep 28, 2026 | Per successful dataset item (≈ $0.20 per 1k rows, then $1.00 per 1k; lower on paid Apify plans) |
bulk-fetch | $0.0003 | Reserved for single-entity fetches |
There is no run-start fee and no automatic apify-default-dataset-item
event. Empty responses, invalid inputs, upstream errors, and failed runs cost
the customer $0.00.
Example: a run that pushes 10,000 track rows costs $2.00 today and $10.00 from September 28, 2026 (less on paid Apify plans). Other Spotify scrapers on the Store charge about $4–5 per 1,000 results, and rental actors such as canadesk/spotify-plus cost $16/mo plus usage.
No API key required on Apify
Click Try for free, choose a category, add your Spotify IDs or URLs, and start the run. Billing is handled by Apify's pay-per-event system. The Actor's upstream credential is configured privately by the publisher and is never an input that customers need to provide.
Apify PPE buys Actor runs and dataset results; it does not issue a reusable REST API key. If you need an API key for requests from your own application, use RapidAPI or the Direct Portal below.
Using the API outside Apify
If you see upstream 401 on ... {"error":"Invalid API key"} in the actor
log, or you're trying to hit spotify-proxy.checkleaked.cc yourself outside
an Apify run: that's expected. The upstream is private and only
authorized for requests coming through this actor's Apify runtime.
To call the Spotify data API directly (no Apify wrapper, your own integration, your own rate limits), purchase a key from the Direct API Key Portal. Direct keys are delivered there after checkout and authenticate requests made outside Apify.
Local development
npm installnpm run buildapify run
Edit storage/key_value_stores/default/INPUT.json to change input between runs.
License
MIT