# Spotify Scraper: Play Counts, Artists, Albums, Playlists (`themineworks/spotify-scraper`) Actor

Scrape Spotify from public links: track play counts, artist monthly listeners, followers, world rank, top cities and related artists, album tracks with plays, playlist tracks with tempo and key, owner and followers. No login or API key. Pay per row.

- **URL**: https://apify.com/themineworks/spotify-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Social media, Marketing, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.79 / 1,000 rows

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 Scraper: Play Counts, Artists, Albums, Playlists

[![422 Spotify rows in 10 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/spotify-scraper-hero.png)](https://console.apify.com/actors/8FX3FJexpnVAVkkgO/input)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Exact play counts, straight from Spotify.** Every track row carries its total plays as a whole number (Blinding Lights: 5,620,684,718 in our proof run), next to the artists, album, release date, length and explicit flag. Paste artist, album, playlist and track links in any mix: our proof run read 10 artists, 3 albums, 3 playlists and 3 tracks into **422 rows in 10 seconds**, with every one of its 24 requests answered.
- **The artist numbers labels and managers ask for.** Monthly listeners, followers, world rank, the 5 cities with the most listeners, the top 10 tracks with plays, the Fans also like list, discography counts, the latest release, links the artist publishes and upcoming concerts, in one row per artist. All 10 artists in the proof run came back with listeners, followers, world rank and top cities.
- **No login, no developer app, no API key.** You paste public links; you pay per row delivered. Playlists add tempo (BPM), key and Camelot key to every track, which Spotify's public Web API stopped giving to new apps in 2024. Links that do not exist, duplicate links, podcast episodes inside playlists and refused requests are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/8FX3FJexpnVAVkkgO/input)

**Part of The Mine Works Social media and video family:** [Threads Scraper](https://apify.com/themineworks/threads-scraper), [Reddit Scraper](https://apify.com/themineworks/reddit-scraper), [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper), [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper), [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper), [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper).

### Try it in one minute

Paste this input and press Start. It returns the artist row and the 10 top tracks with play counts for one artist, plus one track, in about 5 seconds:

```json
{
  "urls": [
    "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
    "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"
  ]
}
```

Put any public Spotify link in `urls`, one per line:

- **Artist** links (`https://open.spotify.com/artist/...`) give one artist row plus the artist's 10 top tracks.
- **Album** links give one album row plus every track on the album.
- **Playlist** links give one playlist row plus its tracks, up to `maxPlaylistTracks`.
- **Track** links give one track row.

Links with a country path (`/intl-de/`), share parameters (`?si=...`), embed links and `spotify:artist:...` style URIs all work. Short `spotify.link` links do not: open them once and paste the open.spotify.com address.

Apify's free plan includes $5 of credit every month, which covers about 1,600 results at this actor's price.

#### Copy to your AI assistant

```text
themineworks/spotify-scraper on Apify. Reads public Spotify data from open.spotify.com links without a login or API key: artists (monthly listeners, followers, world rank, top cities, biography, related artists, discography counts, latest release, upcoming concerts, plus their top 10 tracks), albums (label, release date, copyright, total plays, plus every track), playlists (owner, followers, description, plus tracks with date added, BPM and key) and tracks; every track row has its exact play count, artists, album, release date, duration and explicit flag. Call ApifyClient("TOKEN").actor("themineworks/spotify-scraper").call(run_input={"urls": ["https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg"]}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: urls (array of artist, album, playlist or track links or spotify: URIs, up to 500). Optional: includeTracks (default true; false gives one summary row per artist, album or playlist), maxPlaylistTracks (default 100, 10 to 10000). Rows differ by record_type (artist, album, playlist, track); skip rows that have "_type": "status". Full spec: GET https://api.apify.com/v2/acts/themineworks~spotify-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations
```

### Key features

- **Four link types in one run**, up to 500 links, read four at a time. Each row says which link it came from (`source_input`) and, for tracks, the artist, album or playlist name (`source_name`).
- **Play counts on every track row**, whether the track came from an artist's top 10, an album, a playlist or its own link. Album rows add `album_total_plays`, the sum over all tracks (6,509,496,870 for 1989 (Taylor's Version) in our proof run).
- **Artist rows with 25 fields**: monthly listeners, followers, world rank, top 5 cities with listener counts, biography, avatar and header images, album, single and compilation counts, latest release, top track names, related artists with links, external links (Instagram, TikTok, Wikipedia and more) and upcoming concerts.
- **Playlist tracks with audio attributes**: date added, BPM, musical key and Camelot key for every track, plus the playlist's owner, followers and description. Up to 10,000 tracks per playlist, 100 per request.
- **Whole albums**: every track with disc and track number, in album order, with label, release date and copyright on the album row.
- **Fast and light**: one request returns an artist with its top tracks, 50 album tracks or 100 playlist tracks. The proof run averaged 17.6 rows per request and used 111 MB of memory.

### How to use it

#### Basic: an artist's numbers and top tracks

```json
{
  "urls": ["https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"]
}
```

One artist row (monthly listeners, followers, world rank, top cities and more) and 10 track rows with play counts.

#### Many artists, albums, playlists and tracks at once

```json
{
  "urls": [
    "https://open.spotify.com/artist/3TVXtAsR1Inumwj472S9r4",
    "https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X",
    "https://open.spotify.com/album/64LU4c1nfjz1t4VnGhagcg",
    "https://open.spotify.com/playlist/37i9dQZF1DX0XUsuxWHRQd",
    "spotify:track:7qiZfU4dY1lWllzX7mPBI3"
  ],
  "maxPlaylistTracks": 200
}
```

Up to 500 links per run, any mix. A link given twice is read once.

#### Artist tracking for a roster, summary rows only

```json
{
  "urls": [
    "https://open.spotify.com/artist/1Xyo4u8uXC1ZmMpatF05PJ",
    "https://open.spotify.com/artist/6M2wZ9GZgrQXHCFfjv46we",
    "https://open.spotify.com/artist/4YRxDV8wJFPHPTeXepOstw"
  ],
  "includeTracks": false
}
```

One row per artist, nothing else, so a daily schedule costs one row per artist. Store the rows and chart `monthly_listeners`, `followers` and `world_rank` over time.

#### Playlist monitoring: what was added this week, with tempo and key

```json
{
  "urls": [
    "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
    "https://open.spotify.com/playlist/37i9dQZF1DX0XUsuxWHRQd"
  ],
  "maxPlaylistTracks": 100
}
```

Every track row has `added_at`, `position`, `play_count`, `bpm`, `musical_key` and `camelot_key`. Schedule it weekly and compare with last week's run to see what entered, what moved and what left. DJs use the BPM and Camelot columns to plan sets.

#### Catalogue valuation: total plays of an album

```json
{
  "urls": [
    "https://open.spotify.com/album/4yP0hdKOZPNshxUOjY0cZj",
    "https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy"
  ]
}
```

The album row carries `album_total_plays`, and each track row its own `play_count`, which is what catalogue buyers and royalty estimates start from.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `urls` | array of strings | `["https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg"]` | Artist, album, playlist and track links or spotify: URIs, any mix, up to 500 per run. |
| `includeTracks` | boolean | `true` | Artists add their top 10 tracks, albums every track, playlists their tracks. Off gives one summary row per artist, album or playlist; track links still return their track. |
| `maxPlaylistTracks` | integer | `100` | Tracks read from each playlist, in playlist order, 10 to 10,000. Albums always return every track. |

### What data do you get?

Four row types, told apart by `record_type`. Every row has `record_type`, `source_type`, `source_input`, `position` and `scraped_at`.

- **track**: `track_id`, `track_name`, `track_url`, `artists`, `artist_ids`, `album_name`, `album_id`, `album_url`, `album_release_date`, `album_cover_url`, `play_count`, `duration_ms`, `duration`, `explicit`, `playable`, `disc_number`, `track_number`, `source_name`. Playlist tracks add `added_at`, `bpm`, `musical_key` and `camelot_key`. An artist's top tracks carry the album link and cover but not its name or date, because Spotify's artist page does not include them.
- **artist**: `artist_id`, `artist_name`, `artist_url`, `followers`, `monthly_listeners`, `world_rank`, `top_cities` (city, country, region, listeners), `biography`, `external_links` (name, url), `avatar_url`, `header_image_url`, `albums_count`, `singles_count`, `compilations_count`, `latest_release_name`, `latest_release_date`, `latest_release_url`, `top_track_names`, `related_artists` (name, id, url), `upcoming_concerts` (title, date, city, venue, festival).
- **album**: `album_id`, `album_name`, `album_url`, `album_type`, `artists`, `artist_ids`, `label`, `release_date`, `total_tracks`, `album_total_plays`, `copyright`, `cover_url`, `playable`.
- **playlist**: `playlist_id`, `playlist_name`, `playlist_url`, `description`, `owner_name`, `owner_username`, `owner_url`, `followers`, `total_tracks`, `image_url`.

A link that returns nothing gets one free status row with `_type: "status"`, a `status` (`not_found`, `blocked`, `invalid_input`) and a plain `note`. The run's `OUTPUT` record in the key-value store lists every link with its outcome and the number of requests it took.

#### Stable fields for automations

These fields were filled on every track row of our proof run (406 tracks from artists, albums, playlists and track links), and their names will not change:

| Field | What it holds |
|---|---|
| `record_type` | artist, album, playlist or track |
| `source_type` | Kind of link the row came from |
| `source_input` | The link you gave |
| `position` | Rank or order within its artist, album or playlist |
| `track_id` | Spotify track id |
| `track_name` | Track title |
| `track_url` | open.spotify.com track link |
| `artists` | Artist names, main artist first |
| `album_id` | Spotify album id |
| `play_count` | Total plays |
| `duration_ms` | Length in milliseconds |
| `explicit` | Marked explicit |
| `scraped_at` | When the row was read, UTC |

#### Output examples

##### Artist row (Bad Bunny, lists trimmed)

```json
{
  "record_type": "artist",
  "source_type": "artist",
  "source_input": "https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X",
  "position": 1,
  "artist_id": "4q3ewBCX7sLwd24euuV69X",
  "artist_name": "Bad Bunny",
  "artist_url": "https://open.spotify.com/artist/4q3ewBCX7sLwd24euuV69X",
  "followers": 124511364,
  "monthly_listeners": 93610969,
  "world_rank": 9,
  "top_cities": [
    { "city": "Mexico City", "country": "MX", "region": "CMX", "listeners": 4294520 },
    { "city": "Bogotá", "country": "CO", "region": "DC", "listeners": 2585326 }
  ],
  "external_links": [
    { "name": "instagram", "url": "https://instagram.com/badbunnypr" }
  ],
  "albums_count": 8,
  "singles_count": 92,
  "top_track_names": ["DtMF", "BAILE INoLVIDABLE"],
  "related_artists": [
    { "name": "Rauw Alejandro", "id": "1mcTU81TzQhprhouKaTkpq", "url": "https://open.spotify.com/artist/1mcTU81TzQhprhouKaTkpq" }
  ],
  "upcoming_concerts": []
}
```

##### Playlist track with tempo and key (RapCaviar, position 1)

```json
{
  "record_type": "track",
  "source_type": "playlist",
  "source_name": "RapCaviar",
  "position": 1,
  "track_id": "50GVx8sCc1TDKHXumgYqEO",
  "track_name": "Cold Shoulder (feat. Don Toliver & Yebba)",
  "track_url": "https://open.spotify.com/track/50GVx8sCc1TDKHXumgYqEO",
  "artists": ["Drake", "Don Toliver", "Yebba"],
  "album_name": "HABIBTI (FOMO)",
  "album_release_date": "2026-10-02",
  "play_count": 5260342,
  "duration_ms": 234849,
  "duration": "3:55",
  "explicit": true,
  "track_number": 14,
  "added_at": "2026-10-05T18:50:22.746Z",
  "bpm": 96.6,
  "musical_key": "A minor",
  "camelot_key": "8A"
}
```

##### Album row with total plays (1989 (Taylor's Version))

```json
{
  "record_type": "album",
  "source_type": "album",
  "album_id": "64LU4c1nfjz1t4VnGhagcg",
  "album_name": "1989 (Taylor's Version)",
  "album_type": "album",
  "artists": ["Taylor Swift"],
  "label": "Taylor Swift",
  "release_date": "2023-10-26",
  "total_tracks": 21,
  "album_total_plays": 6509496870,
  "cover_url": "https://i.scdn.co/image/ab67616d0000b2734110bfab1185fdfc9dfc2cf0"
}
```

##### Playlist row (All Out 2010s)

```json
{
  "record_type": "playlist",
  "source_type": "playlist",
  "playlist_id": "37i9dQZF1DX5Ejj0EkURtP",
  "playlist_name": "All Out 2010s",
  "playlist_url": "https://open.spotify.com/playlist/37i9dQZF1DX5Ejj0EkURtP",
  "description": "The biggest songs of the 2010s. Cover: Justin Bieber",
  "owner_name": "Spotify",
  "owner_username": "spotify",
  "followers": 14876468,
  "total_tracks": 150
}
```

##### Track link (Blinding Lights)

```json
{
  "record_type": "track",
  "source_type": "track",
  "track_name": "Blinding Lights",
  "artists": ["The Weeknd"],
  "album_name": "After Hours",
  "album_release_date": "2020-03-20",
  "play_count": 5620684718,
  "duration": "3:20",
  "explicit": false,
  "track_number": 9
}
```

### Pricing

Pay per event: you pay for each row delivered to your dataset (an artist, an album, a playlist or a track), plus a flat $0.005 per run, whatever memory you choose. Nothing else is billed: no proxy add-on, no charge per link or per request.

| Event | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) and above |
|---|---|---|---|---|
| Row delivered, per 1,000 rows | $2.99 | $2.59 | $2.19 | $1.79 |
| Run start, once per run | $0.005 | $0.005 | $0.005 | $0.005 |

**Never charged:** links that do not exist or that Spotify does not serve, lines that are not Spotify links (user, podcast and short links included), a link given twice, podcast episodes and local files inside playlists, requests Spotify refuses, and the status rows that explain a link with no results. A run that delivers nothing costs only the start fee.

An artist link with tracks on is 11 rows (the artist and 10 top tracks); with `includeTracks` off it is 1 row. To cap a run's cost, set Maximum cost per run in the run options; the actor stops delivering, and charging, when that budget is used.

### FAQ

#### What does this actor read?

Spotify's public pages, logged out. It opens Spotify's public embed player page (the player websites put on their pages), which hands every visitor an anonymous access token, and with that token reads the same catalogue service Spotify's web player uses for artist, album, playlist and track pages. Nothing is computed or forged to get the token, and no account is involved.

#### Are the play counts exact?

Yes. They are the whole numbers Spotify's web player receives, not rounded figures: 1,284,162,164 plays for On The Floor in our proof run. Spotify does not refresh play counts in real time: two of our runs nine minutes apart showed the same count for On The Floor.

#### How many rows can I get?

Up to 500 links per run. An artist gives 11 rows with tracks on, an album 1 row plus every track, a playlist 1 row plus up to 10,000 tracks, a track 1 row. Our proof run turned 19 links into 422 rows.

#### Can I search Spotify by name, or get an artist's full discography?

Not in this version. Give links or spotify: URIs; you can copy them from the Share menu in any Spotify app. Artist rows include album, single and compilation counts, the latest release and the 10 top tracks; for every track of an album, add the album's link.

#### How fresh is the data?

Live. Each run reads Spotify at that moment: monthly listeners, followers, world rank and playlist contents as of the run, play counts as of Spotify's last refresh.

#### Do I need a Spotify account, a developer app or cookies?

No. Nothing to sign up for and nothing to paste. The actor does not use Spotify's developer Web API, so there is no client id, no app approval and none of that API's rate limits on your side.

#### Do I need my own proxy?

No. Requests go through Apify's datacenter proxy, which is included. In our proof run all 24 requests were answered on the first try.

#### Why does `playable` say false for some tracks?

Spotify decides playability per country, and this actor's requests come from the United States. A track not released in the US shows `playable: false`; its play count and other fields are still filled.

#### What happens with a link that does not exist?

It gets one free status row that says `not_found` and is not charged. User profiles, podcasts, episodes and short spotify.link links get an `invalid_input` status row explaining why. The run's `OUTPUT` record lists every link with its outcome.

#### Can I track artists or playlists over time?

Yes. Schedule the same input daily or weekly in Apify and keep each run's dataset, or send it to Google Sheets. With `includeTracks` off, tracking an artist costs one row per artist per run.

#### In what formats can I export the data?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or the Apify API. Lists such as `artists` and `top_cities` become columns in CSV and Excel.

#### Can I use it from Claude, ChatGPT or another AI assistant?

Yes, through Apify's MCP server.

- Connector URL: https://mcp.apify.com/?tools=themineworks/spotify-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http spotify-scraper "https://mcp.apify.com/?tools=themineworks/spotify-scraper"`

#### Is it legal to scrape Spotify?

The actor collects only public catalogue data that Spotify shows anyone without an account, and it does not log in or download audio. You are responsible for how you use the data: check Spotify's terms for your use case and the data protection laws that apply to you, such as GDPR and CCPA, for example when you store playlist owners' names.

### Integrations

- **Google Sheets**: send each run's dataset to a sheet with Apify's Google Sheets integration, one row per artist, album, playlist or track.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example to log an artist's monthly listeners every day.
- **Webhooks**: have Apify call your URL when a run finishes, then fetch the dataset.
- **API**: start runs and read results from any language with the Apify API or the Python and JavaScript clients (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor, VS Code and Claude Code, through the connector URL in the FAQ.

For podcasts, see our [Podcast Episode Scraper](https://apify.com/themineworks/podcast-episode-scraper); for an artist's videos, our [YouTube Channel Scraper](https://apify.com/themineworks/youtube-channel).

### More from The Mine Works

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper)
- [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper)
- [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper)
- [Twitter / X Scraper](https://apify.com/themineworks/twitter-x-scraper)
- [YouTube Transcript](https://apify.com/themineworks/youtube-transcript-scraper)
- [Xiaohongshu (RED) Scraper](https://apify.com/themineworks/xiaohongshu-explore-scraper)
- [Telegram Channel Scraper](https://apify.com/themineworks/telegram-channel-scraper)
- [Telegram Channel Finder](https://apify.com/themineworks/telegram-channel-finder)
- [Pinterest Profile Scraper](https://apify.com/themineworks/pinterest-profile-scraper)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper)
- [Google News Scraper](https://apify.com/themineworks/google-news)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper)

### Support

Found a link that does not come back right, or a field you need? Open an issue in the Issues tab and include the run link. For new sources or a custom build, email dmineworks@gmail.com.

*Spotify artists, albums, playlists and tracks from public links, with exact play counts, monthly listeners, followers, world rank, top cities, and tempo and key for playlist tracks, no login or API key, charged only for rows you receive.*

# Actor input Schema

## `urls` (type: `array`):

One link per line, any mix of artist, album, playlist and track: https://open.spotify.com/artist/..., /album/..., /playlist/..., /track/... (links with /intl-de/ or ?si= work), or spotify:artist:... URIs. Up to 500 per run. An artist gives an artist row plus its top 10 tracks; an album gives an album row plus every track; a playlist gives a playlist row plus its tracks; a track gives one track row.

## `includeTracks` (type: `boolean`):

On: artists add their top 10 tracks, albums every track, playlists their tracks, each with its play count. Off: one summary row per artist, album or playlist (track links still return their track).

## `maxPlaylistTracks` (type: `integer`):

How many tracks to read from each playlist, in playlist order, 10 to 10,000. Spotify serves 100 per request. Albums always return every track.

## Actor input object example

```json
{
  "urls": [
    "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
    "https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy",
    "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
    "https://open.spotify.com/track/3C0nOe05EIt1390bVABLyN"
  ],
  "includeTracks": true,
  "maxPlaylistTracks": 100
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "urls": [
        "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
        "https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy",
        "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
        "https://open.spotify.com/track/3C0nOe05EIt1390bVABLyN"
    ],
    "maxPlaylistTracks": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "urls": [
        "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
        "https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy",
        "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
        "https://open.spotify.com/track/3C0nOe05EIt1390bVABLyN",
    ],
    "maxPlaylistTracks": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 '{
  "urls": [
    "https://open.spotify.com/artist/0TnOYISbd1XYRBk9myaseg",
    "https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy",
    "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M",
    "https://open.spotify.com/track/3C0nOe05EIt1390bVABLyN"
  ],
  "maxPlaylistTracks": 100
}' |
apify call themineworks/spotify-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/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/8FX3FJexpnVAVkkgO/builds/XZk2yVgi8BhBhesus/openapi.json
