# Spotify Artist Scraper: Bio, Social Links & Top Tracks (`eduair94/spotify-artist-scraper`) Actor

Full Spotify artist profiles: monthly listeners, followers, world rank, top cities, biography, Instagram, X and Facebook links, top tracks with play counts, discography counts and related artists.

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

## Pricing

from $1.50 / 1,000 artist profiles

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 Artist Scraper

Full Spotify artist profiles, one row per artist: monthly listeners, followers, world rank, top cities, biography, the Instagram, X, Facebook and Wikipedia links the artist publishes, top tracks with play counts, discography counts and the "Fans also like" related artists. Paste artist links, IDs or names and export the profiles to JSON, CSV or Excel. No Spotify account and no API key.

> Unofficial; not affiliated with Spotify. This Actor reads the public artist profiles Spotify shows to every listener.

### What Spotify artist data can you scrape?

| Group | Fields |
| --- | --- |
| Audience | `monthlyListeners`, `followers`, `worldRank` and `topCities` (up to 5 cities with the most listeners) |
| Profile | `name`, `verified`, `biography`, `imageUrl`, `headerImageUrl`, `galleryImageUrls` and the Spotify link `url` |
| Social links | `instagramUrl`, `twitterUrl`, `facebookUrl`, `wikipediaUrl`, and all of them in `externalLinks` |
| Music | `topTracks` (the top 10 with all-time play counts), `latestRelease`, `albumsCount`, `singlesCount`, `compilationsCount` |
| Similar artists | `relatedArtists`: up to 20 "Fans also like" artists |
| Genres and moods (optional) | `genres`, `moods`, `activities` and `tempo`, with **Include genres and moods** on |

Spotify's official Web API has never returned monthly listeners, world rank, top cities, biographies or social links. Its artist object marks followers, popularity and genres as deprecated, and followers and popularity were removed for development-mode apps created from 11 February 2026. This Actor reads all of these from the artist's Spotify profile itself.

### How to scrape Spotify artist profiles

1. Paste your artists into **Artists**, one per line: open.spotify.com artist links, `spotify:artist:` URIs, 22-character artist IDs or plain names such as `Taylor Swift`.
2. Optional: turn on **Include genres and moods**.
3. Click **Start**. A profile takes about a second and three are fetched at a time, so 100 artists take well under a minute.
4. Open the **Artist profiles** 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 matched only to an artist with exactly that name (case, accents, punctuation and a leading "The" aside) or one a typo away. `matchedName` tells you which artist it matched, and `exactMatch` is false for a typo match. Spotify's search answers any text with some artist, so a name that matches no artist is not scraped and not charged: ERRORS says what Spotify's top result was. Use links when several artists share a name.

### Spotify artist social links (Instagram, X, Facebook, Wikipedia)

Artists can add Instagram, X (Twitter), Facebook and Wikipedia links to their Spotify profile. Every row returns them in their own columns (`instagramUrl`, `twitterUrl`, `facebookUrl`, `wikipediaUrl`) and together, labeled, in `externalLinks`, as the artist published them. A column is empty when the artist has not added that link.

These are only the links the artist publishes on Spotify, with no emails: Spotify shows no email addresses, phone numbers or management contacts, and the Actor does not visit Instagram, X or Facebook to look for them. Use the **Social links and bio** view to see every artist's links next to their biography.

### 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. A line with several links or IDs counts as one input per link. The same artist entered twice is fetched and charged once. | required |
| `includeInsights` | **Include genres and moods**: adds `genres`, `moods`, `activities` and `tempo`. No extra charge; each profile takes a little longer. | false |

Example input:

```json
{
    "artists": [
        "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
        "Taylor Swift",
        "spotify:artist:4q3ewBCX7sLwd24euuV69X"
    ],
    "includeInsights": true
}
```

### Output

One row per artist. The Weeknd on 2026-11-01, with the lists shortened (a real row has all 5 top cities, the top 10 tracks and up to 20 related artists):

```json
{
    "artistId": "1Xyo4u8uXC1ZmMpatF05PJ",
    "name": "The Weeknd",
    "url": "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
    "verified": true,
    "monthlyListeners": 116457297,
    "followers": 129632964,
    "worldRank": 3,
    "topCities": [
        { "city": "Mexico City", "country": "MX", "region": "CMX", "listeners": 1645614 },
        { "city": "London", "country": "GB", "region": "ENG", "listeners": 1489446 }
    ],
    "biography": "The Weeknd took over pop music & culture on his own terms filtering R&B, Pop,& hip-hop through an ambitious widescreen lens. The multi-platinum 4X GRAMMY Award winner has emerged as one of the most successful & significant artists of the modern era. …",
    "instagramUrl": "https://instagram.com/theweeknd/?hl=en",
    "twitterUrl": "https://twitter.com/theweeknd?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor",
    "facebookUrl": "https://facebook.com/theweeknd/",
    "wikipediaUrl": "https://en.wikipedia.org/wiki/The_Weeknd",
    "externalLinks": [
        { "name": "FACEBOOK", "url": "https://facebook.com/theweeknd/" },
        { "name": "INSTAGRAM", "url": "https://instagram.com/theweeknd/?hl=en" },
        { "name": "TWITTER", "url": "https://twitter.com/theweeknd?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor" },
        { "name": "WIKIPEDIA", "url": "https://en.wikipedia.org/wiki/The_Weeknd" }
    ],
    "imageUrl": "https://i.scdn.co/image/ab6761610000e5ebc1719ac9e6a75c1c25835018",
    "headerImageUrl": "https://image-cdn-ak.spotifycdn.com/image/ab67618600000194ca40d0e310d671f99295b14c",
    "galleryImageUrls": ["https://i.scdn.co/image/ab6761670000ecd445c7565ba8453d2710c9c1b8"],
    "albumsCount": 14,
    "singlesCount": 65,
    "compilationsCount": 3,
    "latestRelease": null,
    "topTracks": [
        { "rank": 1, "id": "7CyPwkp0oE8Ro9Dd5CUDjW", "name": "One Of The Girls (with JENNIE, Lily Rose Depp)", "playCount": 2933035166, "url": "https://open.spotify.com/track/7CyPwkp0oE8Ro9Dd5CUDjW" },
        { "rank": 2, "id": "7MXVkk9YMctZqd1Srtv4MB", "name": "Starboy", "playCount": 4841886853, "url": "https://open.spotify.com/track/7MXVkk9YMctZqd1Srtv4MB" },
        { "rank": 3, "id": "0VjIjW4GlUZAMYd2vXMi3b", "name": "Blinding Lights", "playCount": 5659652654, "url": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b" }
    ],
    "relatedArtists": [
        { "id": "5pKCCKE2ajJHZ9KAiaK11H", "name": "Rihanna", "url": "https://open.spotify.com/artist/5pKCCKE2ajJHZ9KAiaK11H" },
        { "id": "5cj0lLjcoR7YOSnhnX0Po5", "name": "Doja Cat", "url": "https://open.spotify.com/artist/5cj0lLjcoR7YOSnhnX0Po5" }
    ],
    "input": "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
    "resolvedFrom": "url",
    "matchedName": null,
    "exactMatch": null,
    "scrapedAt": "2026-11-01T07:41:18.983Z"
}
```

With **Include genres and moods** on, the same row also has (Taylor Swift, shortened):

```json
{
    "genres": ["pop", "bubblegum pop", "dance pop", "synthpop"],
    "moods": ["happy", "upbeat", "cozy", "energetic"],
    "activities": [],
    "tempo": 120.6
}
```

| Field | Meaning |
| --- | --- |
| `artistId`, `name`, `url` | The artist's Spotify ID, name and Spotify page. |
| `verified` | Whether Spotify shows the verified badge. |
| `monthlyListeners` | Unique listeners over the last 28 days, as an exact whole number. |
| `followers` | Spotify followers. |
| `worldRank` | Spotify's world rank by monthly listeners; empty when the artist is not ranked. |
| `topCities` | Up to 5 cities: `{city, country, region, listeners}`, most listeners first. |
| `biography` | The artist's Spotify biography as plain text, up to 2,000 characters. |
| `instagramUrl`, `twitterUrl`, `facebookUrl`, `wikipediaUrl` | The links the artist publishes on Spotify. |
| `externalLinks` | The same links as `{name, url}`. |
| `imageUrl`, `headerImageUrl`, `galleryImageUrls` | Profile picture, the wide header image and the gallery images. |
| `albumsCount`, `singlesCount`, `compilationsCount` | How many albums, singles and EPs, and compilations the discography has. |
| `latestRelease` | The release Spotify pins as the latest: `{id, name, type, releaseDate, url}`; empty when Spotify shows none. |
| `topTracks` | Up to 10 tracks, most played first: `{rank, id, name, playCount, url}`, where `playCount` is all-time plays. |
| `relatedArtists` | "Fans also like": `{id, name, url}`, in Spotify's order. |
| `genres`, `moods`, `activities`, `tempo` | With **Include genres and moods**: Spotify's descriptors of the artist's top tracks, strongest first, and their average tempo in BPM. |
| `input`, `resolvedFrom`, `matchedName`, `exactMatch` | The line you entered; how it named the artist (`url`, `uri`, `id`, `short_link` or `search`); for a name, the artist it matched and whether that artist has exactly that name (`false`: a typo away). |
| `scrapedAt` | When the profile was read. |

The Output tab has six views: **Artist profiles**, **Social links and bio**, **Audience and top cities**, **Top tracks and releases**, **Related artists** and **Genres and moods**. Its CSV link keeps one line per artist (numbers, biography and links) and leaves the nested lists to the JSON.

### Pricing

You pay per artist profile delivered, at the price of your Apify plan:

| Apify plan | Per artist profile | Per 1,000 artist profiles |
| --- | --- | --- |
| Free | $0.0025 | $2.50 |
| Bronze | $0.002 | $2.00 |
| Silver | $0.00175 | $1.75 |
| Gold, Platinum and Diamond | $0.0015 | $1.50 |

Each run also has Apify's start fee of $0.00005, and Apify covers the first 5 seconds of every run's compute. Genres and moods cost nothing extra, and there is no monthly rental.

| Example (Free plan) | Cost |
| --- | --- |
| The 2 prefilled artists | $0.005 + $0.00005 start |
| 1,000 artist profiles | $2.50 |
| 10,000 artist profiles | $25.00 ($15.00 on Gold) |

Never charged: unknown artists, names that match no artist, links to tracks, albums or playlists, broken IDs, repeats, and profiles Spotify did not return complete. Set a maximum cost per run and the Actor stops at that amount without going over; the run summary lists the artists it did not reach in `notProcessedInputs`, so you can run exactly those again.

### FAQ

#### Does it return emails?

No. Spotify profiles show no email addresses, phone numbers or management contacts, so there are none to return. You get the Instagram, X, Facebook and Wikipedia links the artist chose to publish on Spotify, where their booking or press contacts often are.

#### What is Spotify world rank?

Spotify's ranking of every artist by monthly listeners: rank 1 has the most listeners in the world. Only the top 500 or so artists are ranked; for everyone else `worldRank` is empty (null), not 0.

#### Why are top cities missing for small artists?

Spotify names a city only when enough people there listen to the artist. Below about 90 monthly listeners an artist has fewer than 5 top cities, and with only a handful of listeners none at all. An artist nobody played in the last 28 days has `monthlyListeners` 0 and no top cities, but still a full profile.

#### Why does a top track show 0 plays?

0 plays means fewer than 1,000 plays. Spotify shows no play count below 1,000, so `playCount` is 0 for those tracks; above that the count is exact.

#### What are genres and moods?

With **Include genres and moods** on, `genres`, `moods` and `activities` are the descriptors Spotify gives the artist's top tracks, strongest first, and `tempo` is their average BPM. If Spotify does not return them for an artist, the profile is asked for once more; if they still do not arrive, the profile is delivered without them and counted in the run summary (`profilesWithoutInsights`).

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

No. You only need an Apify account, and the Actor never uses your Spotify login.

#### How fresh is the data?

Each run reads the profiles as Spotify shows them that day. Spotify updates monthly listeners and play counts about once a day, so scraping the same artist several times a day mostly returns the same numbers; a daily or weekly schedule is enough to follow an artist over time.

#### What happens when Spotify does not answer for an artist?

The artist is asked for again right away and once more at the end of the run. If the profile still did not arrive complete, it is listed in the ERRORS record of the run's key-value store as temporary and is not charged. Run it again later. If Spotify data stays unavailable for a minute (10 requests in a row), the run stops starting new artists instead of waiting out its timeout; the artists it did not start are listed in `notProcessedInputs` in the run summary.

#### What if a name matches the wrong artist, or two lines are the same artist?

A name is only matched to an artist with that name or one a typo away, and `exactMatch` flags the typo matches; a link or an artist ID always names exactly one artist. Lines that name an artist another line already fetched are skipped and not charged; the run summary lists each one with the line it repeats in `duplicateInputs`.

#### Is it legal to scrape Spotify artist profiles?

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

### Run it through the Apify API

Python, with the `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("eduair94/spotify-artist-scraper").call(
    run_input={"artists": ["Taylor Swift", "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ"]}
)
for artist in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(artist["name"], artist["monthlyListeners"], artist["instagramUrl"])
```

Or start a run and receive the profiles in one HTTP call (synchronous calls wait up to 5 minutes):

```bash
curl -X POST "https://api.apify.com/v2/acts/eduair94~spotify-artist-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"artists": ["Bad Bunny", "Dua Lipa"], "includeInsights": true}'
```

### Use cases

- **A\&R and talent scouting**: compare artists by monthly listeners, world rank, top cities and the play counts of their top tracks.
- **Booking and tour promotion**: top cities show where an artist's audience lives; listeners and followers help size a show.
- **Brand partnerships and influencer marketing**: shortlist artists by audience and reach them through the Instagram, X and Facebook profiles they publish.
- **Music data enrichment**: add Spotify numbers, images, biographies and links to a CRM, a database or a fan site.
- **Scene research**: follow related artists and genres to map a genre or a local scene.

### Related Spotify scrapers

- [Spotify Scraper: Play Counts, Monthly Listeners & Playlists](https://apify.com/eduair94/spotify-scraper): one Actor for tracks, albums, playlists, charts, lyrics and podcasts, all with play counts.
- [Spotify Play Count Scraper](https://apify.com/eduair94/spotify-play-count-scraper): play counts for every track of an artist's discography, an album or a playlist, beyond the top 10.
- [Spotify Monthly Listeners Scraper](https://apify.com/eduair94/spotify-monthly-listeners-scraper): monthly listeners, followers, world rank and top cities, 50 artists per request.
- [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 Charts Scraper](https://apify.com/eduair94/spotify-charts-scraper): Top 200, top artists and top albums by country, daily or weekly, with streams.

# 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 Taylor Swift. A line with several links or IDs counts as one input per link. A name is looked up with Spotify's artist search and matched only to an artist with exactly that name or one a typo away (`matchedName`, `exactMatch`); a name that matches no artist is not scraped or charged. The same artist entered twice is fetched and charged once.

## `includeInsights` (type: `boolean`):

Add the artist's genres, moods and activities (`genres`, `moods`, `activities`, strongest first) and the average tempo of their top tracks (`tempo`, BPM), as Spotify describes the artist's top tracks. No extra charge, but each profile takes a little longer.

## Actor input object example

```json
{
  "artists": [
    "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
    "Taylor Swift"
  ],
  "includeInsights": false
}
```

# Actor output Schema

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

Every artist profile of this run: monthly listeners, followers, world rank, top cities, biography, social links, top tracks, discography counts and related artists.

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

The profiles as CSV for spreadsheets and CRMs: one line per artist with its numbers, biography and social links, without the nested lists (top cities, links, gallery, top tracks, related artists).

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

Artists requested and delivered, repeats, failed inputs and the run outcome. Failed inputs are never charged.

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

Each input that delivered no profile, 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",
        "Taylor Swift"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("eduair94/spotify-artist-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",
        "Taylor Swift",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("eduair94/spotify-artist-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",
    "Taylor Swift"
  ]
}' |
apify call eduair94/spotify-artist-scraper --silent --output-dataset

```

## MCP server setup

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