# Spotify Monthly Listeners Scraper (`confidential_gnat/spotify-monthly-listeners-scraper`) Actor

Scrapes an artist's monthly listeners, followers, top cities, discography, top tracks, and related artists from Spotify.

- **URL**: https://apify.com/confidential_gnat/spotify-monthly-listeners-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Monthly Listeners Scraper — Artist Stats, Top Tracks & Discography

**Scrape monthly listeners, followers and full artist profiles from Spotify (spotify.com)** for any artist. Each row returns monthly listeners, followers, top listener cities, discography, top tracks, related artists, upcoming events and social links, exported as **JSON, CSV or Excel** and callable as an **API**. Paste an artist URL, press Start.

**Target website:** [spotify.com](https://open.spotify.com)

### ✨ Features of this Spotify artist and monthly listeners scraper

- **Artist stats extraction** — monthly listeners, followers, verification status and top listener cities
- **Discography extraction** — albums, singles and EPs with release dates, labels, track counts and cover art
- **Top tracks extraction** — an artist's most popular tracks with play counts and duration
- **Related content extraction** — related artists, playlists the artist was discovered on, and releases they appear on
- **Events extraction** — upcoming concerts and tour dates
- **Social links extraction** — Instagram, Facebook, Twitter and other links listed on the artist profile
- **Proxy support** — optional proxy configuration if your IP gets blocked
- **No browser required** — plain HTTP requests make runs fast and cheap

### 🚀 How to scrape Spotify monthly listeners in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Paste one or more Spotify artist URLs into the **Input** field.
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing

This actor uses **pay-per-result** billing: you pay for each artist profile returned.

- New Apify accounts include **$5 of free monthly credit**.
- It costs significantly less to run than browser-based scrapers.
- Proxies are disabled by default, which keeps runs cheapest.

### 🔧 Input configuration

| Field                | Type   | Required | Default                      | Description                                                                                       |
| -------------------- | ------ | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------- |
| `startUrls`          | array  | ✅       | 11 example artists           | Spotify artist page URLs to scrape, e.g. `https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv` |
| `proxyConfiguration` | object | —        | `{ "useApifyProxy": false }` | Optional proxy settings. Enable this if you encounter blocked requests                            |

**Supported URL types:**

- Spotify artist pages: `https://open.spotify.com/artist/<artistId>`

One result row is returned per artist URL.

### 📦 Spotify monthly listeners scraper output data

The output is a dataset of one record per artist with these fields: `artist_name`, `artist_id`, `followers`, `monthlyListeners`, `verified`, `topCities`, `biography`, `related`, `releases`, `topTracks`, `discoveredOn`, `appearsOn`, `events`, `avatarImage`, `headerImage`, `gallery`, `timestamp`, plus one field per social link (for example `INSTAGRAM`, `FACEBOOK`, `TWITTER`). The dataset has 1 view, **Overview**, a compact table of artist name, artist ID, followers, monthly listeners and verification status.

**Sample output:**

```json
{
    "artist_name": "KAVARI",
    "artist_id": "2pvfGvbL4mouaDY9ZSwUmv",
    "followers": 20625,
    "monthlyListeners": 38745,
    "verified": true,
    "topCities": [
        {
            "city": "London",
            "country": "GB",
            "numberOfListeners": 894,
            "region": "ENG"
        }
    ],
    "biography": null,
    "related": [
        {
            "id": "5gSUOooHkVLQUw6m8HpzA8",
            "name": "Blood of Aza",
            "image": "https://i.scdn.co/image/ab6761610000e5eb8626ab8f999252f365b4a2f2"
        }
    ],
    "releases": [
        {
            "id": "0mfWj0nOUQFTGfa7IBShfq",
            "name": "Noise (KAVARI Remix)",
            "type": "SINGLE",
            "label": "Pixel Grip LLC",
            "date": "2026-07-10",
            "url": "https://open.spotify.com/album/0mfWj0nOUQFTGfa7IBShfq?si=IyMl8m29RomnTxhDEBmE3A",
            "tracks": 1,
            "image": "https://i.scdn.co/image/ab67616d00001e021fc8bbea71874f415743e34b",
            "copyright": "2026 Pixel Grip LLC"
        }
    ],
    "topTracks": [
        {
            "id": "1iqtjCzeZzCPlDgWYV6qE1",
            "name": "Noise (KAVARI Remix)",
            "playcount": 12280,
            "duration": 158944,
            "artists": "Pixel Grip;KAVARI",
            "album": "0mfWj0nOUQFTGfa7IBShfq",
            "image": "https://i.scdn.co/image/ab67616d00001e021fc8bbea71874f415743e34b",
            "contentRating": "NONE"
        }
    ],
    "discoveredOn": [
        {
            "id": "37i9dQZF1DZ06evO1ntMk0",
            "name": "This Is KAVARI",
            "description": "This is KAVARI. The essential tracks, all in one playlist.",
            "owner": "Spotify",
            "url": "https://open.spotify.com/playlist/37i9dQZF1DZ06evO1ntMk0",
            "image": "https://pickasso.spotifycdn.com/image/ab67c0de0000deef/dt/v1/img/thisisv3/2pvfGvbL4mouaDY9ZSwUmv/de"
        }
    ],
    "appearsOn": [
        {
            "id": "6tQ1vjB7ZXy8sKkGEtHs1X",
            "name": "CAN YOU SEE ME?",
            "artist_name": "Rezz",
            "artist_id": "4aKdmOXdUKX07HVd3sGgzw",
            "url": "https://open.spotify.com/album/6tQ1vjB7ZXy8sKkGEtHs1X?si=n7Zag4toTfey5ZQVjy536w",
            "type": "ALBUM",
            "image": "https://i.scdn.co/image/ab67616d00001e024e6e86bf9f564c31dcb7e89c"
        }
    ],
    "events": [
        {
            "id": ["2CexOBQpl3o9ka3mIXby3j"],
            "name": "Baron Von Trax, Upper90, KAVARI",
            "url": "https://open.spotify.com/concert/2CexOBQpl3o9ka3mIXby3j",
            "date": "2026-07-25T23:00+01:00",
            "venue": "Wigwam",
            "location": "Dublin 1"
        }
    ],
    "avatarImage": "https://i.scdn.co/image/ab6761610000e5eb14126a85d0be8c80b4e46beb",
    "headerImage": "https://image-cdn-fa.spotifycdn.com/image/ab6761860000019437bd39502009a479d56730e4",
    "gallery": ["https://i.scdn.co/image/ab6761670000ecd409c624bf48fdfcc5324b20e7"],
    "timestamp": "2026-07-17T16:12:55.785Z",
    "FACEBOOK": "https://facebook.com/KAVARIMUSIC",
    "INSTAGRAM": "https://instagram.com/kavari_____",
    "TWITTER": "https://twitter.com/kavari_"
}
```

### 🐍 How to scrape Spotify monthly listeners with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("<username>/spotify-monthly-listeners-scraper").call(run_input={
    "startUrls": [{"url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv"}],
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["artist_name"], item["monthlyListeners"])
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('<username>/spotify-monthly-listeners-scraper').call({
    startUrls: [{ url: 'https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv' }],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/<username>~spotify-monthly-listeners-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv"}]}'
```

### 💡 What you can use Spotify artist data for

- Tracking an artist's monthly listener growth over time
- Comparing follower counts and popularity across a roster of artists
- Monitoring new releases and upcoming tour dates
- Building fan, label and A\&R dashboards with top track and discography data
- Researching related artists and playlist placements for marketing and playlist pitching

Typical users are record labels, music managers, booking agents, playlist curators, music journalists and market researchers in the music and entertainment industry.

### ⚠️ Limitations & known issues

- **Public artist pages only** — only publicly visible artist data is scraped; content behind a Spotify login is not available.
- **Artist URLs only** — track, album, playlist and user URLs are not supported.
- **Possible IP blocking** — Spotify may block some IP ranges, especially datacenter ones. If runs fail with an access token error, enable the proxy configuration.
- **Snapshot data** — monthly listeners are a point-in-time number. Schedule runs to build a history.

### ❓ Frequently asked questions

#### Can I scrape Spotify legally?

The actor only collects data that is already publicly visible on open.spotify.com — no login, paywall, or private content is accessed. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn*), but you are responsible for complying with Spotify's Terms of Service and applicable laws such as GDPR and CCPA.

#### How do I get an artist's monthly listeners from Spotify?

Paste the artist's Spotify URL into the actor and run it. The `monthlyListeners` field in each result holds the current number, alongside followers and top cities.

#### How many artists can I scrape in one run?

There is no fixed cap: you get one result for every artist URL you provide. Add as many URLs as you need.

#### Do I need a proxy to scrape Spotify?

No, it works without a proxy by default. If Spotify blocks your IP, turn on the Proxy configuration field and choose Apify residential or datacenter proxies.

#### How do I scrape Spotify artist data with Python?

Use the Apify client shown above: call the actor with a list of artist URLs and iterate over the dataset items.

#### Can I track monthly listeners over time with a schedule?

Yes. Use Apify Schedules to run the actor daily or weekly with the same artist URLs, then compare the `monthlyListeners` and `timestamp` fields across runs.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

### 🔗 Other actors you may find useful — social media scrapers

| Actor | Description |
| ----- | ----------- |
| [▶️ YouTube Channel Info and Stats Scraper](https://apify.com/confidential_gnat/youtube-channel-info-and-stats) | Scrapes channel info and statistics from YouTube channel About pages, including subscribers, total views, video count, joined date and country. |
| [🎬 YouTube Video List Scraper](https://apify.com/confidential_gnat/youtube-video-list-scraper) | Scrapes video listings from YouTube channels and playlists, with optional per-video detail enrichment and cross-run deduplication. |
| [✍️ Substack Scraper](https://apify.com/confidential_gnat/substack-newsletter-scraper) | Scrapes Substack posts by keyword, publication or post URL: title, author, date, full text, tags, reactions, comments and AI summaries. |
| [🧠 Astral Codex Ten (ACX) Scraper](https://apify.com/confidential_gnat/astralcodexten-scraper) | Scrapes posts and comments from the Astral Codex Ten Substack newsletter. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://apify.com/confidential_gnat/spotify-monthly-listeners-scraper/issues/open) or reach out via the [Apify Community Forum](https://community.apify.com/).

You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

## `startUrls` (type: `array`):

Spotify artist page URLs to scrape, e.g. https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv

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

Optional proxy configuration. Enable this if you encounter blocked requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv"
    },
    {
      "url": "https://open.spotify.com/artist/4aKdmOXdUKX07HVd3sGgzw"
    },
    {
      "url": "https://open.spotify.com/artist/17Vw9uuOYB7XYjPt0LNFN0"
    },
    {
      "url": "https://open.spotify.com/artist/4lyCoxLN0aW7nJy5rec0tG"
    },
    {
      "url": "https://open.spotify.com/artist/3MekbRujJg5VZThubOlrkR"
    },
    {
      "url": "https://open.spotify.com/artist/2pGARcnqDa3WoicxemVeqU"
    },
    {
      "url": "https://open.spotify.com/artist/5RMLpCv3ic2KtGnqJ7eMG4"
    },
    {
      "url": "https://open.spotify.com/artist/34ESFFvfP5f465MC2V6E64"
    },
    {
      "url": "https://open.spotify.com/artist/7JdvhVWzehfN2WJwBOcbDl"
    },
    {
      "url": "https://open.spotify.com/artist/267gjhlmcoscSuzUHiKqX8"
    },
    {
      "url": "https://open.spotify.com/artist/1hVeyfiKrAOsS0ZwZg0tWm"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv"
        },
        {
            "url": "https://open.spotify.com/artist/4aKdmOXdUKX07HVd3sGgzw"
        },
        {
            "url": "https://open.spotify.com/artist/17Vw9uuOYB7XYjPt0LNFN0"
        },
        {
            "url": "https://open.spotify.com/artist/4lyCoxLN0aW7nJy5rec0tG"
        },
        {
            "url": "https://open.spotify.com/artist/3MekbRujJg5VZThubOlrkR"
        },
        {
            "url": "https://open.spotify.com/artist/2pGARcnqDa3WoicxemVeqU"
        },
        {
            "url": "https://open.spotify.com/artist/5RMLpCv3ic2KtGnqJ7eMG4"
        },
        {
            "url": "https://open.spotify.com/artist/34ESFFvfP5f465MC2V6E64"
        },
        {
            "url": "https://open.spotify.com/artist/7JdvhVWzehfN2WJwBOcbDl"
        },
        {
            "url": "https://open.spotify.com/artist/267gjhlmcoscSuzUHiKqX8"
        },
        {
            "url": "https://open.spotify.com/artist/1hVeyfiKrAOsS0ZwZg0tWm"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/spotify-monthly-listeners-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 = {
    "startUrls": [
        { "url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv" },
        { "url": "https://open.spotify.com/artist/4aKdmOXdUKX07HVd3sGgzw" },
        { "url": "https://open.spotify.com/artist/17Vw9uuOYB7XYjPt0LNFN0" },
        { "url": "https://open.spotify.com/artist/4lyCoxLN0aW7nJy5rec0tG" },
        { "url": "https://open.spotify.com/artist/3MekbRujJg5VZThubOlrkR" },
        { "url": "https://open.spotify.com/artist/2pGARcnqDa3WoicxemVeqU" },
        { "url": "https://open.spotify.com/artist/5RMLpCv3ic2KtGnqJ7eMG4" },
        { "url": "https://open.spotify.com/artist/34ESFFvfP5f465MC2V6E64" },
        { "url": "https://open.spotify.com/artist/7JdvhVWzehfN2WJwBOcbDl" },
        { "url": "https://open.spotify.com/artist/267gjhlmcoscSuzUHiKqX8" },
        { "url": "https://open.spotify.com/artist/1hVeyfiKrAOsS0ZwZg0tWm" },
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/spotify-monthly-listeners-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 '{
  "startUrls": [
    {
      "url": "https://open.spotify.com/artist/2pvfGvbL4mouaDY9ZSwUmv"
    },
    {
      "url": "https://open.spotify.com/artist/4aKdmOXdUKX07HVd3sGgzw"
    },
    {
      "url": "https://open.spotify.com/artist/17Vw9uuOYB7XYjPt0LNFN0"
    },
    {
      "url": "https://open.spotify.com/artist/4lyCoxLN0aW7nJy5rec0tG"
    },
    {
      "url": "https://open.spotify.com/artist/3MekbRujJg5VZThubOlrkR"
    },
    {
      "url": "https://open.spotify.com/artist/2pGARcnqDa3WoicxemVeqU"
    },
    {
      "url": "https://open.spotify.com/artist/5RMLpCv3ic2KtGnqJ7eMG4"
    },
    {
      "url": "https://open.spotify.com/artist/34ESFFvfP5f465MC2V6E64"
    },
    {
      "url": "https://open.spotify.com/artist/7JdvhVWzehfN2WJwBOcbDl"
    },
    {
      "url": "https://open.spotify.com/artist/267gjhlmcoscSuzUHiKqX8"
    },
    {
      "url": "https://open.spotify.com/artist/1hVeyfiKrAOsS0ZwZg0tWm"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call confidential_gnat/spotify-monthly-listeners-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/spotify-monthly-listeners-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/U9CzFd1V8hCMFBFjj/builds/Q4FfaH3N6SjCfOKXT/openapi.json
