Spotify Scraper - Play Counts, Monthly Listeners & Playlists avatar

Spotify Scraper - Play Counts, Monthly Listeners & Playlists

Pricing

$1.00 / 1,000 result rows

Go to Apify Store
Spotify Scraper - Play Counts, Monthly Listeners & Playlists

Spotify Scraper - Play Counts, Monthly Listeners & Playlists

Scrape public Spotify pages for artists, albums, playlists and tracks: monthly listeners, followers, play counts, playlist track lists and album metadata. No login, no Spotify API keys.

Pricing

$1.00 / 1,000 result rows

Rating

0.0

(0)

Developer

Luke Hunter

Luke Hunter

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Spotify Scraper — Play Counts, Monthly Listeners & Playlists

For music marketers, labels, managers and playlist curators who need Spotify numbers without a Spotify developer account. Give it artist, album, playlist or track links from open.spotify.com and get back one row per entity — monthly listeners, followers, play counts, track lists — sourced from Spotify's own public pages, no login and no Spotify Web API keys required.

Pay-per-result: $0.001 per result — 1,000 results = $1. Try it free with Apify's monthly platform credit.

Quick start (2 minutes)

  1. Copy an artist, album, playlist or track link from open.spotify.com (or its spotify:type:id URI — right-click → Share → Copy Spotify URI).
  2. Open the Input tab and use this prefill (swap in your own links):
{
"urls": ["https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg"],
"maxItems": 20
}
  1. Click Start. Export the resulting dataset to CSV/Excel/JSON, or pull it through the API shown below.

Use cases

  • Artist managers and labels tracking monthly listeners and follower growth over time.
  • Playlist pitching and curation — pull a playlist's current tracklist, owner and play counts before pitching a placement, or to monitor a playlist you're already on.
  • Music marketers comparing play counts across an artist's catalogue or a competitor's.
  • Researchers and journalists building a dataset of public Spotify catalogue metadata.

Run it weekly

  1. Set your artist/playlist/album URLs, then click Schedule on the run page (or create one under Schedules in the Apify Console).
  2. Run it weekly to build a monthly-listeners/followers/play-count history.
  3. Use uri to match entities across runs, and compare monthlyListeners/followers/playCount to spot movement since the last run.

Input

{
"urls": ["https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg"],
"includeTracks": true,
"maxTracksPerEntity": 50,
"maxItems": 100
}
FieldTypeDefaultDescription
urlsstring[]required1–200 open.spotify.com links or spotify:type:id URIs for artists, playlists, albums or tracks
includeTracksbooleantrueFor artist/playlist/album links, also emit one row per track
maxTracksPerEntityinteger501–500. Caps per-track rows per entity — never fetches more than one page already embeds (see "Important limitations")
maxItemsinteger1001–5000. Hard cap on total rows delivered across the whole run (entity rows + track rows)

For most users, the only setting that matters is URLs.

  • A full page link: https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg
  • A locale-prefixed link: https://open.spotify.com/intl-de/playlist/37i9dQZF1DXcBWIGoYBM5M
  • A Spotify URI: spotify:album:4aawyAB9vmqN3uQ7FjRGTy

/embed/, /local/ and /download/ links (the "Embed" share option, not the normal "Share" link) are rejected — see "Access and compliance" below.

Spotify data fields

CategoryFields
Identitytype, id, uri, url, name, parent
Creditsartists, album, releaseDate
PopularitymonthlyListeners, followers, playCount, worldRank, popularity
Track detaildurationMs, explicit, isrc, position
Playlist/albumtrackCount, owner, description
MediaimageUrl
FreshnesssourceUrl, scrapedAt

Missing values are returned as null. The Actor does not invent missing data — worldRank, popularity and isrc were not found published on any page this Actor reads and are always null in practice; kept in the schema for forward-compatibility.

Spotify output example

Real output for the artist Pitbull (https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg, trimmed to one artist row and one of its five top-track rows):

{
"type": "artist",
"id": "0TnOYISbd1XYRBk9myaseg",
"uri": "spotify:artist:0TnOYISbd1XYRBk9myaseg",
"url": "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
"name": "Pitbull",
"monthlyListeners": 80263692,
"followers": 13450676,
"description": "Armando Christian Pérez, globally known as Pitbull, invites disruption on a global scale...",
"imageUrl": "https://i.scdn.co/image/ab6761610000e5ebe75db75543a89589514259b2",
"scrapedAt": "2026-09-27T00:00:00.000Z"
}
{
"type": "track",
"id": "3C0nOe05EIt1390bVABLyN",
"uri": "spotify:track:3C0nOe05EIt1390bVABLyN",
"url": "https://open.spotify.com/track/3C0nOe05EIt1390bVABLyN",
"name": "On The Floor",
"parent": "0TnOYISbd1XYRBk9myaseg",
"artists": ["Jennifer Lopez", "Pitbull"],
"album": "Love?",
"playCount": 1270815660,
"explicit": false,
"position": 1,
"sourceUrl": "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
"scrapedAt": "2026-09-27T00:00:00.000Z"
}
FieldValue
monthlyListeners / followers80,263,692 / 13,450,676
Top track / playCountOn The Floor / 1,270,815,660

Use it as a Spotify API

The Actor can be called from your own application through the Apify API. No Spotify account, login or Web API client credentials are required.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("lukehunter/spotify-scraper").call(
run_input={
"urls": ["https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg"],
"maxItems": 50,
}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["type"], row["name"], row.get("playCount"))

Use Apify schedules for recurring snapshots, and webhooks or integrations to send completed datasets into the rest of your workflow.

Pricing and cost control

This Actor uses pay per delivered result row pricing.

Current configured rate: $0.001 per result. Check the Apify Pricing tab for the latest published rate.

Results deliveredCost at $0.001/result
100$0.10
1,000$1.00
5,000$5.00

There is no charge for merely starting a run, and an entity that returns HTTP 404 (not found) is never charged. maxItems gives you a clear upper bound on the number of billable rows.

Access and compliance

  • Honest, self-identifying User-Agent — no browser, no proxy, no CAPTCHA bypass, no User-Agent rotation.
  • 1 request per 2 seconds.
  • https://open.spotify.com/robots.txt is checked in code before every request (not just by convention): this Actor's User-Agent disallows exactly /local/, /download/ and /embed/, and there is no code path anywhere in this Actor that builds a URL under any of those three paths. A pasted "Embed" link is rejected at input validation with an explanation — use the normal "Share" link instead.
  • No Spotify Web API, no OAuth client credentials, no authenticated access of any kind — only the same public pages a logged-out visitor's browser would load.
  • A block or empty/unparseable page is detected and reported per-URL; nothing is charged for it.

Important limitations

  • Play counts are not on every page. Verified against real Spotify pages: a play count is embedded for an artist's top tracks and for playlist tracks, but is genuinely absent from album track listings and from a standalone track page (https://open.spotify.com/track/<id>) — playCount is honestly null for those rows, not an unimplemented extraction.
  • A playlist/album/artist page only embeds part of its track list, and this Actor never makes an extra request to fetch more: an artist page embeds up to 5 top tracks, a playlist page embeds only its first batch of tracks (its trackCount field can be larger than the number of track rows delivered), and an album page embeds all of its tracks. maxTracksPerEntity can only trim this down, never fetch further.
  • Track duration (durationMs) is not embedded on artist top-track rows or standalone track pages — verified against real fixtures — but is present on playlist- and album-track rows.
  • isrc, worldRank and popularity were not found published on any page this Actor reads; they are always null in practice and kept in the schema for forward-compatibility only.
  • Album and track rows have no description — Spotify does not publish one on those page types (only playlists and artists do).
  • Monthly listeners, followers and play counts can change after the run. scrapedAt records the observation time.
  • This Actor does not use CAPTCHA bypass, proxy rotation, credential capture or impersonation. It identifies itself honestly and respects a 1-request-per-2-seconds pace.
  • Public catalogue data only — artist biographies, playlist descriptions and a playlist owner's public display name (often a brand, curator or Spotify itself), not private user data.
  • This is an independent tool and is not affiliated with, endorsed by, or connected to Spotify AB. Spotify is a trademark of its owner. You are responsible for using the data in accordance with applicable terms and laws.

FAQ

Do I need a Spotify developer account or API key?

No. This Actor reads the same public pages a logged-out browser sees at open.spotify.com. No Spotify account, login, or Web API client credentials are used or required.

Why is playCount null for some tracks?

Spotify's own pages only embed a play count for an artist's top tracks and for playlist tracks — verified against real captured pages. Album track listings and standalone track pages do not embed one at all, so this Actor honestly returns null there rather than guessing.

Why don't I get every track in a large playlist or artist discography?

This Actor only reads what a single page load already embeds — it makes no extra requests to paginate further. A playlist's trackCount can be larger than the number of track rows you receive; use maxTracksPerEntity to control how many of the embedded tracks are delivered.

This Actor only collects public catalogue data already shown on Spotify's own pages: names, play counts, monthly listeners, playlist contents, and similar fields. It does not bypass any login, CAPTCHA or paywall, and it honours robots.txt. It is an independent tool, not affiliated with or endorsed by Spotify AB, and you are responsible for using the collected data in accordance with Spotify's terms of service and the laws that apply to you.

How do I find a Spotify URI?

In the Spotify app or open.spotify.com, click the "..." menu on an artist, album, playlist or track, then Share → Copy Spotify URI (or Copy link to song/album/playlist/artist for the regular web link).

Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.