# Spotify Scraper (`scrapesmith/spotify-scraper`) Actor

🔥0.40/1000 results🔥Spotify scraper. 9 modes: albums, artists, tracks, playlists, podcasts, episodes, search, play counts & full discography cascade. 27+ fields per record — No login, no proxy, no setup. JSON/CSV/Excel. API, MCP server, webhook, Claude, ChatGPT, LangChain, Make, Zapier, n8n ready.

- **URL**: https://apify.com/scrapesmith/spotify-scraper.md
- **Developed by:** [Scrape Smith](https://apify.com/scrapesmith) (community)
- **Categories:** Developer tools, Automation, Other
- **Features:** Limited permissions
- **Stats:** 21 total users, 5 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🎵 Spotify Scraper — Play Counts, ISRC, Albums, Artists, Playlists, Podcasts & Search | All-In-One

The most complete and affordable Spotify data extraction tool on the Apify Store. **9 modes in one actor** — get everything you need from Spotify without juggling multiple scrapers or paying per data type.

### 🏆 Why this scraper

- 💰 **Cheapest all-in-one on the store** — albums, artists, tracks, playlists, podcasts, and search all included. No separate charges per mode.
- 🔢 **Real play counts** — exact stream numbers, not estimates. The same data the industry uses for charting and analytics.
- 🎯 **27+ fields per record** — more data points than any competitor. ISRC codes, popularity scores, audio previews, verified badges, monthly listeners, world rankings, top cities, and much more.
- 🚀 **Zero setup** — no Spotify account, no API keys, no cookies, no configuration. Paste a link and get structured data back instantly.
- 📀 **Full discography cascade** — toggle one setting and get every track from every album and single an artist has ever released, each with its own play count.
- 🎙️ **Podcasts & episodes** — search and extract show metadata, episode details, and audio previews. A feature no other Spotify actor offers.
- 📊 **Built for any scale** — works the same whether you're looking up a single track or extracting tens of thousands of playlist tracks.
- 🔍 **Powerful search** — find tracks, artists, albums, playlists, podcasts, and episodes with free-text queries. Up to 1,000 results per search with full pagination.

### 🎧 What you can extract

| Mode | What you get |
|---|---|
| 🎵 **Album** | Every track with play count, duration, ISRC, popularity, cover art, label, copyright |
| 🎤 **Artist** | Followers, monthly listeners, world rank, verified badge, top cities, top tracks, related artists, biography, social links, discography overview |
| 🎶 **Track** | Full metadata with exact play count, ISRC, popularity, audio preview URL, content rating |
| 📋 **Playlist** | Every track with play count, position, who added it and when, playlist follower count |
| 🔎 **Search** | Tracks, artists, albums, playlists, podcasts, and episodes matching any query |
| 🎙️ **Podcast/Show** | Publisher, description, episode count, languages, cover art |
| 📻 **Episode** | Duration, release date, language, audio preview, parent show info |
| ⚡ **Play counts** | Lightweight mode — just ID, name, artist, and exact stream count |
| 📀 **Artist cascade** | Artist profile + every track from their full discography with per-track play counts |

**Mixed input supported** — drop album URLs, artist links, track IDs, and playlist URIs into the same list. The actor auto-detects each one.

### 📥 Input

| Field | Description |
|---|---|
| `mode` | Choose a specific mode or leave on **Auto-detect** to let the actor figure it out from your links |
| `ids` | Spotify URLs, URIs (`spotify:track:...`), or bare IDs — one or many |
| `searchQueries` | Free-text search terms for finding music, artists, or podcasts |
| `searchTypes` | Which types to include in search results (tracks, artists, albums, playlists, shows, episodes) |
| `followDiscography` | When scraping an artist, also extract all their albums, singles, and compilations with per-track play counts |
| `maxItemsPerInput` | Limit results from a single playlist, album, or search query |
| `maxItems` | Overall cap for the entire run |

### 📤 Sample output — Track

```json
{
  "mode": "track",
  "id": "0VjIjW4GlUZAMYd2vXMi3b",
  "url": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b",
  "name": "Blinding Lights",
  "primaryArtist": "The Weeknd",
  "albumName": "After Hours",
  "playcount": 5498339860,
  "popularity": 92,
  "isrc": "USUG11904206",
  "durationFormatted": "3:20",
  "previewUrl": "https://p.scdn.co/mp3-preview/...",
  "releaseDate": "2020-03-20T00:00:00Z",
  "isExplicit": false,
  "trackNumber": 9,
  "coverUrl": "https://i.scdn.co/image/..."
}
```

### 📤 Sample output — Artist

```json
{
  "mode": "artist",
  "name": "The Weeknd",
  "verified": true,
  "popularity": 95,
  "followers": 125056182,
  "monthlyListeners": 113605709,
  "worldRank": 3,
  "topCities": [{"city": "Mexico City", "country": "MX", "listeners": 1633973}],
  "topTracks": [{"name": "Blinding Lights", "playcount": 5498339860}],
  "relatedArtists": [{"name": "Doja Cat"}, {"name": "Rihanna"}],
  "externalLinks": [{"name": "INSTAGRAM", "url": "https://instagram.com/theweeknd"}],
  "albumsTotal": 14,
  "singlesTotal": 65
}
```

### 💡 Use cases

- 🎵 **Music industry analytics & A\&R** — monitor play-count growth, spot breakout tracks, evaluate catalog performance
- 📋 **Playlist intelligence** — audit editorial playlists, track placement trends, measure playlist reach
- 🎤 **Artist monitoring** — followers, listeners, world rank, discography expansion over time
- 🏷️ **Rights management & catalog matching** — use ISRC codes to identify recordings across platforms and distributors
- 🎙️ **Podcast research** — discover shows, track episode output, monitor publisher activity
- 📊 **Dashboards & data feeds** — clean structured data ready for BI tools, data warehouses, or AI workflows
- 🔍 **Market research** — search the entire Spotify catalog with full metadata for competitive analysis

### 🔗 API, MCP server & integrations

This actor plugs into any workflow with zero custom code:

- 🌐 **REST API & webhooks** — trigger runs, poll results, or get notified on completion
- 🤖 **MCP server** — use as a tool from **Claude**, **ChatGPT**, **LangChain**, or any MCP-compatible AI agent
- ⚙️ **No-code platforms** — works with **Make** (Integromat), **Zapier**, **n8n**, and other automation tools
- 📁 **Export formats** — JSON, CSV, Excel — download or stream via API
- 🔄 **Scheduling** — set up recurring runs to track trends over time

### ❓ FAQ

**Do I need a Spotify account or API key?**
No — everything uses public data. No login, no setup, no credentials.

**Does it work for any track, album, or artist?**
Yes — from global #1 hits to niche independent releases, user-created playlists, and small podcasts.

**How current are the play counts?**
Pulled fresh on every run — the same numbers Spotify displays at that moment.

**Can I get play counts for an entire album or playlist?**
Yes — album mode and playlist mode both return per-track play counts automatically.

**Can I get an artist's full catalog with play counts?**
Yes — enable `followDiscography` and the actor fetches every album, single, and compilation with per-track stream counts.

**What about podcasts?**
Search mode finds shows and episodes. You can also scrape show and episode details directly by URL.

**Can I search instead of pasting links?**
Absolutely — search mode supports free-text queries across tracks, artists, albums, playlists, podcasts, and episodes with pagination up to 1,000 results per query.

**What format is the output?**
Structured JSON with zero null values. Export as JSON, CSV, or Excel from the Apify console or API.

**Is there a free tier?**
Yes — every user gets free results to try the actor before committing to a paid plan.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. Leave on Auto-detect to infer the type from each URL/URI in Spotify links/IDs.

## `ids` (type: `array`):

One or more Spotify URLs (open.spotify.com/...), URIs (spotify:track:...), or bare IDs — albums, artists, tracks or playlists.

## `searchQueries` (type: `array`):

Free-text search terms (song, artist or playlist names). Used when you want search results instead of specific links.

## `searchTypes` (type: `array`):

Which entity types to include in search results.

## `followDiscography` (type: `boolean`):

When scraping an artist, also scrape all their albums, singles and compilations to get every track with play counts.

## `maxItemsPerInput` (type: `integer`):

Cap on tracks pulled from a single playlist, album, search query, or artist cascade.

## `maxItems` (type: `integer`):

Overall cap on results across all inputs for this run. Leave blank for no extra cap (plan limits still apply).

## `proxyConfiguration` (type: `object`):

Optional proxy. Not required — the actor works without a proxy.

## Actor input object example

```json
{
  "mode": "auto",
  "ids": [
    "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"
  ],
  "searchTypes": [
    "track",
    "artist",
    "album",
    "playlist"
  ],
  "followDiscography": false,
  "maxItemsPerInput": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "ids": [
        "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesmith/spotify-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "ids": ["https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesmith/spotify-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "ids": [
    "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"
  ]
}' |
apify call scrapesmith/spotify-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesmith/spotify-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FYLoNCaqd1dgdZudW/builds/ESQU6C4UWI1CZUmCl/openapi.json
