Spotify Scraper—Play Counts, Tracks, Artists, Playlists, Lyrics avatar

Spotify Scraper—Play Counts, Tracks, Artists, Playlists, Lyrics

Pricing

from $0.12 / 1,000 scraped items

Go to Apify Store
Spotify Scraper—Play Counts, Tracks, Artists, Playlists, Lyrics

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

Eduardo Airaudo

Maintained by Community

Actor stats

1

Bookmarked

80

Total users

26

Monthly active users

10 days ago

Last modified

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.

CategoryPasteOne row perExtra columns
track_play_countTrack IDs, URLs or URIstrackalbum, release date, duration, explicit
album_play_countsAlbum IDs, URLs or URIstrack on the albumtrack and disc number
artist_play_countsArtist IDs, URLs or URIsartist 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

Featurecanadeskcanadesk-plusThis 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 richpartial
Concert feed + concert locationspartialpartial
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.

FieldTypePurpose
modestringget / search / chart — optional, inferred from category
categorystring51 categories (see below)
queriesarrayIDs, URLs, spotify:*:* URIs or search keywords
maxResultsPerQueryint1 – 1000 (default 50)
marketstringISO country (default US)
lyricsLanguagestringISO lang for lyric translations
chartDatestringYYYY-MM-DD for historical charts
concurrencyintParallel requests (1 – 20)
delayMsintPause between requests
includeRawboolAttach raw upstream JSON
enrichWithContraststringytmusic, 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 scraped
  • mode — get / search / chart
  • query — original input
  • id, type, name, uri, url — normalized entity fields
  • playCount — all-time Spotify play count (a number) on play-count rows, and on any other track row whose payload includes it (for example album_tracks and partner_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.
It finishes 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)

EventPriceWhen charged
result-item$0.0002 until Sep 27, 2026; $0.001 from Sep 28, 2026Per successful dataset item (≈ $0.20 per 1k rows, then $1.00 per 1k; lower on paid Apify plans)
bulk-fetch$0.0003Reserved 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 install
npm run build
apify run

Edit storage/key_value_stores/default/INPUT.json to change input between runs.

License

MIT