# Spotify Podcast Charts Scraper (`maximedupre/spotify-podcast-charts`) Actor

Get current Spotify podcast chart rankings by market and chart. Each row includes the show name, rank, Spotify link, and observation time, plus movement, publisher, description, and artwork when supplied. Choose one or many markets and charts, then keep all available shows or set a per-pair limit.

- **URL**: https://apify.com/maximedupre/spotify-podcast-charts.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Marketing, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 1,000 podcast shows

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎙️ Track Spotify podcast charts by market

Podcast networks, media researchers, sponsorship teams, and data teams can collect current ranked podcast listings from Spotify's public charts. Choose markets and charts, then get one dataset row per show with its rank, Spotify identity, public link, chart details, and observation time. Publisher, description, artwork, Spotify movement, and numeric rank change are included when the source provides them.

This gives you a clean snapshot to compare shows across markets or use in your own data work.

**Use it for**

- Review [**Spotify Trending Podcasts**](https://apify.com/maximedupre/spotify-podcast-charts/examples/spotify-trending-podcasts) for a current view of trending shows in a selected market.
- Collect [**Spotify Podcast Charts**](https://apify.com/maximedupre/spotify-podcast-charts/examples/spotify-podcast-charts) for a chosen market and chart.
- Check [**Podcast Rankings This Week**](https://apify.com/maximedupre/spotify-podcast-charts/examples/podcast-rankings-this-week) when you need a fresh chart snapshot.
- Find [**Top 10 Podcasts On Spotify**](https://apify.com/maximedupre/spotify-podcast-charts/examples/top-10-podcasts-on-spotify) for a short ranked list.
- Compare [**Top Podcasts On Spotify**](https://apify.com/maximedupre/spotify-podcast-charts/examples/top-podcasts-on-spotify) across selected markets.

#### 📈 Spotify podcast ranking rows

Each saved row represents one podcast listing from one selected market and chart. It keeps the name, stable Spotify ID, public show URL, chart rank, market, chart, observation time, and source chart URL together. Optional fields add Spotify's movement label, numeric rank change, publisher, description, and artwork.

#### ▶️ Run a fresh Spotify chart snapshot

Pick one or more markets and charts. Each chart is used with every selected market, and the show limit applies to each pair.

**Run steps**

1. Add one or more two-letter Spotify market codes, such as `US` or `GB`.
2. Add `top`, `trending`, or a supported genre chart ID.
3. Optionally enter a positive whole number for shows per market and chart.
4. Leave the limit empty to return all available results until the source is exhausted.
5. Start the run and open the `dataset` link in the output.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `markets` | array of strings | Selects one or more supported Spotify market codes. Each market is used with every selected chart. |
| `charts` | array of strings | Selects `top`, `trending`, or a supported genre chart ID. Each chart is used with every selected market. |
| `maxShowsPerCombination` | integer | Limits shows saved for each market/chart pair. Leave it empty to return all available results until the source is exhausted. Spotify currently exposes up to 200 shows for universal charts and up to 50 for genre charts. |

**Example input**

Start with one market and the top chart:

```json
{
  "markets": [
    "US"
  ],
  "charts": [
    "top"
  ]
}
```

#### 🧾 Output

The run output includes a `dataset` link to the default dataset. It contains one row shape for podcast chart listings.

**Dataset row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `podcastName` | string | Name of the podcast on Spotify. |
| `spotifyId` | string | Stable Spotify ID for the show. |
| `podcastUrl` | URL string | Public Spotify page for the show. |
| `market` | string | Spotify market code for this listing. |
| `chart` | string | Spotify chart ID for this listing. |
| `rank` | integer | Position in the selected chart. |
| `observedAt` | ISO 8601 timestamp | UTC time when this listing was collected. |
| `sourceChartUrl` | URL string | Public Spotify chart page for this market and chart. |
| `rankMovement` | string, optional | Spotify's movement label, when supplied. |
| `rankChange` | integer, optional | Numeric change from a comparable prior rank. Positive values mean the show moved up, and the field is omitted when no comparison is available. |
| `publisher` | string, optional | Publisher or creator, when supplied. |
| `description` | string, optional | Current podcast description, when supplied. |
| `artworkUrl` | URL string, optional | Public artwork URL, when supplied. |

**Example row**

This is a real row from a successful run with one US market and the `top` chart:

```json
{
  "podcastName": "Spotify Live",
  "spotifyId": "2K5tDp2QRuZy16KTWoWq6B",
  "podcastUrl": "https://open.spotify.com/show/2K5tDp2QRuZy16KTWoWq6B",
  "market": "US",
  "chart": "top",
  "rank": 1,
  "observedAt": "2026-08-26T18:38:11.828Z",
  "sourceChartUrl": "https://podcastcharts.byspotify.com/us/top-podcasts",
  "rankMovement": "UNCHANGED",
  "rankChange": 0,
  "publisher": "Spotify",
  "description": "Spotify Live is a premium live music series built for fans featuring unforgettable performances from today’s most iconic artists.",
  "artworkUrl": "https://i.scdn.co/image/ab67656300005f1f859c7317f65324c3b5bce785"
}
```

Rankings and descriptions can change as Spotify updates its public charts.

#### 💳 Pricing

**How charges work**

Pay-per-event pricing charges `$0.00001` for each ranked podcast show saved to the dataset. The event is tied to the saved show, and the Apify Console shows the active price before a run. The number of charges depends on the rows saved by your selected market and chart pairs.

A lower per-pair limit can reduce the number of saved rows and charges.

#### 🔌 Integrations

**Dataset access**

Use the `dataset` link from the run output to read rows through the Apify dataset API or export them in the formats Apify offers. Keep `podcastUrl` and `sourceChartUrl` when you need public links back to Spotify.

**Video guide**

See this Apify integrations video:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What happens when I select several markets and charts?

Every selected chart is used with every selected market. The show limit applies separately to each pair, so one run can contain rows from several combinations.

##### What does an empty show limit do?

Leaving `maxShowsPerCombination` empty returns all available results until the source is exhausted. Spotify currently exposes up to 200 shows for universal charts and up to 50 for genre charts.

##### Why is `rankChange` missing?

It is included only when a comparable prior observation is available. Spotify's `rankMovement` label can still be present without a numeric change.

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

No. This Actor reads Spotify's public chart data and does not require buyer authentication to Spotify.

##### Does it return episodes or audio?

No. The scope is ranked podcast listings. It does not return episodes, reviews, audio, listening counts, downloads, revenue, demographics, or private audience data.

##### Is this historical ranking data?

No. Each run is a current snapshot at observation time. To compare dates, keep datasets from repeated runs and compare the same show's `rank` by market and chart.

##### Which charts can I choose?

Use `top` for Top Podcasts, `trending` for Trending Podcasts, or a supported genre chart ID. Genre charts are available only in the supported markets for that chart.

##### Can a chart return fewer shows than my limit?

Yes. The limit is a ceiling for each pair, and the available source rows may be fewer.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~spotify-podcast-charts/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Spotify Podcast and Episode Search Scraper](https://apify.com/automation-lab/spotify-podcast-episode-search): Search public Spotify podcasts and episodes by keyword.
- [Podchaser Podcast, Episode & Creator Scraper](https://apify.com/parseforge/podchaser-scraper): Search Podchaser podcasts, episodes, and creator profiles by query or URL.
- [Apple Podcast Scraper](https://apify.com/sourabhbgp/apple-podcast-scraper): Search Apple Podcasts, collect show details, reviews, episodes, or charts.
- [Apple Podcasts + Listen Notes Scraper](https://apify.com/crawlerbros/applepodcasts-listennotes-scraper): Compare podcast and episode data from Apple Podcasts and Listen Notes.
- [Podcast Scraper: Shows, Episodes & Top Charts](https://apify.com/glitchbound/podcast-scraper): Collect Apple Podcasts shows, episodes, and top chart entries by country.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `markets` (type: `array`):

Add one or more supported Spotify market codes, such as `US` or `GB`. Each market is used with every chart you select.

## `charts` (type: `array`):

Add one or more supported chart IDs. Use `top` for Top Podcasts, `trending` for Trending Podcasts, or a supported genre chart ID. Each chart is used with every market you select.

## `maxShowsPerCombination` (type: `integer`):

Optionally enter a positive whole number of shows to keep for each market and chart pair. Leave it empty to return all available results until the source is exhausted. Spotify currently exposes up to 200 shows for universal charts and up to 50 for genre charts.

## Actor input object example

```json
{
  "markets": [
    "US",
    "GB"
  ],
  "charts": [
    "top",
    "trending"
  ],
  "maxShowsPerCombination": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

A link to the dataset with one row for each podcast listing.

# 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 = {
    "markets": [
        "US"
    ],
    "charts": [
        "top"
    ],
    "maxShowsPerCombination": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/spotify-podcast-charts").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 = {
    "markets": ["US"],
    "charts": ["top"],
    "maxShowsPerCombination": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/spotify-podcast-charts").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 '{
  "markets": [
    "US"
  ],
  "charts": [
    "top"
  ],
  "maxShowsPerCombination": 20
}' |
apify call maximedupre/spotify-podcast-charts --silent --output-dataset

```

## MCP server setup

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

```

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/USbzBOTUzO4D060iq/builds/PguXEqUAyFLVPlvmO/openapi.json
