# Apple Podcasts Scraper - Charts by Country, RSS, Episodes (`automia-admin/apple-podcasts-scraper`) Actor

Scrape Apple Podcasts top charts by country, search shows by keyword and list episodes with direct audio URLs. Every show comes with its RSS feed, episode count and latest release date, so you can tell active shows from dead ones. No browser, no proxy, no API key.

- **URL**: https://apify.com/automia-admin/apple-podcasts-scraper.md
- **Developed by:** [Andrés Santiso](https://apify.com/automia-admin) (community)
- **Categories:** AI, Videos, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 podcasts

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/platform/actors/running/actors-in-store#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

## Apple Podcasts Scraper - Charts, Search & Episodes

Get Apple Podcasts data as structured rows: the **top-chart of any country**, a **keyword
search**, and optionally the **latest episodes** of every show with their direct audio URL.

No browser, no proxy, no API key. A 50-show chart run finishes in a few seconds.

### What you get

For every show:

| Field | Description |
|---|---|
| `chartRank` | Position in the country chart (chart mode only) |
| `title` | Show name |
| `publisher` | Who publishes it |
| `appleUrl` | Apple Podcasts page |
| `feedUrl` | **The show's RSS feed** - the field most other scrapers leave out |
| `episodeCount` | Total episodes published |
| `latestEpisodeDate` | When the newest episode came out - tells you at a glance if a show is still active |
| `primaryGenre`, `genres` | Apple's genre labels |
| `contentAdvisoryRating` | Clean / Explicit |
| `countryOfOrigin` | Where the show is published from |
| `artworkUrl` | Cover art, 600x600 |
| `searchTerm` | Which of your keywords matched (search mode only) |
| `episodes` | Latest episodes, when enabled |

For every episode (when **Include episodes** is on):

`episodeId`, `title`, `releaseDate`, `durationSeconds`, `audioUrl` (direct MP3),
`appleUrl`, `guid`, `description`.

### Typical uses

- **Track a chart daily** and see which shows enter, climb or drop.
- **Find shows in a niche** and get their RSS feeds for further processing.
- **Spot dead shows**: `latestEpisodeDate` older than a few months means the show stopped.
- **Feed an AI pipeline**: episode titles, descriptions and audio URLs, ready to transcribe.
- **Compare storefronts**: the same run against `US`, `GB`, `DE` and `BR` shows how a market differs.

### Input

```json
{
  "mode": "chart",
  "country": "us",
  "maxItems": 50,
  "includeEpisodes": false
}
```

Keyword search instead:

```json
{
  "mode": "search",
  "country": "gb",
  "searchTerms": ["true crime", "personal finance"],
  "maxItems": 50,
  "includeEpisodes": true,
  "maxEpisodesPerPodcast": 5
}
```

Running it with **no input at all** returns the current US top 50.

### Limits, stated honestly

- Apple caps a chart at **100 shows** and each keyword search at about **100 results**.
  Asking for more returns what Apple gives, not an error.
- The country must be a storefront where Apple Podcasts exists. An unknown code makes the run
  fail with a clear message rather than returning empty.
- Charts are Apple's public ranking. This Actor does not compute listener numbers, download
  counts or revenue, because Apple does not publish them.
- **No personal data.** Reviews and reviewer profiles are deliberately not scraped.

### Pricing

Pay per event:

- **Actor start** - once per run.
- **Show scraped** - one per show returned.
- **Episode scraped** - one per episode returned, and only when you turn episodes on.

If a run returns nothing, nothing is charged beyond the start.

### Data source

Apple's public podcast catalogue: the Apple Marketing Tools charts feed and the iTunes Search
API. Both are public HTTP endpoints that require no key.

# Actor input Schema

## `mode` (type: `string`):

"Top chart" reads Apple's official podcast chart for the chosen country (up to 100 shows). "Keyword search" searches the Apple Podcasts catalogue instead.

## `searchTerms` (type: `array`):

One or more keywords, show names or topics. Each term is searched separately and the results are merged and de-duplicated.

## `country` (type: `string`):

Two-letter country code of the Apple storefront, e.g. US, GB, DE, BR, AR, JP. Charts and search results differ by country.

## `maxItems` (type: `integer`):

How many shows to return. In chart mode Apple caps the chart at 100 shows per country; in search mode the Apple search API returns at most 100 results per term.

## `includeEpisodes` (type: `boolean`):

Off by default. When enabled, each show is enriched with its most recent episodes (title, release date, duration and direct audio URL). This costs one extra request per show and is charged as a separate event, only for episodes actually returned.

## `maxEpisodesPerPodcast` (type: `integer`):

How many recent episodes to fetch per show. Only used when "Also fetch recent episodes" is enabled.

## Actor input object example

```json
{
  "mode": "chart",
  "searchTerms": [
    "true crime"
  ],
  "country": "us",
  "maxItems": 50,
  "includeEpisodes": false,
  "maxEpisodesPerPodcast": 5
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "true crime"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automia-admin/apple-podcasts-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 = { "searchTerms": ["true crime"] }

# Run the Actor and wait for it to finish
run = client.actor("automia-admin/apple-podcasts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "true crime"
  ]
}' |
apify call automia-admin/apple-podcasts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automia-admin/apple-podcasts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/WNEu1qwrZ9OjcTyWO/builds/ElEQBLp5fkeUjsW4j/openapi.json
