Spotify Scraper - Artists, Playlists & Podcasts avatar

Spotify Scraper - Artists, Playlists & Podcasts

Pricing

from $2.60 / 1,000 item scrapeds

Go to Apify Store
Spotify Scraper - Artists, Playlists & Podcasts

Spotify Scraper - Artists, Playlists & Podcasts

Scrape Spotify artists, tracks, albums, playlists, and podcasts from URLs or search. Get monthly listeners, play counts, discography, and change monitoring — no API key or login.

Pricing

from $2.60 / 1,000 item scrapeds

Rating

0.0

(0)

Developer

Daniel Valev

Daniel Valev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

What does Spotify Scraper do?

Spotify Scraper extracts public catalog data from Spotify — artists, albums, tracks, playlists, podcast shows, and episodes — from URLs or keyword search. It returns structured JSON with monthly listeners, play counts, followers, world rank, biographies, discography, and playlist tracks beyond the usual 100-item cap.

No Spotify API key, no login, and no sp_dc cookies. Anonymous web-player GraphQL over HTTP; Playwright starts only if auth or persisted-query hashes need a one-shot browser bootstrap.

Use it as a Spotify API alternative for metrics the official Web API does not expose (monthly listeners, world rank, stream play counts).

Why scrape Spotify?

Spotify is the largest music streaming catalog many teams track for:

  • Music analytics — monthly listeners, play counts, follower trends
  • Playlist research — editorial and user playlists past 100 tracks
  • Artist monitoring — world rank, top tracks, related artists, scheduled deltas
  • Podcast discovery — search shows and episodes by keyword (not URL-only)
  • Product / RAG datasets — clean JSON for apps, agents, and MCP workflows

Apify schedules, webhooks, dataset exports (JSON/CSV/Excel), the REST API, and MCP make recurring runs straightforward.

What data can Spotify Scraper extract?

TypeKey fields
ArtistmonthlyListeners, followers, worldRank, topCities, biography, top tracks with play counts, related artists, discography counts
Albumtrack list with per-track play counts, label, release date, totalPlayCount
TrackplayCount, artists, album art, duration, preview URL when Spotify exposes one
Playlistowner, followers/saves, description, paginated tracks up to maxPlaylistTracks (use 0 for all)
Showpublisher, description, topics, episodes (up to maxEpisodesPerShow)
Episodeparent show link, release date, duration, explicit/playable/video flags, preview URL
Search resulttyped hit (resultType) from tracks / artists / albums / playlists / shows / episodes

Optional monitoringKey writes snapshots to a named key-value store (spotify-monitor-<key>) and adds previousSnapshotAt + deltas on later runs — ideal for Schedules.

How to scrape Spotify

  1. Open Spotify Scraper in Apify Console.
  2. Choose Mode: urls or search.
  3. URLs — paste open.spotify.com links (incl. /intl-xx/), spotify:type:id URIs, or spotify.link short links.
  4. Search — add searchTerms, set searchType (tracks, artists, albums, playlists, shows, episodes), and maxResults.
  5. Optional: enable includeDiscography, raise maxPlaylistTracks, or set monitoringKey for change tracking.
  6. Keep Apify Proxy enabled (automatic group; the Actor can escalate to RESIDENTIAL on blocks).
  7. Click Start, then download the Dataset (JSON, CSV, Excel, …).

URL mode example

{
"mode": "urls",
"urls": [
"https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02",
"https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
"spotify:track:5XeFesFbtLpXzIVDNQP22n",
"https://open.spotify.com/show/2MAi0BvDc6GTFvKFPXnkCL"
],
"maxPlaylistTracks": 500
}

Search mode example (podcasts)

{
"mode": "search",
"searchTerms": ["true crime", "lex fridman"],
"searchType": "shows",
"maxResults": 20
}

Monitor artist metrics over time

{
"mode": "urls",
"urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"],
"monitoringKey": "taylor-weekly"
}

Schedule the same input daily. Later runs attach deltas (e.g. monthlyListeners, followers, playlist track adds/removes).

Full discography (charged per album)

{
"mode": "urls",
"urls": ["https://open.spotify.com/artist/7Ln80lUS6He07XvHI8qqHH"],
"includeDiscography": true,
"discographyTypes": ["albums"]
}

Each album record is a separate billed item. Prefer a narrow discographyTypes list for large catalogs.

How much does it cost to scrape Spotify?

Pay-per-event pricing. You pay for events, not a separate compute invoice for this Actor’s PPE setup.

EventFree planDescription
Actor start (apify-actor-start)$0.00005Synthetic start (memory-scaled); keeps startup compute competitive
Item scraped (item)$0.004One top-level dataset record

Volume discounts (USD per item):

PlanPer itemPer 1,000 items
Free$0.0040$4.00
Bronze$0.0035$3.50
Silver$0.0030$3.00
Gold / Platinum / Diamond$0.0026$2.60

Not charged: nested arrays (tracks inside an album, cities on an artist), failed URLs, empty search shelves.

Cost examples (Free tier, ignore tiny start fee)

ScenarioItems≈ cost
Health-check default (5 URLs)5~$0.02
Search 20 shows20~$0.08
1 artist + discography of 8 albums9~$0.036
Playlist capped at 120 tracks (1 record)1~$0.004

Set Maximum charge per run in Console if you want a hard stop.

Input

See the Input tab for the full schema. Important fields:

FieldNotes
modeurls or search
urlsArtist, album, track, playlist, show, episode — open.spotify, URI, or spotify.link
searchTerms / searchType / maxResultsSearch shelf; shows & episodes supported
enrichSearchResultsFetch full details per hit (each hit still + each enrichment = charged items)
maxPlaylistTracksCap playlist pagination; 0 = all
includeDiscography / discographyTypesExpand artist releases as album items
maxEpisodesPerShowEpisodes attached on show records; 0 skips listing
monitoringKeyNamed KV snapshots + deltas
proxyConfigurationPrefer Apify Proxy (automatic)

Empty input runs a deterministic 5-URL health check (artist, track, album, show, episode).

Output

Results go to the default dataset. Download JSON, CSV, Excel, HTML, XML, or RSS, or read via the dataset API / MCP.

Artist example

{
"type": "artist",
"id": "06HL4z0CvFAxyc27GXpf02",
"uri": "spotify:artist:06HL4z0CvFAxyc27GXpf02",
"url": "https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02",
"name": "Taylor Swift",
"monthlyListeners": 102570645,
"followers": 140000000,
"worldRank": 1,
"topCities": [{ "city": "Jakarta", "country": "ID", "listeners": 1200000 }],
"topTracks": [{ "id": "1BxfuPKGuaTgP7aM0Bbdwr", "name": "Cruel Summer", "playCount": 3600000000 }],
"scrapedAt": "2026-09-28T09:16:00.000Z",
"dataSource": "graphql",
"isPartial": false
}

Track example

{
"type": "track",
"id": "5XeFesFbtLpXzIVDNQP22n",
"name": "I Wanna Be Yours",
"playCount": 2500000000,
"durationMs": 183066,
"durationFormatted": "3:03",
"artists": [{ "id": "7Ln80lUS6He07XvHI8qqHH", "name": "Arctic Monkeys" }],
"url": "https://open.spotify.com/track/5XeFesFbtLpXzIVDNQP22n",
"scrapedAt": "2026-09-28T09:16:00.000Z",
"dataSource": "graphql"
}

Search / monitoring notes

  • Search hits use type: "searchResult" with resultType and searchTerm.
  • With monitoringKey, numeric entities may include previousSnapshotAt and deltas.

Each run also writes RUN_STATS to the default key-value store (authPath, request/byte counts, failures) — not billed.

Tips

  • Prefer URL mode when you need monthly listeners or play counts; plain search hits are lighter metadata unless enrichSearchResults is on.
  • Cap maxPlaylistTracks and discographyTypes to control cost on huge catalogs.
  • Use monitoringKey + Schedule instead of downloading full history every day — deltas are cheaper to reason about.
  • Mix artists, playlists, and podcast URLs in one run when useful.

Limitations

  • Public anonymous data only — no private playlists, no user library, no login cookies, no full audio download, no lyrics.
  • Market-restricted or removed catalog entries may be empty or partial (isPartial / embed fallback).
  • Discography can emit many album items (each charged).
  • Official Spotify Web API OAuth apps are out of scope; this Actor targets public web-player metrics.

FAQ

Do I need a Spotify developer app or API key?

No. The Actor uses anonymous web-player access — the same class of public metadata a logged-out browser can see.

Can I get Spotify monthly listeners and play counts?

Yes for artists (monthly listeners, world rank) and for tracks/albums when scraped in URL mode (and on discography albums). Search-only hits may omit play counts unless you enrich them.

Can I scrape Spotify podcasts by keyword?

Yes. Set mode: "search" and searchType to shows or episodes. Many scrapers only accept show/episode URLs.

How do I scrape a playlist with more than 100 tracks?

Set maxPlaylistTracks above 100 (or 0 for all). The Actor paginates playlist contents instead of stopping at the embed-sized window.

How do I track artist growth over time?

Set monitoringKey, schedule the run, and read deltas / previousSnapshotAt on subsequent outputs. Snapshots live in spotify-monitor-<key> on your account.

The Actor only reads public Spotify pages/APIs available without login. You are responsible for complying with Spotify’s Terms, applicable law (including GDPR if personal data appears in public bios or names), and for having a lawful basis for your use case. Do not use it to download copyrighted audio.

The run failed or returned partial data

Check RUN_STATS.failures, try Apify Proxy / RESIDENTIAL, and confirm the URL is public in a normal browser. Open an issue on the Actor’s Issues tab with the run ID if it persists.

Integrations, API, and MCP

  • Schedules — daily artist or playlist monitors
  • Webhooks / Zapier / Make / Sheets — push new dataset items downstream
  • Apify API — POST runs with the same JSON as Console
  • MCP — connect Apify MCP and allow valev-lab/spotify-scraper for agent workflows

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('valev-lab/spotify-scraper').call({
mode: 'urls',
urls: ['https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]?.name, items[0]?.monthlyListeners);

Python:

from apify_client import ApifyClient
client = ApifyClient()
run = client.actor("valev-lab/spotify-scraper").call(run_input={
"mode": "search",
"searchTerms": ["arctic monkeys"],
"searchType": "artists",
"maxResults": 5,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["type"], item.get("name"))

Development (repository)

npm install
npm run build
npm test
cd actors/spotify-scraper && apify validate-schema && apify run --purge < /dev/null