Spotify Play Count Scraper: Streams for Tracks, Albums, Artists avatar

Spotify Play Count Scraper: Streams for Tracks, Albums, Artists

Pricing

from $0.60 / 1,000 play count rows

Go to Apify Store
Spotify Play Count Scraper: Streams for Tracks, Albums, Artists

Spotify Play Count Scraper: Streams for Tracks, Albums, Artists

Spotify play counts (stream counts) for every track of an artist's full discography, a playlist, an album or single tracks, plus monthly listeners. Paste URLs, no API key needed. Pay per result.

Pricing

from $0.60 / 1,000 play count rows

Rating

0.0

(0)

Developer

Eduardo Airaudo

Eduardo Airaudo

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Spotify Play Count Scraper

Get the all-time play count (stream count) Spotify shows for every track of an artist's full discography, a playlist or an album, or for single tracks, as a plain number you can sort, chart and export. Album rows come with the label, copyrights, release date and the album's total plays; artist rows with monthly listeners, followers and world rank. No Spotify API key, no login, $1.00 per 1,000 results, and one result is one track.

What does Spotify Play Count Scraper do?

It reads the play counts Spotify shows publicly and returns them as structured data:

You pasteYou get
An artist URL, with Full discography1 row per track of every album, single, EP and compilation, newest release first, each with its album, label, release date and album total
A playlist URL1 row per track in playlist order, with its position and when it was added (the first 100 entries by default, see maxTracksPerPlaylist)
An album URL, URI or ID1 row per track, with the album's name, label, copyrights, release date, cover and total plays
An artist URL (default: Top tracks)1 row per top track (usually 10), with the artist's monthly listeners, followers and world rank
A track URL, URI or ID1 row: the track's play count, album, release date and duration

Mix all of them in one run. Every row has a numeric playCount, the track name, its artists, a Spotify url, and the inputUrl you entered, so you can match results back to your list. Turn on includeArtistProfile to add one profile row per artist, with top cities, verified status, biography and social links.

  • Exact numbers such as 5631276067, not rounded "5.6B" labels.
  • Full discographies count each song once: when the same recording is on the album, the single and the deluxe edition, Spotify shows one shared play count, and you get one row for it.
  • Accepts open.spotify.com links (with or without ?si=, intl-xx or /embed/), spotify.link short links, spotify: URIs and bare IDs.
  • Failed, invalid and repeated inputs are never charged.
  • Fast: the five prefilled links (73 results) take about 4 seconds, an artist with 20 releases about 5 seconds.

How to use Spotify Play Count Scraper

  1. Paste Spotify track, album, artist or playlist links into Spotify URLs, URIs or IDs (urls), one per line.
  2. For artists, pick Top tracks or Full discography under Artists (artistMode).
  3. Click Start, then open the Play counts, Albums and discographies, Playlists, Artist top tracks or Artist profiles tab of the dataset, or download the results as CSV, Excel, JSON or HTML.

Input

FieldTypeDefaultWhat it does
urlsarray of stringsrequiredSpotify track, album, artist or playlist URLs, spotify: URIs or 22-character IDs. The type is detected from each URL or URI.
defaultTypetrack / album / artist / playlisttrackType used for bare IDs, which carry no type of their own. Links and URIs always keep their own type.
artistModetopTracks / fullDiscographytopTracksWhat an artist returns: Spotify's top tracks (usually 10), or every track of every release.
includeAlbumsbooleantrueFull discography: read the artist's albums.
includeSinglesbooleantrueFull discography: read the artist's singles and EPs.
includeCompilationsbooleantrueFull discography: read the artist's compilations.
maxReleasesPerArtistinteger, 1-1,000200Full discography: how many releases of the selected types to read per artist, newest first.
dedupeTracksbooleantrueFull discography: return a song once when several releases carry the same recording (see the FAQ).
includeArtistProfilebooleanfalseArtist inputs: add one profile row per artist (rowType artist). It costs one result.
maxTracksPerAlbuminteger, 1-20050Tracks returned per album input and per release of a full discography, in album order.
maxTracksPerPlaylistinteger, 1-10,000100Playlist entries read per playlist, in playlist order. Playlists stop after the first 100 entries: raise it to get whole playlists.
includeRawbooleanfalseAdds the upstream Spotify response under raw on every result (much larger output; a playlist's keeps only that result's entry).

Play counts of an artist's full discography

Every album, single, EP and compilation, newest first. Lorde's 20 releases give 71 tracks:

{
"urls": ["https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm"],
"artistMode": "fullDiscography",
"includeArtistProfile": true
}

Only albums, without singles, EPs and compilations:

{
"urls": ["https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm"],
"artistMode": "fullDiscography",
"includeSingles": false,
"includeCompilations": false
}

Play counts of every track in a playlist

Editorial and user playlists work alike; podcast episodes and local files in a playlist are skipped. A playlist input reads the first 100 entries unless you raise maxTracksPerPlaylist (up to 10,000), so set it for longer playlists:

{
"urls": ["https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"],
"maxTracksPerPlaylist": 1000
}

Play counts of every track on an album

{
"urls": ["https://open.spotify.com/album/6s84u2TUpR3wdUv4NgKA2j"],
"maxTracksPerAlbum": 200
}

An artist's top tracks with monthly listeners

{
"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"]
}

A mixed list

This is the prefilled input: two tracks, one album, one artist and one playlist in the same run (73 results at the time of writing).

{
"urls": [
"https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b",
"https://open.spotify.com/track/7qiZfU4dY1lWllzX7mPBI3",
"https://open.spotify.com/album/6s84u2TUpR3wdUv4NgKA2j",
"https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02",
"https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"
]
}

Bare IDs

A bare ID has no type, so tell the Actor what it is with defaultType:

{
"urls": ["1McMsnEElThX1knmY4oliG", "06HL4z0CvFAxyc27GXpf02"],
"defaultType": "artist"
}

Output

One dataset row per track (rowType track), plus one profile row per artist (rowType artist) when includeArtistProfile is on. The dataset has five tabs:

  • Play counts: name, artists, playCount, albumName, entityType, url, inputUrl and scrapedAt.
  • Albums and discographies: albumName, albumType, releaseDate, label, trackNumber, name, playCount, albumTotalPlayCount and url.
  • Playlists: playlistName, position, name, artists, playCount, addedAt and url.
  • Artist top tracks: artistName, topTrackRank, name, playCount, monthlyListeners, followers, worldRank and url.
  • Artist profiles: rowType, artistName, monthlyListeners, followers, worldRank, verified, topCities, externalLinks and url.

A full-discography row (an album row looks the same, without the artist's stats):

{
"name": "Royals",
"artists": ["Lorde"],
"playCount": 1557631338,
"rowType": "track",
"id": "2dLLR6qlu5UJ5gk0dKz0h3",
"type": "track",
"uri": "spotify:track:2dLLR6qlu5UJ5gk0dKz0h3",
"url": "https://open.spotify.com/track/2dLLR6qlu5UJ5gk0dKz0h3",
"artistIds": ["163tK9Wjr9P9DmM0AVK7lm"],
"durationMs": 190185,
"trackNumber": 3,
"discNumber": 1,
"explicit": false,
"albumId": "0rmhjUgoVa17LZuS8xWQ3v",
"albumName": "Pure Heroine",
"albumUri": "spotify:album:0rmhjUgoVa17LZuS8xWQ3v",
"albumType": "album",
"label": "Universal Music New Zealand Limited",
"copyrightC": "© 2013 Universal Music NZ Ltd.",
"copyrightP": "℗ 2013 Universal Music NZ Ltd.",
"releaseDate": "2013-09-27T00:00:00Z",
"imageUrl": "https://i.scdn.co/image/ab67616d00001e02187331e276c898d39764cc98",
"albumTotalPlayCount": 5503867096,
"artistId": "163tK9Wjr9P9DmM0AVK7lm",
"artistName": "Lorde",
"monthlyListeners": 26488906,
"followers": 11040162,
"worldRank": 295,
"inputUrl": "https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm",
"entityType": "artist",
"scrapedAt": "2026-10-13T05:35:12.304Z",
"data": { "…": "Spotify album track entry" }
}

A playlist row:

{
"name": "Stop The Wedding!",
"artists": ["Ashe"],
"playCount": 90942260,
"rowType": "track",
"id": "3zOYmiNOuyDL0ClxJcEJ0T",
"type": "track",
"uri": "spotify:track:3zOYmiNOuyDL0ClxJcEJ0T",
"url": "https://open.spotify.com/track/3zOYmiNOuyDL0ClxJcEJ0T",
"artistIds": ["6P5NO5hzJbuOqSdyPB7SJM"],
"albumId": "4dem9qxmFf4RD6fqoCH6wc",
"albumName": "Stop The Wedding!",
"albumUri": "spotify:album:4dem9qxmFf4RD6fqoCH6wc",
"imageUrl": "https://i.scdn.co/image/ab67616d00001e020893a0c33fd4b8497b0ef2f6",
"durationMs": 198840,
"explicit": false,
"playlistId": "37i9dQZF1DXcBWIGoYBM5M",
"playlistName": "Today’s Top Hits",
"playlistOwner": "Spotify",
"position": 1,
"addedAt": "2026-09-04T04:02:23.110Z",
"inputUrl": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
"entityType": "playlist",
"scrapedAt": "2026-10-13T05:34:49.276Z",
"data": { "…": "Spotify playlist entry" }
}

An artist profile row (includeArtistProfile):

{
"name": "Lorde",
"rowType": "artist",
"id": "163tK9Wjr9P9DmM0AVK7lm",
"type": "artist",
"uri": "spotify:artist:163tK9Wjr9P9DmM0AVK7lm",
"url": "https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm",
"artistId": "163tK9Wjr9P9DmM0AVK7lm",
"artistName": "Lorde",
"monthlyListeners": 26488906,
"followers": 11040162,
"worldRank": 295,
"topCities": [
{ "city": "London", "country": "GB", "region": "ENG", "listeners": 494883 },
{ "city": "Sydney", "country": "AU", "region": "NSW", "listeners": 409551 }
],
"verified": true,
"biography": "The magic lives close to the edge",
"externalLinks": [
{ "name": "INSTAGRAM", "url": "https://instagram.com/lorde" },
{ "name": "WIKIPEDIA", "url": "https://en.wikipedia.org/wiki/Lorde" }
],
"imageUrl": "https://i.scdn.co/image/ab6761610000e5eb678a3a4bc2d8a84074f22c71",
"inputUrl": "https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm",
"entityType": "artist",
"scrapedAt": "2026-10-13T05:35:10.381Z",
"data": { "…": "Spotify artist profile" }
}

Output fields

FieldDescription
nameTrack name (the artist's name on a profile row)
artistsNames of the credited artists (artistIds has their Spotify IDs)
playCountAll-time Spotify play count (stream count), as a number; every track row has it
rowTypetrack, or artist for a profile row
id, uri, urlSpotify ID, spotify: URI and open.spotify.com link of the track (or the artist)
albumName, albumId, albumUriThe track's album; artist top-track rows have no albumName
albumType, label, copyrightC, copyrightP, albumTotalPlayCountAlbum and discography rows: release type, label, copyrights and the sum of every album track's play count
releaseDate, imageUrlRelease date (track, album and discography rows) and cover image (the picture on a profile row)
durationMs, trackNumber, discNumber, explicitTrack details, when Spotify returns them
playlistId, playlistName, playlistOwner, position, addedAtPlaylist rows: the playlist, the track's position in it and when it was added
topTrackRankArtist top tracks: position of the track in the artist's Spotify top tracks
artistName, artistId, monthlyListeners, followers, worldRankArtist inputs: the artist you entered and their Spotify stats (worldRank only when ranked)
topCities, verified, biography, externalLinksProfile rows: top cities by listeners, verified status, biography as plain text, social links
inputUrlThe URL, URI or ID you entered, exactly as entered
entityTypeWhat you entered: track, album, artist or playlist
scrapedAtWhen the play count was read
dataThe Spotify object the row was built from
rawFull upstream response, only with includeRaw

The run's key-value store also holds RUN_SUMMARY (inputs by type, results delivered, warnings and the run outcome) and, when an input fails, ERRORS (each failed input with its reason and charged: false).

Pricing

$1.00 per 1,000 results (pay per event). One result is one row: one track with its play count, or one artist profile row when you turn that on. You pay per track, not per link, so a single track costs a tenth of a cent.

Apify planPrice per 1,000 results
Free$1.00
Bronze$0.90
Silver$0.75
Gold and higher$0.60

What runs cost on the Free plan:

You enterResultsCost
1 track1$0.001
1 album (SOUR, 11 tracks)11$0.011
1 artist, top tracks10$0.010
1 artist, full discography (Lorde, 20 releases)71$0.071
1 playlist (Today's Top Hits, 50 tracks)50$0.050
The five prefilled links73$0.073
10,000 tracks10,000$10.00
  • No start fee and no monthly rental.
  • Failed, invalid and empty inputs are free: an ID Spotify does not know, a podcast link, a typo.
  • A link repeated in the same run is fetched and charged once, and a full discography charges each song once (dedupeTracks).
  • Set a maximum cost per run and the Actor stops there, without charging more. Big catalogs: maxReleasesPerArtist, maxTracksPerAlbum and maxTracksPerPlaylist cap what one input can cost.

FAQ

What is a Spotify play count?

It is the number Spotify shows next to each track on artist and album pages: how many times the track has been streamed on Spotify, all time. Spotify counts a play once a track has been listened to for at least 30 seconds. This Actor returns it as playCount, a whole number.

How fresh are the play counts?

Every run reads Spotify's public counter live. Spotify refreshes that counter periodically, usually about once a day, so two runs on the same day tend to return the same number. To track stream growth, schedule the Actor daily and compare playCount per id across scrapedAt.

Why is the play count 0?

Spotify only shows a play count once a track passes 1,000 streams and reports 0 below that. Brand-new or niche releases read 0 until they cross the threshold; the row is still the number Spotify publishes.

Why does a full discography return fewer tracks than the releases list?

Spotify puts the same recording on several releases (the album, the single, a deluxe edition) under different track IDs, and shows one shared play count on all of them. With dedupeTracks on (the default), each song is returned once, from its newest release, so adding up playCount does not count its streams twice. For Lorde that leaves 71 of 85 release tracks. Turn dedupeTracks off to get every release's copy. maxTracksPerAlbum and maxReleasesPerArtist also limit a discography.

Which releases does a full discography include?

The artist's albums, singles and EPs, and compilations, as Spotify lists them on the artist's page, newest first; choose the types with includeAlbums, includeSingles and includeCompilations. Releases by other artists that the artist only appears on are not included.

Why did I get fewer rows than there are tracks?

Tracks that Spotify returns without a play count are skipped and not charged. Playlists skip podcast episodes and local files (the other tracks keep their Spotify positions). Albums stop at maxTracksPerAlbum (50 by default), playlists at maxTracksPerPlaylist (100 by default), and artists in top-tracks mode return Spotify's top tracks only (usually 10).

It is listed in the ERRORS record with the reason and charged: false. Typical reasons: Spotify does not know the ID, the link is a podcast or a user profile, or the text is not a Spotify link. The run still succeeds, with a status message such as "Delivered 22 items; 1 query had no data on Spotify … and was not charged." Temporary Spotify or network errors are retried first. A run fails only when it delivered nothing because of a temporary error, so Apify's retry and alert settings can react. When part of an input fails, for example one release of a discography, the rest is delivered and the gap is listed under warnings in RUN_SUMMARY.

Is the service up?

Check the live status page: https://stats.uptimerobot.com/y2392u6LY0.

Do I need a Spotify account or API key?

No. You only need an Apify account.

Can I call it via API or connect it to other tools?

Yes. This call starts a run and returns the results:

curl -X POST "https://api.apify.com/v2/acts/eduair94~spotify-play-count-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://open.spotify.com/artist/163tK9Wjr9P9DmM0AVK7lm"], "artistMode": "fullDiscography"}'

JavaScript, with the apify-client package:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('eduair94/spotify-play-count-scraper').call({
urls: ['https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.position, item.name, item.playCount);

Python, with the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("eduair94/spotify-play-count-scraper").call(
run_input={"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"], "includeArtistProfile": True}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["rowType"], item["name"], item.get("playCount"), item.get("monthlyListeners"))

You can also schedule runs, get a webhook when a run finishes, and send results to Google Sheets, Slack, Make, Zapier and other tools with Apify integrations.

Play counts are public: Spotify shows them to every visitor. The Actor collects no personal data. You are responsible for making sure your use of the data complies with Spotify's terms and the laws that apply to you.

I need other Spotify data

Spotify Scraper covers lyrics, song credits, charts, concerts, podcasts, search and more, including the same play counts.

Use cases

  • Catalog valuation and due diligence: sum an artist's or a label's streams across the full discography before buying, financing or licensing a catalog.
  • Royalty estimation: multiply streams by a per-stream rate (commonly cited at $0.003-$0.005) to estimate what a track, album or catalog earned.
  • Playlist research: see how many streams the tracks of a playlist have, and spot its breakout songs.
  • Music marketing: measure what a release campaign, a playlist placement or a viral moment did to a track's streams.
  • A&R and talent scouting: compare catalogs and spot breakout tracks by stream count and monthly listeners.
  • Chart and stream tracking: schedule daily runs and chart each track's stream growth.
  • Research and journalism: back stories and reports with exact stream counts.