Spotify Play Count Scraper avatar

Spotify Play Count Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Spotify Play Count Scraper

Spotify Play Count Scraper

Spotify Play Count Scraper extracts public track data including play counts, song titles, artists, albums, release dates, durations, and Spotify URLs. Monitor streaming performance, compare tracks, analyze music trends, and build structured datasets for research.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Spotify Play Count Scraper — Stream Counts for Tracks & Albums

Spotify Play Count Scraper pulls the exact stream count for any Spotify track, album, or artist by calling the same anonymous GraphQL API the open.spotify.com web player itself uses — a number the official Spotify Web API never returns. Paste artist, album, or track URLs and get back streamCount, artists, releaseDate, duration, and label as structured JSON, ready to load into a spreadsheet, a database, or an LLM pipeline. Add your URLs below and start a run to see it in action.

🎵 What is Spotify Play Count Scraper?

Spotify Play Count Scraper is an Apify Actor that extracts play counts (stream totals), track and album metadata, and artist stats from public Spotify pages, returning everything as structured JSON. It authenticates with a short-lived anonymous access token minted from Spotify's own embed player, so no Spotify account, login, or developer API key is required. It's built for music-industry analysts, labels, developers building music apps, and AI engineers who need real Spotify stream data that the partner API doesn't expose.

🔓 What Spotify track and artist data is publicly available to scrape?

Track names, play counts, album credits, cover art, and artist follower stats are all visible on open.spotify.com to any visitor, with no login required — that's exactly what this Actor reads. What's gated behind an actual Spotify account is playback itself, not the metadata around it.

Data CategoryPublicly Available (no login)Requires a Spotify account
Track name, artists, albumYes
Play / stream countYes — shown on the track's own page
30-second preview audio (previewUrl)Yes
Full track audio playbackNoYes (Free or Premium account)
Cover art, release date, record label, copyrightYes
Artist follower count and monthly listenersYes — shown on the artist's public profile
Personal playlists, saved library, listening historyNoYes (own account only)

Spotify Play Count Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.

📊 What data can I extract with Spotify Play Count Scraper?

The Actor returns three record shapes depending on the URL type you feed it — album, track, or artist — covering identity fields, play-count and engagement metrics, and nested media data.

Field NameDescription
_urlThe Spotify URL that produced this record
_typeRecord type: album, track, or artist
idThe entity's Spotify id
nameTrack, album, or artist name
typeSpotify's own release type, lowercased (album, single, track, artist)
artistsArray of { id, name } for every credited artist
albumTrack records only — { id, name } of the parent album
releaseDateFull date (YYYY-MM-DD) when Spotify provides one, else year only, else null
labelRecord label name
copyrightArray of copyright line objects as published by Spotify
streamCountThe exact play count Spotify shows on the item's page (omitted when scrapePreviewUrls is on)
previewUrl30-second MP3 preview URL — only present when scrapePreviewUrls is enabled
durationTrack length in milliseconds
contentRatingexplicit or none
followersArtist records only — total follower count
monthlyListenersArtist records only — Spotify's monthly listener figure
tracksAlbum records only — array of per-track entries (id, name, streamCount/previewUrl, duration, contentRating)
coverArtArray of { url, height, width } images
moreAlbumsAlbum records only — other popular releases by the same artist (id, name, type, releaseDate)

Identity and descriptive fields

_url, _type, id, name, type, artists, album, releaseDate, label, contentRating

Quantitative and metric fields

streamCount, previewUrl, duration, followers, monthlyListeners

Nested and media fields

tracks, coverArt, copyright, moreAlbums

🆚 How does Spotify Play Count Scraper differ from the official Spotify API?

Spotify's own Web API lets developers query track, album, and artist metadata over OAuth 2.0, but it does not return play or stream counts — the closest field it offers is popularity, a deprecated 0–100 score that Spotify's own documentation says is "calculated by algorithm" and "may lag actual popularity by a few days," not a real count. Spotify Play Count Scraper returns the actual stream total instead.

FeatureSpotify Web APISpotify Play Count Scraper
Play / stream countsNot returned — only a deprecated, lagging popularity scoreReturns streamCount, the real stream total, per track
Access requirementsRegistered developer app + OAuth 2.0 tokenNo account, login, or API key
Setup timeRegister an app, request scopes, implement OAuthPaste a URL and run
Bulk artist discographyOne call per album/track; no built-in discography crawlfollowAlbums / followSingles / followPopularReleases walk a full discography in one run
Preview audiopreview_url field is deprecated and frequently nullscrapePreviewUrls returns a live 30-second preview link per track
Rate limitsEnforced over a rolling 30-second window, with stricter quotas in "development mode" (per Spotify's own rate-limit docs)The Actor paces its own requests and escalates proxies automatically — no developer quota approval needed

Use the official Spotify Web API when you need Spotify-approved metadata inside a production app under Spotify's Developer Terms. Use Spotify Play Count Scraper when you need an actual stream count, preview audio, or a bulk crawl of an artist's back catalog — none of which the official API provides.

🚀 How to use Spotify Play Count Scraper

Spotify Play Count Scraper runs on the Apify platform — there's no separate signup or API key to request beyond an Apify account.

  1. Open the Actor's page on Apify and load it into your account.
  2. Provide urls — at least one open.spotify.com artist, album, or track link (the only required input).
  3. Optionally enable followAlbums, followSingles, or followPopularReleases to crawl an artist's discography, and set maxFollowedItems to cap how many releases each bucket follows.
  4. Click Start to run the Actor.
  5. Download results as JSON or CSV from the Dataset tab, or read them through the Apify API as the run progresses.

How to scale to bulk track and album extraction

urls is an array, so pasting or uploading dozens or thousands of Spotify links runs them all in a single execution — mix artist, album, and track URLs freely in the same list. For very large lists, point urls at a hosted .txt file (one URL per line) instead of pasting them individually; the Actor downloads and expands it before scraping starts. The input schema itself sets no cap on how many URLs a single run can accept.

💡 What can you do with Spotify play count data?

  • 📈 A music-industry analyst tracking release performance uses streamCount and releaseDate together to chart how fast a new single accumulates plays after launch.
  • 🏷️ A label A&R scout evaluating catalog value uses streamCount and moreAlbums to compare a track against an artist's other popular releases before a licensing decision.
  • ©️ A royalty or rights researcher cross-references label and copyright against streamCount to check stream volume against the rights holder of record.
  • 🎧 A developer building a music-discovery app enables scrapePreviewUrls to pull previewUrl and coverArt and render playable previews without touching Spotify's authenticated playback SDK.
  • 🤖 An AI engineer building a RAG-based music-trends assistant feeds name, artists, streamCount, and releaseDate into a vector index so the agent can answer natural-language questions about which tracks are trending.

Because Spotify Play Count Scraper runs on the standard Apify API, any agent framework that can make an HTTP call can trigger a run and read the results back as a tool.

🌐 How does Spotify Play Count Scraper handle rate limits and blocking?

The Actor talks to Spotify's own anonymous GraphQL API directly over HTTP — no headless browser is involved. Every request goes through a retry loop (up to 3 attempts, with a short backoff between tries) before it's counted as failed. If Spotify responds with 403, 429, or a 5xx error, the Actor automatically escalates from a direct connection to a Datacenter proxy, then to a Residential proxy — and once it reaches Residential it stays there for the rest of the run, rotating to a fresh residential IP if blocked again (up to 3 rotations before it settles and continues on the last IP it has). Every escalation step is written to the run log. If Spotify becomes completely unreachable across many consecutive requests, the Actor stops issuing new requests and ends the run cleanly; since every record is pushed to the dataset the moment it's scraped, whatever was already collected before that point is not lost.

⬇️ Input

Spotify Play Count Scraper accepts the following parameters, defined in .actor/input_schema.json. Only urls is required.

ParameterRequiredTypeDescriptionExample Value
urlsYesArray of stringsOne or more open.spotify.com links — mix artist, album, and track URLs freely in the same list. Paste them directly, upload a file, or link to a hosted text file (one URL per line) for bulk input. Minimum 1 item.["https://open.spotify.com/album/1XkGORuUX2QGOEIL4EbJKm"]
followAlbumsNoBooleanFor artist URLs only: also crawl and fetch play counts for every studio album in the artist's discography. Default: false.true
followSinglesNoBooleanFor artist URLs only: also crawl and fetch play counts for every single in the artist's discography. Default: false.false
followPopularReleasesNoBooleanFor artist URLs only: also crawl and fetch play counts for Spotify's curated "popular releases" shelf on the artist's page. Default: false.true
scrapePreviewUrlsNoBooleanWhen enabled, each track gets a playable previewUrl (30-second MP3 clip) instead of streamCount. Default: false.false
maxFollowedItemsNoIntegerCaps how many albums / singles / popular releases are followed per artist, per enabled bucket above. 0 = no limit. Minimum 0, maximum 5000000. Default: 0.50
proxyConfigurationNoObjectDefault is no proxy (direct connection). If Spotify starts rejecting requests, the Actor automatically escalates: Direct → Datacenter proxy → Residential proxy, staying on residential once reached. Override only to force a specific proxy from the start.{ "useApifyProxy": false }

⚠️ Only Spotify artist, album, and track links are recognized. Playlist URLs are not matched by the input parser and are skipped with a logged error.

⚠️ followPopularReleases returns whatever Spotify's curated "popular releases" shelf shows for that artist — there's no paginated query behind it, unlike followAlbums / followSingles, so maxFollowedItems cannot expand it beyond what the shelf itself contains.

Example input

{
"urls": [
"https://open.spotify.com/album/1XkGORuUX2QGOEIL4EbJKm",
"https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
"https://open.spotify.com/track/7qiZfU4dY1lWllzX7mPBI3"
],
"followAlbums": true,
"followSingles": false,
"followPopularReleases": true,
"scrapePreviewUrls": false,
"maxFollowedItems": 50,
"proxyConfiguration": {
"useApifyProxy": false
}
}

⬆️ Output

Every scraped record — album, track, or artist — is pushed to the dataset as typed JSON the moment it's ready, so a run stopped early still keeps whatever was already collected. Results are downloadable as JSON or CSV, and the dataset ships four ready-made views (Overview, Albums, Tracks, Artists) for quick inspection in the Apify Console. Each pushed record is billed as one row_result event; items that fail to scrape (missing or unavailable URLs) are never pushed to the dataset, so you're never charged for a row that doesn't appear in your results.

Example output

An album record:

{
"_url": "https://open.spotify.com/album/1XkGORuUX2QGOEIL4EbJKm",
"_type": "album",
"id": "1XkGORuUX2QGOEIL4EbJKm",
"name": "SOUR",
"type": "album",
"releaseDate": "2021-05-21",
"artists": [
{ "id": "1McMsnEElThX1knmY4oliG", "name": "Olivia Rodrigo" }
],
"label": "Geffen Records",
"copyright": [
{ "type": "P", "text": "2021 Olivia Rodrigo, under exclusive license to Geffen Records" },
{ "type": "C", "text": "2021 Geffen Records" }
],
"tracks": [
{ "id": "6Uj1ctrBOjOas8xZXGqKk4", "name": "brutal", "streamCount": 412873910, "duration": 137626, "contentRating": "explicit" },
{ "id": "5wANPM4fQCJwkGd4rN57mH", "name": "traitor", "streamCount": 389217643, "duration": 229400, "contentRating": "none" }
],
"coverArt": [
{ "url": "https://i.scdn.co/image/ab67616d0000b273abc123", "height": 640, "width": 640 }
],
"moreAlbums": [
{ "id": "6s84u2TUpR3wdUv4NgKA2j", "name": "GUTS", "type": "album", "releaseDate": "2023-09-08" }
]
}

A track record (from a bare track URL):

{
"_url": "https://open.spotify.com/track/7qiZfU4dY1lWllzX7mPBI3",
"_type": "track",
"id": "7qiZfU4dY1lWllzX7mPBI3",
"name": "Shape of You",
"type": "track",
"artists": [
{ "id": "6eUKZXaKkcviH0Ku9w2n3V", "name": "Ed Sheeran" }
],
"album": { "id": "3T4tUhGYeRNVUGevb0wThu", "name": "÷ (Deluxe)" },
"releaseDate": "2017-03-03",
"label": "Asylum Records UK",
"copyright": [
{ "type": "C", "text": "2017 Asylum Records UK, a division of Atlantic Records UK" }
],
"streamCount": 4123456789,
"duration": 233712,
"contentRating": "none",
"coverArt": [
{ "url": "https://i.scdn.co/image/ab67616d0000b273def456", "height": 640, "width": 640 }
]
}

An artist record (no follow options enabled):

{
"_url": "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
"_type": "artist",
"id": "1Xyo4u8uXC1ZmMpatF05PJ",
"name": "The Weeknd",
"type": "artist",
"followers": 38294112,
"monthlyListeners": 89452301,
"coverArt": [
{ "url": "https://i.scdn.co/image/ab6761610000e5ebghi789", "height": 640, "width": 640 }
]
}

⚙️ How does it work?

Spotify Play Count Scraper is a pure API-based scraper — it doesn't render open.spotify.com in a browser. It calls the same anonymous GraphQL "pathfinder" endpoint the Spotify web player itself uses internally, authenticating with a short-lived anonymous access token minted from Spotify's own embed player. Requests are sent using Chrome TLS/HTTP impersonation rather than a real browser, then routed through the direct-to-residential proxy chain described above only if Spotify starts blocking them. The GraphQL query hashes and API host are re-read live from the web player's own JavaScript bundle at the start of every run, with pinned fallback values in case that lookup fails, so the Actor keeps working even if Spotify changes its internal query IDs. Only data visible on Spotify's own public pages is ever returned, and the output schema stays the same across runs regardless of UI changes on Spotify's side.

🔗 Integrations

Spotify Play Count Scraper runs on the standard Apify platform, so it works with anything that can call the Apify API.

Calling Spotify Play Count Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("<YOUR_APIFY_USERNAME>/spotify-play-count-scraper").call(
run_input={"urls": ["https://open.spotify.com/album/1XkGORuUX2QGOEIL4EbJKm"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item.get("streamCount"))

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node to call the Actor's run-sync-get-dataset-items endpoint on api.apify.com, with your urls array as the JSON body. In Make, use Apify's own module for running an Actor and fetching its dataset items, mapping urls from earlier steps in your scenario. In LangChain, the community apify integration can invoke this Actor directly and load its resulting dataset as documents for a retriever or agent tool.

Scraping publicly visible Spotify pages for track, album, and artist metadata is generally lawful — this data (play counts, artist names, release dates, cover art, record labels) is business and catalog data, not personal data about an identifiable private individual, so GDPR and CCPA's personal-data rules do not attach to it. What does apply is Spotify's own Terms of Service, which govern automated access to open.spotify.com, and database-rights protections that may cover Spotify's compiled catalog in some jurisdictions. Spotify Play Count Scraper returns only what's already visible to any visitor on the public web player, without a login. Consult legal counsel if your use case involves bulk storage of personal data or resale of Spotify's catalog data.

❓ Frequently asked questions

What Spotify track and album fields does Spotify Play Count Scraper return?

The core fields are streamCount, artists, releaseDate, duration, and contentRating, plus label and coverArt for context. See the full field table above for every key the Actor writes, across album, track, and artist records.

Does Spotify Play Count Scraper require a Spotify account or login?

No. It authenticates with a short-lived anonymous access token minted from Spotify's own embed player — the same mechanism that powers embedded Spotify players on other websites. No account, login, or API key is needed.

How many tracks and albums can I extract in one run?

urls accepts an unlimited-length array, and followAlbums / followSingles can walk an artist's entire discography in one run (capped only by maxFollowedItems, or the Actor's internal pagination backstops for extreme catalogs). There's no fixed cap on the number of URLs a single run can take as input.

What happens if a track, album, or artist page doesn't exist or is unavailable?

The Actor logs a warning, skips that item, and keeps processing the rest of the batch — nothing is pushed to the dataset for it, and it isn't billed. The end-of-run log reports how many items could not be scraped.

Can I scrape multiple Spotify URLs at once?

Yes. urls is an array — mix artist, album, and track links freely in the same run, or link to a hosted text file with one URL per line for bulk input.

Does Spotify Play Count Scraper work with Claude, ChatGPT, and other AI agent tools?

It's callable as a standard HTTP endpoint through the Apify API, so any agent framework that can make an HTTP request — including Claude and ChatGPT tool-use setups — can trigger a run and read back the JSON results.

What's the difference between streamCount and previewUrl output mode?

By default every track carries streamCount, its exact play total. Turning on scrapePreviewUrls swaps that field for previewUrl, a playable 30-second MP3 link, for use cases like music-preview apps rather than analytics — the Actor returns one or the other per run, not both.

Does Spotify Play Count Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or CSS selectors involved. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Spotify changes its layout or anti-bot system?

The Actor re-reads its GraphQL query hashes and API endpoint live from Spotify's own web-player bundle at the start of every run, with pinned fallback values if that lookup fails, so the output schema stays stable across Spotify's own changes.

Can I use Spotify Play Count Scraper without managing proxies or browser infrastructure?

Yes. There's no browser involved at all — requests go straight to Spotify's API — and the Actor handles proxy selection and escalation (Direct → Datacenter → Residential) automatically when Spotify blocks a request.

Which fields work best for AI training data and RAG indexing?

For RAG, index name, artists, and label as the descriptive text fields. For training data or analytics, streamCount, duration, and releaseDate return as consistently typed primitives (integer, integer, date string) across every record.

ScraperWhat it extracts
../TikTok-Posts-ScraperTikTok posts, video metadata, and engagement data from profiles, hashtags, or keyword search
../TikTok-Keyword-Search-ScraperTikTok videos by keyword, with date/sort filters and automatic pagination
../Twitter-X-Profile-ViewerPublic X/Twitter profile bio, stats, verification, and pinned tweets
../Instagram-Transcript-API-&-Profile-Scraper-AI-Video-to-TextInstagram Reel/video AI transcripts plus public profile posts
../Website-Content-CrawlerClean text, Markdown, HTML, and metadata from any website, for LLMs and RAG pipelines

🛟 Your feedback

Found a bug or missing a field? Let us know — contact Scraper Engine at dev.scraperengine@gmail.com with your run ID and details, and we'll follow up.