Spotify Play Count Scraper
Pricing
from $4.99 / 1,000 results
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
Maintained by CommunityActor 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 Category | Publicly Available (no login) | Requires a Spotify account |
|---|---|---|
| Track name, artists, album | Yes | — |
| Play / stream count | Yes — shown on the track's own page | — |
30-second preview audio (previewUrl) | Yes | — |
| Full track audio playback | No | Yes (Free or Premium account) |
| Cover art, release date, record label, copyright | Yes | — |
| Artist follower count and monthly listeners | Yes — shown on the artist's public profile | — |
| Personal playlists, saved library, listening history | No | Yes (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 Name | Description |
|---|---|
_url | The Spotify URL that produced this record |
_type | Record type: album, track, or artist |
id | The entity's Spotify id |
name | Track, album, or artist name |
type | Spotify's own release type, lowercased (album, single, track, artist) |
artists | Array of { id, name } for every credited artist |
album | Track records only — { id, name } of the parent album |
releaseDate | Full date (YYYY-MM-DD) when Spotify provides one, else year only, else null |
label | Record label name |
copyright | Array of copyright line objects as published by Spotify |
streamCount | The exact play count Spotify shows on the item's page (omitted when scrapePreviewUrls is on) |
previewUrl | 30-second MP3 preview URL — only present when scrapePreviewUrls is enabled |
duration | Track length in milliseconds |
contentRating | explicit or none |
followers | Artist records only — total follower count |
monthlyListeners | Artist records only — Spotify's monthly listener figure |
tracks | Album records only — array of per-track entries (id, name, streamCount/previewUrl, duration, contentRating) |
coverArt | Array of { url, height, width } images |
moreAlbums | Album 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.
| Feature | Spotify Web API | Spotify Play Count Scraper |
|---|---|---|
| Play / stream counts | Not returned — only a deprecated, lagging popularity score | Returns streamCount, the real stream total, per track |
| Access requirements | Registered developer app + OAuth 2.0 token | No account, login, or API key |
| Setup time | Register an app, request scopes, implement OAuth | Paste a URL and run |
| Bulk artist discography | One call per album/track; no built-in discography crawl | followAlbums / followSingles / followPopularReleases walk a full discography in one run |
| Preview audio | preview_url field is deprecated and frequently null | scrapePreviewUrls returns a live 30-second preview link per track |
| Rate limits | Enforced 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.
- Open the Actor's page on Apify and load it into your account.
- Provide
urls— at least oneopen.spotify.comartist, album, or track link (the only required input). - Optionally enable
followAlbums,followSingles, orfollowPopularReleasesto crawl an artist's discography, and setmaxFollowedItemsto cap how many releases each bucket follows. - Click Start to run the Actor.
- 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
streamCountandreleaseDatetogether to chart how fast a new single accumulates plays after launch. - 🏷️ A label A&R scout evaluating catalog value uses
streamCountandmoreAlbumsto compare a track against an artist's other popular releases before a licensing decision. - ©️ A royalty or rights researcher cross-references
labelandcopyrightagainststreamCountto check stream volume against the rights holder of record. - 🎧 A developer building a music-discovery app enables
scrapePreviewUrlsto pullpreviewUrlandcoverArtand render playable previews without touching Spotify's authenticated playback SDK. - 🤖 An AI engineer building a RAG-based music-trends assistant feeds
name,artists,streamCount, andreleaseDateinto 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.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | Yes | Array of strings | One 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"] |
followAlbums | No | Boolean | For artist URLs only: also crawl and fetch play counts for every studio album in the artist's discography. Default: false. | true |
followSingles | No | Boolean | For artist URLs only: also crawl and fetch play counts for every single in the artist's discography. Default: false. | false |
followPopularReleases | No | Boolean | For artist URLs only: also crawl and fetch play counts for Spotify's curated "popular releases" shelf on the artist's page. Default: false. | true |
scrapePreviewUrls | No | Boolean | When enabled, each track gets a playable previewUrl (30-second MP3 clip) instead of streamCount. Default: false. | false |
maxFollowedItems | No | Integer | Caps how many albums / singles / popular releases are followed per artist, per enabled bucket above. 0 = no limit. Minimum 0, maximum 5000000. Default: 0. | 50 |
proxyConfiguration | No | Object | Default 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 ApifyClientclient = 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.
⚖️ Is it legal to scrape Spotify track and artist data?
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.
🧭 Related scrapers
| Scraper | What it extracts |
|---|---|
| ../TikTok-Posts-Scraper | TikTok posts, video metadata, and engagement data from profiles, hashtags, or keyword search |
| ../TikTok-Keyword-Search-Scraper | TikTok videos by keyword, with date/sort filters and automatic pagination |
| ../Twitter-X-Profile-Viewer | Public X/Twitter profile bio, stats, verification, and pinned tweets |
| ../Instagram-Transcript-API-&-Profile-Scraper-AI-Video-to-Text | Instagram Reel/video AI transcripts plus public profile posts |
| ../Website-Content-Crawler | Clean 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.