Spotify Play Count & Insights Scraper
Pricing
from $20.00 / 1,000 entity scrapeds
Spotify Play Count & Insights Scraper
Exact stream counts, monthly listeners, world rank, full discography PLUS historical trend tracking, related artists, playlists, contact info (emails/socials), revenue estimates, lyrics and podcasts. Drop-in superset of beatanalytics/spotify-play-count-scraper.
Pricing
from $20.00 / 1,000 entity scrapeds
Rating
0.0
(0)
Developer
Yuliia Kulakova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Share
Exact stream counts, monthly listeners, world rank and the full discography graph straight from Spotify — the data the official Web API hides — plus historical trend tracking, related artists, playlists, lead-gen contact info, lyrics and podcasts.
A drop-in superset of beatanalytics/spotify-play-count-scraper: the same inputs work unchanged, and it returns the same fields and many more.

What you get
| Exact play counts | Per-track stream counts that the Spotify Web API doesn't expose. |
| Audience signals | Monthly listeners, followers, world rank, top cities (with listener counts per city). |
| Full discography | Albums, singles, popular releases, "Appears On", "Featuring" — with per-track streams. |
| Related artists graph | "Fans also like" with optional enrichment (monthly listeners + followers per related artist) and graph-crawl depth. |
| Playlist attribution | "Discovered On" — which editorial/user playlists are driving the streams. |
| Historical trends | Persisted snapshots + automatic deltas + stream velocity per day across scheduled runs. |
| Lead-gen contact info | Emails (from bio) + categorised social links + website. |
| Revenue estimates | Per-artist royalty range from the industry-standard $0.003–0.005 per-stream payout band. |
| Lyrics | Time-synced lyrics per track (requires your sp_dc cookie — see FAQ). |
| Podcasts | Show metadata + paginated episode list (name, duration, release date). |
| Full playlist contents | Owner, follower count, paginated track list with addedAt timestamps. |
| Original-actor compatibility | Optional flat play_counts.csv export matching beatanalytics/spotify-play-count-scraper. |
Works without configuration — proxies are included, auth is self-healing, and the actor is resilient to Spotify's periodic web-player rotations.
Use cases
- Music marketer / A&R — scout rising artists by city, by monthly-listener velocity, by playlist co-occurrence.
- Independent label / Manager — pull contact info and audience size for outreach targeting.
- Music journalist / Analyst — cite exact stream counts with provenance.
- Royalty analyst — estimate revenue from streams using transparent payout assumptions.
- Playlist curator — see which playlists already feature an artist.
- Data engineer — schedule the actor and feed a clean time-series into your warehouse.
- Podcast aggregator — pull show metadata + full episode catalogue.
Quick start
Paste a Spotify URL — that's the whole minimum input:
{"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"]}
You get an artist record with monthly listeners, followers, world rank, top 10 tracks (with stream counts), top 5 cities, full discography lists, biography, external links, contact info, and analytics — all in one record.
Common inputs
Crawl all albums of an artist (full per-track streams):
{"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"],"followAlbums": true}
Scrape by keyword instead of URL:
{"searchQueries": ["Taylor Swift", "phonk", "lofi beats"],"searchType": "track","maxSearchResults": 5}
Resolve a playlist fully (with follower count):
{"urls": ["https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"],"includePlaylists": true}
Related-artists graph with monthly-listener enrichment:
{"urls": ["https://open.spotify.com/artist/3TVXtAsR1Inumwj472S9r4"],"includeRelatedArtists": true,"relatedArtistsDepth": 1,"enrichRelatedArtists": true,"includeDiscoveredOnPlaylists": true}
Historical trend tracking — schedule daily/weekly:
{"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"],"enableHistory": true,"historyDatasetName": "my-spotify-history"}
From the second run onwards every record carries a history.delta block with streamChange, listenerChange, streamVelocityPerDay, and a trend (up / down / flat).
Podcast show + episode catalogue:
{"urls": ["https://open.spotify.com/show/2MAi0BvDc6GTFvKFPXnkCL"],"includePodcasts": true}
Inputs reference
Compatible with beatanalytics/spotify-play-count-scraper
| Field | Type | Default | Description |
|---|---|---|---|
urls | array | — | Spotify URLs/URIs (artist, album, track, playlist, show, episode) |
followAlbums | boolean | false | For each artist URL, also crawl every album |
followSingles | boolean | false | For each artist URL, also crawl every single/EP |
followPopularReleases | boolean | false | Crawl Spotify's curated "popular releases" |
scrapePreviewUrls | boolean | false | Include 30s preview URLs alongside play counts |
Added in this actor
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | array | — | Scrape by keyword instead of URL |
searchType | enum | artist | artist / album / track / playlist / all |
maxSearchResults | int | 5 | Results per search query |
includeRelatedArtists | boolean | false | Add "Fans also like" graph |
relatedArtistsDepth | int | 0 | Crawl related artists as their own records (0–3) |
includeDiscoveredOnPlaylists | boolean | false | Playlist attribution per artist |
includePlaylists | boolean | false | Resolve full playlist contents + follower count |
includeLyrics | boolean | false | Time-synced lyrics (needs spDcCookie) |
includePodcasts | boolean | false | Resolve shows + episodes |
includeAnalytics | boolean | true | Engagement, revenue range, momentum, concentration |
includeContactInfo | boolean | true | Emails + categorized socials + website |
includeAppearsOn | boolean | false | "Appears On" + "Featuring" discography |
includeConcerts | boolean | false | Concerts (best-effort — see FAQ) |
enrichRelatedArtists | boolean | false | Add monthly listeners + followers to each related artist |
writePlayCountsCsv | boolean | false | Emit flat play_counts.csv to the key-value store |
enableHistory | boolean | false | Persist snapshots + compute trends/velocity |
historyDatasetName | string | spotify-history | Named store reused across scheduled runs |
spDcCookie | string (secret) | — | sp_dc cookie for lyrics |
proxyConfiguration | object | auto | Optional. Proxies are included automatically — leave empty unless overriding. |
maxConcurrency | int | 4 | Parallel workers |
minDelayMs | int | 350 | Throttle between requests |
Output
Every record carries type, id, url, name, scrapedAt. Type-specific fields are layered on top.
Artist record: verified, followers, monthlyListeners, worldRank, topCities[], topTracks[], albums[], singles[], popularReleases[], relatedArtists[], discoveredOnPlaylists[], biography, externalLinks[], totalTopTrackStreams, followerToListenerRatio, contactInfo, analytics, history (when enabled).
Album: albumType, releaseDate, label, copyright, full tracks[] (each with streamCount), totalAlbumStreams.
Track: streamCount, duration, contentRating, trackNumber, album metadata, artists.
Playlist: owner, follower count, paginated tracks[] with addedAt.
Show: publisher, description, totalEpisodes, paginated episodes[] with name + duration + releaseDate.
Analytics block
{"engagementRate": 1.56,"topTrackConcentration": 0.08,"topTrackStreams": 17637107878,"estimatedTopTrackRevenueUSD": { "low": 52911324, "high": 88185539, "currency": "USD" },"streamPayoutAssumption": { "low": 0.003, "high": 0.005, "currency": "USD" },"discoveryPlaylistCount": 11,"momentum": { "streamVelocityPerDay": 0, "trend": "flat" }}
History block (with enableHistory)
{"firstSeen": "2026-05-01T00:00:00Z","snapshotCount": 12,"previous": { "at": "...", "monthlyListeners": 1000000, "totalStreams": 500000000 },"delta": {"daysElapsed": 1.0,"streamChange": 1250000,"streamVelocityPerDay": 1250000,"trend": "up"},"series": [ { "at": "...", "monthlyListeners": 0, "totalStreams": 0 } ]}
Pricing
Simple pay-per-event:
| Event | Cost |
|---|---|
| Actor start | $0.01 |
| Each scraped entity (artist / album / track / playlist / show / episode) | $0.02 |
Example run costs:
| What you scrape | Calculation | Cost |
|---|---|---|
| 1 artist with analytics + contact info | $0.01 + 1 × $0.02 | $0.03 |
| 10 artists | $0.01 + 10 × $0.02 | $0.21 |
| 100 artists daily (trend tracking) | $2.01 / run | ~$60 / month |
| 500 tracks (bulk play-count audit) | $0.01 + 500 × $0.02 | $10.01 |
| 5,000 entities (catalog sweep) | $0.01 + 5,000 × $0.02 | $100.01 |
Compare: Chartmetric / Soundcharts start at $250–350/month per seat and don't expose per-track play counts at all.
FAQ
Does this work without configuration? Yes. Paste a URL and run.
Why does lyrics require a cookie?
Spotify gates the lyrics endpoint behind a logged-in session. To use lyrics, paste your sp_dc cookie value (F12 → Application → Cookies → sp_dc on open.spotify.com) into the input field. Without it, every other feature still works.
Are concerts complete?
No — Spotify gates most concert data behind a logged-in session. Anonymous runs often return an empty list or partial entries with only an id. Use includeConcerts: true only when you specifically need the best-effort data.
Why no genres?
Spotify removed the genres array from the artist endpoint in 2024. Nobody has it via this API surface anymore.
Are the revenue estimates accurate?
They're a range based on the publicly cited Spotify net payout band of $0.003–0.005 per stream. We never claim a precise number — we always report a range, and we surface the streamPayoutAssumption so you can recompute with your own band.
Can I export to CSV / Excel?
Yes. Apify automatically offers CSV, JSON, Excel, XML, and HTML export on every dataset. Additionally, writePlayCountsCsv: true writes a flat play_counts.csv to the key-value store matching the original scraper's shape.
Will repeated runs over-charge me for the same entity? Each run is metered independently. If you re-scrape the same artist daily, that's one billable entity per run. The historical store deduplicates time-series points so trend data stays clean.
What's the difference vs beatanalytics/spotify-play-count-scraper?
Drop-in superset. Same inputs, same field names — plus related artists, "Discovered On" playlists, lyrics, podcasts, search by query, contact info, analytics block, historical trends, and "Appears On" / "Featuring".
Legal
This actor scrapes only publicly available Spotify data. It is not affiliated with, endorsed by, or sponsored by Spotify. Use responsibly and respect Spotify's Terms of Service and applicable laws.
Maintained by brilliant_gum on Apify.