# Spotify Related Artists Scraper: Fans Also Like + Stats (`eduair94/spotify-related-artists-scraper`) Actor

Spotify 'Fans also like' related artists for any artist, with monthly listeners, followers and world rank for each. Crawl two levels deep and filter by listeners to find similar emerging artists.

- **URL**: https://apify.com/eduair94/spotify-related-artists-scraper.md
- **Developed by:** [Eduardo Airaudo](https://apify.com/eduair94) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 related artists

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 Related Artists Scraper

Spotify related artists ("Fans also like") for any artist, with each related artist's monthly listeners, followers, world rank and top city, as one clean row per related artist. Paste artist links, IDs or names, go two levels deep, filter by monthly listeners to find similar emerging artists, and export the results to JSON, CSV or Excel. No Spotify account and no API key.

> Unofficial; not affiliated with Spotify. This Actor reads the public "Fans also like" lists and statistics Spotify shows on artist pages.

### What does Spotify Related Artists Scraper do?

For every artist you enter, Spotify Related Artists Scraper reads the "Fans also like" list Spotify shows on the artist's page (up to 40 artists, in Spotify's order) and returns one row per related artist with:

- **Where it was found**: your artist (`seedArtistId`, `seedArtistName`), its place in the list (`relatedRank`), and at depth 2 the related artist whose list it came from (`viaArtistId`, `viaArtistName`).
- **Monthly listeners** (`monthlyListeners`): unique listeners over the last 28 days, as an exact whole number.
- **Followers** (`followers`), **world rank** (`worldRank`), **popularity** (`popularity`, 0-100) and the **top city** (`topCity`, `topCityCountry`, `topCityListeners`).
- The related artist's ID (`artistId`), name, Spotify link (`url`) and profile picture (`imageUrl`).

### How to scrape Spotify related artists

1. Paste your artists into **Artists**, one per line: Spotify artist links, `spotify:artist:` URIs, 22-character artist IDs or artist names (for example `Bad Bunny`).
2. Choose **Max related artists per artist** (default 20, up to 40) and, if you like, a monthly listeners range.
3. Click **Start** and open the **Related artists** view in the Output tab, or download the rows as JSON, CSV, Excel or HTML.

A name is looked up with Spotify's artist search, and only an artist whose name matches it is used (case, accents, punctuation and small typos aside). A name that matches no artist is not charged; use the artist's link for an exact match.

### Spotify "Fans also like" as data

The "Fans also like" list is Spotify's own similarity graph: the artists that the same listeners play. Each of your artists gets its full list, so two of your artists that share a related artist both list it. Every row carries the related artist's numbers, so you can sort a list by monthly listeners, compare an artist's peers, or spot who in the list is growing.

### Find similar emerging artists

Set **Min monthly listeners** (`minMonthlyListeners`) and **Max monthly listeners** (`maxMonthlyListeners`) to keep only related artists of a certain size, for example up to 100,000 monthly listeners to find emerging artists who sound like a star. Related artists outside the range are left out and **not charged**. Combine it with **Depth** 2 to search a wider circle.

### Two levels deep: the artist graph

With **Depth** (`depth`) 2, the Actor also reads the "Fans also like" lists of your artists' related artists. Each of those lists is read once per run, and each artist appears at most once at depth 2 (never again if depth 1 already delivered it), so depth 2 adds new names instead of repeats. `viaArtistName` says whose list each depth-2 row came from. One artist with 20 related artists gives up to 20 rows at depth 1 and up to 400 more at depth 2. **Leave out my input artists** (`excludeInputArtists`, on by default) keeps your own artists out of each other's lists.

### A replacement for Spotify's deprecated related-artists endpoint

Spotify's Web API stopped serving related artists to new apps in November 2024. This Actor returns the same "Fans also like" list the Spotify app shows, plus monthly listeners, followers and world rank, which the Web API never had. Call it from your code with the Apify API (below) and you get related artists as JSON.

### Input

| Field | What it does | Default |
| --- | --- | --- |
| `artists` | Artist links (open.spotify.com/artist/…, spotify.link short links too), `spotify:artist:` URIs, artist IDs or artist names, one per line. The same artist entered twice is read once. | required |
| `maxRelatedPerArtist` | How many artists of each "Fans also like" list to read, in Spotify's order (1-40). | 20 |
| `depth` | 1: your artists' related artists. 2: also the related artists of those. | 1 |
| `minMonthlyListeners` | Leave out related artists with fewer monthly listeners. | none |
| `maxMonthlyListeners` | Leave out related artists with more monthly listeners. | none |
| `excludeInputArtists` | Leave your own artists out of each other's lists. | true |

Example input:

```json
{
    "artists": [
        "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
        "Karol G"
    ],
    "maxRelatedPerArtist": 20,
    "depth": 2,
    "maxMonthlyListeners": 1000000
}
```

### Output

One row per related artist (the first of The Weeknd's list on 2026-11-01):

```json
{
    "seedArtistId": "1Xyo4u8uXC1ZmMpatF05PJ",
    "seedArtistName": "The Weeknd",
    "depth": 1,
    "viaArtistId": null,
    "viaArtistName": null,
    "relatedRank": 1,
    "artistId": "5pKCCKE2ajJHZ9KAiaK11H",
    "name": "Rihanna",
    "url": "https://open.spotify.com/artist/5pKCCKE2ajJHZ9KAiaK11H",
    "imageUrl": "https://i.scdn.co/image/ab6761610000e5ebcb565a8e684e3be458d329ac",
    "monthlyListeners": 117402368,
    "followers": 77679510,
    "worldRank": 2,
    "topCity": "London",
    "topCityCountry": "GB",
    "topCityListeners": 1956489,
    "popularity": 94,
    "input": "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
    "resolvedFrom": "url",
    "scrapedAt": "2026-11-01T20:25:31.954Z"
}
```

| Field | Meaning |
| --- | --- |
| `seedArtistId`, `seedArtistName` | Your artist the row belongs to. |
| `depth` | 1: in your artist's own list. 2: in the list of one of its related artists. |
| `viaArtistId`, `viaArtistName` | Depth 2: the related artist whose list the row came from (empty at depth 1). |
| `relatedRank` | The place in Spotify's "Fans also like" list (1 = first). |
| `artistId`, `name`, `url`, `imageUrl` | The related artist's Spotify ID, name, page and profile picture. |
| `monthlyListeners` | Monthly listeners: unique listeners over the last 28 days (0 when nobody listened). |
| `followers`, `worldRank`, `popularity` | Spotify followers, world rank (empty when not ranked) and popularity (0-100). |
| `topCity`, `topCityCountry`, `topCityListeners` | The city with the most monthly listeners, its country code and its listeners. |
| `input`, `resolvedFrom` | The line you entered for your artist and how it named it (`url`, `uri`, `id`, `short_link` or `search` for a name). |
| `scrapedAt` | When the row was read. |

The Output tab has two views: **Related artists** and **Artist graph** (who is related to whom). The run's key-value store also holds `RUN_SUMMARY` (counts, artists left out by the filters, warnings) and, when an input failed, `ERRORS`.

### How much does it cost to scrape Spotify related artists?

You pay per related artist delivered. Your price follows your Apify plan:

| Apify plan | Per related artist | Per 1,000 related artists |
| --- | --- | --- |
| Free | $0.001 | $1.00 |
| Bronze | $0.0009 | $0.90 |
| Silver | $0.00075 | $0.75 |
| Gold, Platinum and Diamond | $0.0006 | $0.60 |

Each run also has Apify's start fee of $0.00005 (5 thousandths of a cent), and Apify covers the first 5 seconds of every run's compute. There is no monthly rental and no charge for platform usage.

| Example (Free plan) | Related artists | Cost |
| --- | --- | --- |
| The prefilled input (The Weeknd, 10 related artists) | 10 | $0.01 + $0.00005 start |
| 100 artists, 20 related artists each | 2,000 | $2.00 |
| 1 artist at depth 2, 20 related artists each | up to 420 | up to $0.42 |

Never charged: related artists outside your monthly listeners range, your own artists in each other's lists, related artists whose numbers Spotify did not return this time, unknown artists, names that match no artist, links to tracks or albums, broken IDs and repeats. Set a maximum cost per run and the Actor stops at that amount without going over: it does not even read the lists it could not pay for.

### FAQ

#### What is "Fans also like" on Spotify?

The list of similar artists Spotify shows on every artist page, built from what the artist's listeners also play. Spotify lists up to 40 related artists per artist.

#### Why are there fewer rows than Max related artists per artist?

The monthly listeners range left some out, your own artists were left out of each other's lists, or Spotify lists fewer related artists for small artists. `RUN_SUMMARY` counts each case (`outsideListenersRange`, `excludedArtists`, `withoutStats`).

#### Why is `worldRank` empty?

Spotify ranks only its most-listened artists, roughly the top 500 worldwide. Everyone else has no world rank, so the field is empty (null), not 0.

#### What happens when Spotify does not answer?

The request is retried, and an artist whose list or numbers did not arrive is tried again at the end of the run. If it still failed, it is listed in the ERRORS record of the run's key-value store and is not charged (a run that delivered nothing ends as failed, so Apify can retry it).

#### Do I need a Spotify account or API key?

No. You only need an Apify account. The Actor never uses your Spotify login.

#### Is it legal to scrape Spotify related artists?

The Actor reads public information that Spotify shows to every visitor of an artist page, and returns no personal data about listeners. Check that your use of the data complies with Spotify's terms and the laws that apply to you.

### Use it from the Apify API or MCP

Start a run, wait for it and get the rows in one call (synchronous calls wait up to 5 minutes):

```bash
curl -X POST "https://api.apify.com/v2/acts/eduair94~spotify-related-artists-scraper/run-sync-get-dataset-items?maxTotalChargeUsd=1" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"artists": ["https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"], "maxRelatedPerArtist": 20}'
```

JavaScript, with the `apify-client` package:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('eduair94/spotify-related-artists-scraper').call({
    artists: ['Bad Bunny'],
    maxMonthlyListeners: 500000,
    depth: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const artist of items) console.log(artist.name, artist.monthlyListeners, 'via', artist.viaArtistName ?? artist.seedArtistName);
```

Python, with the `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("eduair94/spotify-related-artists-scraper").call(
    run_input={"artists": ["https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"], "maxRelatedPerArtist": 40}
)
for artist in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(artist["relatedRank"], artist["name"], artist["monthlyListeners"])
```

AI agents can call it too: add the Actor to Apify's MCP server and ask for an artist's related artists in plain language.

### Use cases

- **A\&R discovery**: start from a star, keep related artists under 100,000 monthly listeners, go two levels deep, and get a shortlist of similar emerging artists with their numbers.
- **Playlist pitching**: find the artists your listeners also play, then pitch to the playlists and curators that feature them.
- **Ad targeting**: build audiences from the artists fans of an artist also like.
- **Music recommendation apps**: related artists as JSON, a drop-in for the related-artists data Spotify's Web API no longer serves.
- **Market research**: map a scene or a genre as a graph of artists and their audiences.

### Related Spotify scrapers

- [Spotify Scraper: Play Counts, Monthly Listeners & Playlists](https://apify.com/eduair94/spotify-scraper): tracks, albums, playlists, charts and podcasts from any link or keyword.
- [Spotify Play Count Scraper](https://apify.com/eduair94/spotify-play-count-scraper): stream counts for every track of an artist's discography, an album or a playlist.
- [Spotify Monthly Listeners Scraper](https://apify.com/eduair94/spotify-monthly-listeners-scraper): monthly listeners, followers, world rank and top cities for artist rosters, with change tracking.
- [Spotify Playlist Scraper](https://apify.com/eduair94/spotify-playlist-scraper): whole playlists with every track's play count, priced per playlist, with change tracking.
- [Spotify Artist Scraper](https://apify.com/eduair94/spotify-artist-scraper): full artist profiles with biography, social links and top tracks.
- [Spotify Charts Scraper](https://apify.com/eduair94/spotify-charts-scraper): Top 200, top artists and top albums by country, daily or weekly, with streams.
- [Spotify Podcast Scraper](https://apify.com/eduair94/spotify-podcast-scraper): podcast shows with every episode's title, description, release date and duration, by link or keyword.

# Actor input Schema

## `artists` (type: `array`):

One artist per line: an open.spotify.com/artist/ link (spotify.link short links work too), a spotify:artist: URI, a 22-character artist ID, or an artist name such as Bad Bunny. A name is looked up with Spotify's artist search and only an artist named like it is used (case, accents, punctuation and small typos aside); a name that matches no artist is not charged. The same artist entered twice is read once.

## `maxRelatedPerArtist` (type: `integer`):

How many artists of each 'Fans also like' list to read, in Spotify's order (Spotify lists up to 40). Every one delivered is one result.

## `depth` (type: `integer`):

1: the related artists of your artists. 2: also the related artists of those (each artist's list read once per run; `viaArtistName` says whose list a row came from). Depth 2 returns up to Max related artists per artist squared for each of your artists.

## `minMonthlyListeners` (type: `integer`):

Leave out related artists with fewer monthly listeners than this. Empty: no lower bound.

## `maxMonthlyListeners` (type: `integer`):

Leave out related artists with more monthly listeners than this (for example 100000 to find emerging artists). Empty: no upper bound.

## `excludeInputArtists` (type: `boolean`):

When one of your artists shows up in another one's related list, leave it out (it is not charged).

## Actor input object example

```json
{
  "artists": [
    "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"
  ],
  "maxRelatedPerArtist": 10,
  "depth": 1,
  "excludeInputArtists": true
}
```

# Actor output Schema

## `results` (type: `string`):

Every related artist of this run with the artist it is related to, its place in Spotify's 'Fans also like' list and its stats.

## `resultsCsv` (type: `string`):

The same rows as CSV for spreadsheets.

## `runSummary` (type: `string`):

Artists requested and delivered, related artists delivered or left out by the filters, repeats, failed inputs, warnings and the run outcome.

## `errors` (type: `string`):

Each input artist that delivered nothing, with the reason; written only when an input failed. Never charged.

# 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 = {
    "artists": [
        "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"
    ],
    "maxRelatedPerArtist": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("eduair94/spotify-related-artists-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 = {
    "artists": ["https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"],
    "maxRelatedPerArtist": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("eduair94/spotify-related-artists-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 '{
  "artists": [
    "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"
  ],
  "maxRelatedPerArtist": 10
}' |
apify call eduair94/spotify-related-artists-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eduair94/spotify-related-artists-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/ZjANzE4Zq2ZxtbgRi/builds/ybzToW0fXrVHVDijw/openapi.json
