Guide
Spotify play count API: lifetime streams for any track, by id or ISRC
Spotify's Web API never says how many times a track has been played. The closest it comes is popularity, a 0–100 score its own reference describes as based mostly on total plays, and marks deprecated. These endpoints return the count itself: one track by Spotify id or ISRC, or up to 50 tracks in one call.
By Eduardo Airaudo, maintainer of the API · Updated 22 October 2026
What the official track object leaves out
GET /v1/tracks/{id} on the Spotify Web API returns the album, the artists, duration_ms, explicit, external_ids, the name, popularity and a handful more. None of them counts plays. Popularity comes nearest: Spotify's reference gives it as a value from 0 to 100, calculated mostly from how many plays a track has had and how recent they are, and marks it deprecated. Spotify's February 2026 changes removed it for development-mode apps created from 11 February 2026.
A score cannot do what a count does. It is relative, so it does not add up across an album or a catalogue, and it favours recent plays — the same reference says songs played a lot now score higher than songs played a lot in the past — so it cannot say how many times a track has ever been played.
In the spec's words, this API's Partner group is “Spotify's internal (pathfinder) data, including play counts”. /partner/track/count returns the lifetime count of one track, /partner/tracks/count of up to 50 tracks at once, and /partner/track carries it inside the full track record.
What comes back
Field by field, as the spec's response schemas define them. The single-track call names the count streams; the batch names it playcount.
One track
GET /partner/track/count
- streams
- The lifetime play count, as an integer (int64). Nullable in the spec, and 0 for a track under 1,000 plays.
- spotify_track_id
- The track's Spotify id.
- isrc
- The track's ISRC. Nullable in the spec.
- result
successorerror, with a shortmessagebeside it.
A batch
GET /partner/tracks/count
- tracks[]
- One entry per requested id, in request order.
- tracks[].playcount
- Lifetime plays (int64, nullable); 0 for a track under 1,000.
- tracks[].status
ok,not_foundorerror, with anerrortext when it iserror.- tracks[].name
- The track's name;
nullwhen it was not found. - tracks[].artists[]
- Each artist's
idandname. - tracks[].releaseDate
- The release date of the track's album: YYYY-MM-DD, or a coarser precision.
- missing[]
- The requested ids whose status is not
ok.
A 0 means under 1,000, not never played. The spec says Spotify reports 0 for tracks with fewer than 1,000 plays, so store a 0 as "below 1,000" rather than as a count.
Recorded sample · captured 2026-10-22
GET /partner/track/count
| { |
| "result": "success", |
| "message": "Data Retrieved.", |
| "spotify_track_id": "7qiZfU4dY1lWllzX7mPBI3", |
| "streams": 5152826895 |
| } |
6 lines — the whole recorded body.
Recorded sample · captured 2026-10-22
GET /partner/tracks/count
| { |
| "tracks": [ |
| { |
| "id": "7qiZfU4dY1lWllzX7mPBI3", |
| "name": "Shape of You", |
| "artists": [ |
| { |
| "id": "6eUKZXaKkcviH0Ku9w2n3V", |
| "name": "Ed Sheeran" |
| } |
| ], |
| "playcount": 5152826895, |
| "releaseDate": "2017-03-03", |
| "status": "ok" |
| } |
| ], |
| "missing": [] |
| } |
18 lines — the whole recorded body.
One track, or 50 per call
- GET /partner/track/countTrack play count
Lifetime play count of one track, by Spotify id (
spotify_track_id, or its aliasid) or byisrc. Spotify reports 0 for tracks with fewer than 1,000 plays. Play counts are cached for 1 hour; for many tracks use/partner/tracks/count.Params
spotify_track_id, id, isrc, cache - GET /partner/tracks/countTrack play counts (batch)
Lifetime play counts for up to 50 tracks in one call. Entries come back in request order with
statusok,not_foundorerror; ids without a play count are also listed inmissing. Each id is cached for 1 hour.Params
ids, cache - GET /partner/trackPartner track data
Track with its play count (
data.trackUnion.playcount), album, artists and content ratings. Addslim=1to keep only{id, uri, profile.name, visuals.avatarImage}of each artist (the full payload embeds the first artist's discography and is ~100 KB).Params
id, slim, cache
/partner/tracks/count takes up to 50 comma-separated ids and answers in the order you sent them, so 50 tracks cost one request rather than 50.
Fetch play counts
One track, by Spotify id
| curl -X GET \ |
| "https://spotify-proxy.checkleaked.cc/spotify-data/partner/track/count?id=0VjIjW4GlUZAMYd2vXMi3b" \ |
| -H "x-rapidapi-key: $SPOTIFY_API_KEY" |
The id is the 22-character string after /track/ in any Spotify URL. To look a track up by its ISRC, send isrc= in place of id=.
Up to 50 tracks in one call
| curl -X GET \ |
| "https://spotify-proxy.checkleaked.cc/spotify-data/partner/tracks/count?ids=0VjIjW4GlUZAMYd2vXMi3b%2C7qiZfU4dY1lWllzX7mPBI3" \ |
| -H "x-rapidapi-key: $SPOTIFY_API_KEY" |
Read each entry's status before its count. Entries come back in the order of the ids; one with no play count is marked not_found or error in its place, and listed again in missing.
Play counts without code
If the counts are for a spreadsheet rather than for your own code, two Apify actors from the same maintainer return them as a dataset. A run needs an Apify account and no API key: you paste links and download JSON or CSV.
- Spotify Play Count Scraper (opens in a new tab)eduair94/spotify-play-count-scraper
Paste track, album, artist or playlist links, URIs or ids; it returns one row per track with its play count — an artist's top tracks or whole discography, every track on an album or a playlist — and, if asked, a row with the artist's monthly listeners.
- Spotify Scraper (opens in a new tab)eduair94/spotify-scraper
The general actor: 61 categories, 5 of them play counts (
track_play_count,album_play_counts,artist_play_counts,artist_discography_play_counts,playlist_play_counts), andisrc, which finds a track by its ISRC with its play count.
Both bill per result, at the prices listed on : $0.001 a row on Apify's free plan, down to $0.0006 from Gold up. When a run beats a key, and when it does not, is on the scraper guide.
Questions
Does the Spotify Web API return play counts?
No. The track object in the Web API reference has no play count field. Its nearest field, popularity, is a 0–100 score Spotify calculates mostly from total plays and how recent they are; the reference marks it deprecated, and Spotify's February 2026 changes removed it for development-mode apps created from 11 February 2026.
Why does a track show 0 plays?
Because it has fewer than 1,000. The spec says Spotify reports 0 for tracks with fewer than 1,000 plays, so a 0 means below 1,000, not never played.
Can I get play counts for many tracks at once?
Yes. GET /partner/tracks/count takes up to 50 comma-separated track ids and answers in request order, each entry with a status of ok, not_found or error; ids without a play count are listed in missing as well. 50 tracks cost one request rather than 50.
Can I look a track up by ISRC?
Yes. GET /partner/track/count takes isrc in place of a Spotify id, so a catalogue keyed by ISRC needs no id lookup first.
How current is the number?
Play counts are cached for an hour, so a count is typically at most that old. An X-Cache value starting with STALE or FALLBACK means an older copy was served because the live fetch was slow or failed; X-Cache-Stale-Age gives its age in seconds. Add cache=false to fetch a fresh one. The Run buttons on this site go through the demo's own cache as well, so a figure there can be older.
Can I get play counts without writing code?
Yes, on Apify: a run needs an Apify account and no API key. The Spotify Play Count Scraper (eduair94/spotify-play-count-scraper) takes track, album, artist or playlist links and returns one row per track with its play count; the Spotify Scraper (eduair94/spotify-scraper) has 5 play-count categories among its 61. Both bill per result.
Which plan do I need?
Any. Both play-count endpoints are on every plan, RapidAPI and the direct portal alike, and the plans differ by monthly volume. Every RapidAPI plan allows 5 requests per second and every direct key includes 10. RapidAPI's free plan allows 1,000 requests a month.
Sources
- Get Track — Spotify Web API reference — the official track object: no play count, and popularity marked deprecated.
- February 2026 changes — Spotify for Developers reference — track popularity among the removed fields.
- February 2026 migration guide — Spotify for Developers — who the removals apply to: development-mode apps, new ones from 11 February 2026; extended-quota apps are not affected.
- GET /partner/track/count on this site — its parameters, its error statuses and a Run button.
- GET /partner/tracks/count on this site — the batch call, with the same.
- Spotify Play Count Scraper on Apify — the no-code route: its input and its price per row, as currently published.
More guides
- Spotify Web API alternativeEndpoint-by-endpoint mapping from the official API, including everything Spotify removed on 27 November 2024.
- Spotify API without OAuthOne header instead of the client-credentials flow — and the things a key genuinely cannot do.
- Spotify lyrics APIWhy the Web API has no lyrics endpoint, and how to get line-synced lyrics as JSON, LRC or SRT.
- Spotify charts APIDaily Top 200 and viral charts as JSON: rank movement, stream counts, credits, and how to backfill.
- Spotify monthly listeners APIMonthly listeners, follower counts, world rank and top cities per artist — numbers the Web API never returned.
- Spotify audio features API after the 2024 deprecationTempo, energy, danceability, recommendations and related artists after Spotify removed them for new apps.
- Spotify API rate limitsThe official 30-second rolling window, what each plan here allows per second and per month, and how to stay under it.
- Spotify scraper on ApifyPlay counts, charts, lyrics and credits as a scheduled run with no API key — and when an API key is the better tool.
What changed in the API and on these pages, and when: What's new.
Get a key and pull your first play count
Both play-count endpoints are on every plan, RapidAPI and the direct portal alike; on Apify, the two actors above return the same counts as dataset rows, billed per result. RapidAPI's free tier is 1,000 requests a month: at up to 50 tracks a call, up to 50,000 play counts.