All scrapers

Content

Spotify Scraper

open.spotify.com

99.9% Success rate
1.1s Avg response
Bot detection + rate limiting Protection
1,286 calls Measured over

Spotify is served through a dedicated plugin endpoint rather than the generic page fetch. It reads the same data Spotify's own web player loads, so it returns numbers the official Web API leaves out, such as play counts and monthly listeners. Give it an artist, album, track or playlist - an open.spotify.com URL, a Spotify URI or a bare id with type - and it returns it already parsed. An artist: followers, monthly listeners, world rank, top cities with their listener counts, biography, verified mark, social links and images, top tracks with play counts, the discography grouped into popular releases, albums, singles and compilations, related artists, the releases it appears on and the playlists that feature it; discography=true adds the full release list, paged. An album: type, release date, label, copyright, artists, cover and its tracks with play counts. A track: play count, duration, explicit flag, album and every credited artist. A playlist: name, description, followers, owner, cover and its tracks with play counts, the date each was added, tempo and key. With type=search and a query it returns matching tracks, artists, albums or playlists. Lists page with offset and max_results, up to 1,000 album tracks, 2,000 playlist tracks or 100 search results per call. No Spotify account, developer app or OAuth token is involved.

What you can extract

  • Artist followers, monthly listeners, world rank and top cities with their listener counts
  • Biography, verified mark, social links and artist images
  • Top tracks with play counts, discography groups (popular releases, albums, singles, compilations) and the full release list
  • Related artists, releases the artist appears on and playlists that feature the artist
  • Album type, release date, label, copyright, artists, cover and tracks with play counts
  • Track play count, duration, explicit flag, album and every credited artist
  • Playlist name, description, followers, owner, cover and tracks with play counts, date added, tempo and key
  • Search for tracks, artists, albums or playlists, up to 100 results per query
  • Input as an open.spotify.com URL, a Spotify URI or a bare id; lists page with offset and max_results

Dedicated endpoints

/music/spotify

Spotify artists, albums, tracks, playlists and search

type=artist: artist (followers, monthlyListeners, worldRank, topCities, biography, externalLinks, images, verified), topTracks with playcount, discography groups with totals, relatedArtists, appearsOn, and featuredOn and discoveredOn playlists; discography=true adds the full releases list. type=album: album (type, release date, label, copyright, artists, cover) and tracks with playcount. type=track: track with playcount, duration, explicit flag, album and every credited artist. type=playlist: playlist (name, description, followers, owner, cover, totalTracks) and tracks with playcount, addedAt, bpm and key. type=search with query and search_type (tracks, artists, albums or playlists): results. id takes an open.spotify.com URL, a Spotify URI or a bare id (then set type). Lists page with offset and max_results (album tracks up to 1,000, playlist tracks up to 2,000, search up to 100, releases up to 1,000) and answer hasMore and nextOffset.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/music/spotify?type=artist&id=4tZwfgrHOc3mvqYlEYSvVi"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/music/spotify",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"type": "artist", "id": "4tZwfgrHOc3mvqYlEYSvVi"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const artist = await su.spotifyArtist('4tZwfgrHOc3mvqYlEYSvVi');
const results = await su.spotifySearch('daft punk', { searchType: 'tracks' });
console.log(artist);
console.log(results);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "type": "artist",
  "artist": {
    "id": "4tZwfgrHOc3mvqYlEYSvVi",
    "name": "Daft Punk",
    "uri": "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi",
    "url": "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi",
    "verified": true,
    "followers": 11826317,
    "monthlyListeners": 28475892,
    "worldRank": 252,
    "topCities": [
      {
        "city": "Mexico City",
        "country": "MX",
        "region": "CMX",
        "listeners": 752913
      },
      {
        "city": "London",
        "country": "GB",
        "region": "ENG",
        "listeners": 419944
      },
      {
        "city": "Santiago",
        "country": "CL",
        "region": "RM",
        "listeners": 384724
      }
    ],
    "biography": "As they evolved from '90s French house pioneers to 2000s dance tastemakers to mainstream heroes in the 2010s, Daft Punk remained one of dance music's most iconic acts. With their early singles and 199...",
    "externalLinks": [
      {
        "name": "facebook",
        "url": "https://facebook.com/daftpunk/?locale=fr_FR"
      },
      {
        "name": "instagram",
        "url": "https://instagram.com/daftpunk/"
      }
    ],
    "image": "https://i.scdn.co/image/ab6761610000e5ebd3aa7cc0e419b6c459b08e8e"
  },
  "topTracks": [
    {
      "id": "0DiWol3AO6WpXZgp0goxAV",
      "name": "One More Time",
      "url": "https://open.spotify.com/track/0DiWol3AO6WpXZgp0goxAV",
      "playcount": 982262281,
      "durationMs": 320357,
      "explicit": false,
      "playable": true,
      "artists": [
        {
          "id": "4tZwfgrHOc3mvqYlEYSvVi",
          "name": "Daft Punk",
          "uri": "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi",
          "url": "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
        }
      ],
      "album": {
        "id": "2noRn2Aes5aoNVsU6iWThc",
        "url": "https://open.spotify.com/album/2noRn2Aes5aoNVsU6iWThc"
      }
    },
    {
      "id": "2Foc5Q5nqNiosCNqttzHof",
      "name": "Get Lucky (Radio Edit) [feat. Pharrell Williams and Nile Rodgers]",
      "url": "https://open.spotify.com/track/2Foc5Q5nqNiosCNqttzHof",
      "playcount": 1454306499,
      "durationMs": 247632,
      "explicit": false,
      "playable": true,
      "artists": [
        {
          "id": "4tZwfgrHOc3mvqYlEYSvVi",
          "name": "Daft Punk",
          "uri": "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi",
          "url": "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
        }
      ],
      "album": {
        "id": "2ePFIvZKMe8zefATp9ofFA",
        "url": "https://open.spotify.com/album/2ePFIvZKMe8zefATp9ofFA"
      }
    }
  ],
  "discography": {
    "popularReleases": [
      {
        "id": "2noRn2Aes5aoNVsU6iWThc",
        "name": "Discovery",
        "url": "https://open.spotify.com/album/2noRn2Aes5aoNVsU6iWThc",
        "albumType": "album",
        "releaseDate": "2001-03-12",
        "releaseDatePrecision": "day",
        "totalTracks": 14,
        "label": "Daft Life Ltd./ADA France",
        "image": "https://i.scdn.co/image/ab67616d0000b2731e81bff9807a9e629fce5ade",
        "artists": null,
        "playable": true
      }
    ],
    "albums": {
      "totalCount": 15,
      "items": [
        {
          "id": "5AFf68gtvNgGLZarsyEEL8",
          "name": "Random Access Memories (Drumless Edition)",
          "url": "https://open.spotify.com/album/5AFf68gtvNgGLZarsyEEL8",
          "albumType": "album",
          "releaseDate": "2023-11-17",
          "releaseDatePrecision": "day",
          "totalTracks": 13,
          "label": "Legacy Recordings",
          "image": "https://i.scdn.co/image/ab67616d0000b273d1ec82bc061a90006584aa9b",
          "playable": true
        }
      ]
    },
    "singles": {
      "totalCount": 21
    },
    "compilations": {
      "totalCount": 1
    }
  },
  "relatedArtists": [
    {
      "id": "3yDIp0kaq9EFKe07X1X2rz",
      "name": "Nile Rodgers",
      "url": "https://open.spotify.com/artist/3yDIp0kaq9EFKe07X1X2rz"
    },
    {
      "id": "1rAv1GhTQ2rmG94p9lU3rB",
      "name": "Julian Casablancas",
      "url": "https://open.spotify.com/artist/1rAv1GhTQ2rmG94p9lU3rB"
    }
  ],
  "pagesFetched": 1
}

Read the API docs

Frequently asked questions

Is it legal to scrape Spotify?

Collecting public Spotify catalog data such as play counts, follower numbers and track lists is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. Playlists made by users carry their owner's name, which can be personal data, so follow the privacy rules that apply to you. ScrapeUnblocker returns what Spotify shows without a login; what you collect and how you use it is your responsibility.

How do I scrape Spotify without getting blocked?

The plugin does not render Spotify's web player: it asks Spotify's own web gateway for the data with an anonymous token, browser-free over ScrapeUnblocker's ISP exits, the same reads the web player makes. In ScrapeUnblocker's benchmark it returned data on 99.9% of 1,286 calls, each a different input (330 artists, 270 albums, 330 tracks, 180 playlists and 176 searches, with ids taken from 71 genre and country searches), about 1.1s per call; the one miss was a search for an obscure term that Spotify returned no data for.

Does it return Spotify play counts and monthly listeners?

Yes. Play counts come back for every track (top tracks, album and playlist tracks and single-track lookups), and an artist comes with its monthly listeners, followers, world rank and top cities with their listener counts. The official Spotify Web API does not expose these numbers; the plugin reads them from the public data Spotify's web player shows without a login, so no Spotify account, developer app or OAuth token is needed.

How many Spotify results can I get per call?

Search returns about 100 results per query: up to 100 (max_results, default 20) of tracks, artists, albums or playlists, picked with search_type. Album tracks come 100 per page up to 1,000 per call, playlist tracks 100 per page up to 2,000, and an artist's full release list (discography=true) 50 per page up to 1,000. Every list answers hasMore and nextOffset; pass nextOffset as offset to continue.

Does the country matter for Spotify data?

Spotify's market follows the country the request leaves from, which can change whether a track is playable and the order of search results; play counts are the same everywhere. Unless proxy_country is set (ISO-2, such as DE or GB), the market follows whichever exit the call goes out through, so set proxy_country when you need consistent results in one market. A private playlist reads as not found and answers 404.

How much does it cost to scrape Spotify?

Each page fetched from Spotify is billed as one request: an artist, a track, an album or playlist with its first 100 tracks, or a search of up to 50 results is 1 request, and longer lists cost one more per page, with pagesFetched showing the exact number. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Spotify and other names and marks of open.spotify.com belong to their owner and are used here only to identify the website this API works with. ScrapeUnblocker is an independent service, not affiliated with, endorsed by or sponsored by the owner of open.spotify.com.

Start scraping this site today

Free tier included. No credit card required to test it.