# Apple Podcasts Scraper — Search, Charts, Episodes & Reviews (`taroyamada/apple-podcast-scraper`) Actor

Search Apple Podcasts shows by keyword; optionally pull top charts by country, recent episodes and listener reviews (rating, title, text). Export publisher, RSS URL, genre and counts to CSV/JSON. No API key.

- **URL**: https://apify.com/taroyamada/apple-podcast-scraper.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** Social media, SEO tools
- **Features:** Limited permissions
- **Stats:** 33 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

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?

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

## Apple Podcasts Scraper — Search, Episodes & Reviews to CSV

Need to scrape Apple Podcasts without an API key? This Actor searches shows by keyword, pulls top charts by country, looks up collection IDs, and can export recent episodes from each show’s RSS plus up to 10 public listener reviews per show — all to CSV/JSON via public iTunes and RSS endpoints. Turn on `includeEpisodes` and/or `includeReviews` when you need episode lists or review text; leave them off for a search-or-chart discovery run. Not affiliated with Apple.

**Top chart example:** Add one `chartRequests` entry (country + feedType + small limit). Each chart/show row is one `result` at **$0.0025** (Actor Start **$0.005** once). Example: US top podcasts, limit 3 → about **$0.0125** when 3 rows succeed.

**Sample output** (3 real rows from a `searchTerm: "technology"`, `limit: 3` run on 2026-10-13):

| name | artist | collectionId | genre | trackCount | releaseDate |
|---|---|---|---|---|---|
| Bloomberg Tech | Bloomberg | 1611767434 | Tech News | 1163 | 2026-10-11 |
| NVIDIA AI Podcast | NVIDIA | 1186480811 | Technology | 306 | 2026-06-10 |
| TED Tech | TED Tech | 470624027 | Technology | 301 | 2026-10-09 |

**Use it for:**

- Podcast research: find shows on a topic with publisher, feed URL and episode count.
- Chart monitoring: pull Apple Podcasts top charts by country to spot rising shows.
- Episode export: list recent episodes from show RSS feeds for a watchlist.

**CTA:** Open **Input** (link below) → leave the prefilled defaults → **Start**. First paid proof ≈ **$0.0125** (`limit` 3).
[Open Input (leave defaults → Start)](https://console.apify.com/actors/82cKuLhJJl9vLKVec/input)

```json
{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false
}
```

Top chart example (each row → one `result` at $0.0025):

```json
{
  "chartRequests": [
    {
      "country": "us",
      "feedType": "podcasts",
      "limit": 3
    }
  ],
  "includeEpisodes": false
}
```

> **Do not clear Limit.** Keep Limit at **3** (max 200).

#### Demo

[Watch the Apple Podcasts Scraper demo on YouTube](https://www.youtube.com/watch?v=6SwlxgHf5MM)

[![Watch the Apple Podcasts Scraper demo](https://img.youtube.com/vi/6SwlxgHf5MM/hqdefault.jpg)](https://www.youtube.com/watch?v=6SwlxgHf5MM)

Paid first run ≈ **$0.0125** total (`limit` 3): Actor Start $0.005 + 3×$0.0025.

#### Store Quickstart

##### Low-cost discovery

Start with one search term and one country. This keeps the initial source check small; use the returned show IDs or source URLs in the Reviews, Chart, or Media Buyer workflow above.

Recommended first run:

```json
{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false
}
```

##### High-value follow-on reports

This actor remains the low-cost source step. The linked Reviews and Chart actors provide the next evidence/report step, while the Media Buyer actor provides the shortlist/export deliverable. Their Store pages are the pricing source of truth for those value events.

See [`docs/value-path-sample.json`](docs/value-path-sample.json) for the low-cost discovery input and the three follow-on routes.

#### Use with Apify MCP

Exact actor: `taroyamada/apple-podcast-scraper`

Sample input JSON:

```json
{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false,
  "delivery": "dataset"
}
```

#### Run the next report

Use this actor for focused discovery, then move into the proven Apple Podcasts workflow:

- [Review public listener feedback](https://apify.com/taroyamada/apple-podcast-reviews-monitor) when reputation and rating evidence is the next decision.
- [Track chart movement](https://apify.com/taroyamada/apple-podcast-chart-tracker) when rank and change evidence is the next decision.
- [Build a media buyer shortlist](https://apify.com/taroyamada/podcast-media-buyer-shortlist-scraper) when the next output is a ranked set of shows by topic, country, cadence, and public fit signals.

These follow-on actors use public podcast and RSS surfaces. Start with a small discovery set, then pass the useful public source URLs or search terms into one report workflow.

#### Input examples

##### Search quickstart

```json
{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false
}
```

##### Chart rank check

```json
{
  "chartRequests": [
    {
      "country": "us",
      "feedType": "podcasts",
      "limit": 25
    }
  ],
  "includeEpisodes": false
}
```

##### Watchlist refresh

```json
{
  "lookupIds": [
    "1200361736",
    "1545953110"
  ],
  "includeEpisodes": true
}
```

#### Use-case inputs

**Niche show research with recent episodes (RSS):**

```json
{ "searchTerm": "true crime", "country": "gb", "limit": 10, "includeEpisodes": true }
```

**Top episodes chart instead of shows:**

```json
{ "searchTerm": "", "chartRequests": [{ "country": "us", "feedType": "podcast-episodes", "limit": 25 }] }
```

**Compare top show charts across two countries:**

```json
{ "searchTerm": "", "chartRequests": [{ "country": "us", "feedType": "podcasts", "limit": 20 }, { "country": "jp", "feedType": "podcasts", "limit": 20 }] }
```

Export any run as CSV or JSON from the dataset tab.

#### Sample output

This is a discovery-row example. It is intentionally smaller than the report, evidence, and export outputs produced by the linked follow-on actors.

```json
{
  "meta": {
    "actorName": "apple-podcast-scraper",
    "actorTitle": "Apple Podcasts Scraper",
    "bundle": "Podcast Research & Media Planning Pack",
    "fetchedAt": "2026-05-06T00:00:00.000Z",
    "totalRows": 1
  },
  "rows": [
    {
      "actorName": "apple-podcast-scraper",
      "rowType": "podcast_search_result",
      "collectionId": 1535144780,
      "showName": "Example Podcast",
      "publisher": "Example Network",
      "country": "us",
      "rank": null,
      "sourceUrl": "https://podcasts.apple.com/us/podcast/example/id1535144780",
      "fetchedAt": "2026-05-06T00:00:00.000Z"
    }
  ],
  "warnings": []
}
```

#### Output fields

- `rowType`
- `collectionId`
- `showName`
- `publisher`
- `country`
- `rank`
- `episodeTitle`
- `sourceUrl`
- `fetchedAt`

Rows also include source URLs, fetch timestamps, warnings when a source is partial, and stable IDs when the workflow supports recurring change detection.

#### Pricing and no-change runs

$0.005 actor start and $0.0025 per dataset row. Empty no-change watchlist runs should avoid dataset writes.

The default dataset is the billable surface. Dry runs, validation-only runs, missing-key warnings, and unchanged recurring polls should not write payable default-dataset rows.

Use this actor for low-cost discovery and source validation. The linked Reviews, Chart, and Media Buyer actors have separate report and export events; their Store pages are the pricing source of truth for those deliverables.

#### Compliance guardrails

- Uses public Apple and RSS endpoints; it is not affiliated with or endorsed by Apple.
- Does not require account sessions, browser automation, or private podcast dashboards.
- Use output for research, ranking analysis, and monitoring workflows.
- Do not use provider emblems or wording that implies approval by an upstream data provider.

#### See also

The three routes above cover review evidence, chart movement, and shortlist workflows for discovered shows. Reach the sponsor evidence report from the Reviews or Chart actor after a public signal is worth investigating.

#### Related Actors

- [`taroyamada/apple-podcast-reviews-monitor`](https://apify.com/taroyamada/apple-podcast-reviews-monitor)
- [`taroyamada/apple-podcast-chart-tracker`](https://apify.com/taroyamada/apple-podcast-chart-tracker)
- [`taroyamada/apple-podcast-episode-watchlist`](https://apify.com/taroyamada/apple-podcast-episode-watchlist)
- [`taroyamada/podcast-sponsor-contact-intelligence`](https://apify.com/taroyamada/podcast-sponsor-contact-intelligence)
- [`taroyamada/podcast-sponsor-evidence-report-scraper`](https://apify.com/taroyamada/podcast-sponsor-evidence-report-scraper)
- [`taroyamada/podcast-media-buyer-shortlist-scraper`](https://apify.com/taroyamada/podcast-media-buyer-shortlist-scraper)
- [`taroyamada/podcast-category-network-benchmark-report`](https://apify.com/taroyamada/podcast-category-network-benchmark-report)

## Actor input Schema

### `searchTerm` (type: `string`):

Optional keyword search powered by the iTunes Search API. This is the lowest-friction quickstart lane for the first useful buyer run.

### `chartRequests` (type: `array`):

Optional array of Apple rankings requests. Leave this empty for the cheapest first success, then add one chart lane after the search quickstart is green. Each item can include {"country":"us","feedType":"podcasts","limit":10}. Supported feedType values: podcasts, podcast-episodes.

### `lookupIds` (type: `array`):

Optional list of Apple Podcasts collection IDs to resolve through the iTunes Lookup API. Add these when you want recurring watchlist refreshes for known shows.

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

Default ISO country code for search and lookup requests (us, gb, jp, etc). Chart requests can override this per item.

### `limit` (type: `integer`):

Maximum number of podcasts returned for search, and the default limit for chart requests that omit their own limit. Keep the first run small, then scale up only after the quickstart output is already useful.

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

Also fetch recent episodes for each resolved podcast (slower). Leave this off unless episode-level context materially improves the workflow.

### `delivery` (type: `string`):

How to deliver results. Start with 'dataset' for reviewable output, then move to 'webhook' after the buyer approves the payload shape.

### `webhookUrl` (type: `string`):

Webhook URL to send results to when delivery is 'webhook'. Works with Slack, Discord, Zapier, or any HTTP endpoint.

### `dryRun` (type: `boolean`):

If true, runs without saving results or sending webhooks. Useful for testing a new watch setup or validating a webhook endpoint before going live.

### Actor input object example

```json
{
  "searchTerm": "technology",
  "chartRequests": [],
  "lookupIds": [],
  "country": "us",
  "limit": 3,
  "includeEpisodes": false,
  "delivery": "dataset",
  "dryRun": false
}
```

## 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 = {
    "searchTerm": "technology",
    "chartRequests": [],
    "lookupIds": [],
    "limit": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/apple-podcast-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 = {
    "searchTerm": "technology",
    "chartRequests": [],
    "lookupIds": [],
    "limit": 3,
}

## Run the Actor and wait for it to finish
run = client.actor("taroyamada/apple-podcast-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 '{
  "searchTerm": "technology",
  "chartRequests": [],
  "lookupIds": [],
  "limit": 3
}' |
apify call taroyamada/apple-podcast-scraper --silent --output-dataset

```

### MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,taroyamada/apple-podcast-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/82cKuLhJJl9vLKVec/builds/8K4VbesCg53YWCEoC/openapi.json

### Works well with

- [Apple Podcasts Chart Tracker](https://apify.com/taroyamada/apple-podcast-chart-tracker) — track top-chart ranks by country/genre with movement reports
- [Article Content Extractor](https://apify.com/taroyamada/article-content-extractor) — clean article text and metadata for RAG/LLM pipelines
- [Trade Show Exhibitor Intelligence](https://apify.com/taroyamada/trade-show-exhibitor-intelligence) — turn exhibitor pages into booth and lead lists

# Actor input Schema

## `searchTerm` (type: `string`):

Leave the prefilled “technology” and click Start for the first run (≈ $0.0125). Or type any topic keyword. Keep Limit at 3.

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

Leave default us for the first run. ISO country code for search and lookup (us, gb, jp, etc). Chart requests can override this per item.

## `limit` (type: `integer`):

First run: keep 3. Do not clear — empty still bills and falls back to 3 (max 200).

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

Leave off for the cheapest first success. Turn on only when you need recent episodes.

## `includeReviews` (type: `boolean`):

Off by default. Turn on to add up to 10 most recent public Apple Podcasts listener reviews (title, rating, author, text, date) to each show.

## `chartRequests` (type: `array`):

Leave empty on the first run. Top chart example (each row → one result at $0.0025): \[{"country":"us","feedType":"podcasts","limit":3}]. Add one country/feed after search quickstart succeeds.

## `lookupIds` (type: `array`):

Leave empty on the first run. Add collection IDs only for watchlist refresh.

## `delivery` (type: `string`):

How to deliver results. Start with 'dataset' for reviewable output, then move to 'webhook' after the buyer approves the payload shape.

## `webhookUrl` (type: `string`):

Webhook URL to send results to when delivery is 'webhook'. Works with Slack, Discord, Zapier, or any HTTP endpoint.

## `dryRun` (type: `boolean`):

If true, runs without saving results or sending webhooks. Useful for testing a new watch setup or validating a webhook endpoint before going live.

## Actor input object example

```json
{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false,
  "includeReviews": false,
  "chartRequests": [],
  "lookupIds": [],
  "delivery": "dataset",
  "dryRun": false
}
```

# Actor output Schema

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

Dataset containing all scraped data

# 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 = {
    "searchTerm": "technology",
    "country": "us",
    "limit": 3,
    "includeEpisodes": false,
    "chartRequests": [],
    "lookupIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/apple-podcast-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 = {
    "searchTerm": "technology",
    "country": "us",
    "limit": 3,
    "includeEpisodes": False,
    "chartRequests": [],
    "lookupIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/apple-podcast-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 '{
  "searchTerm": "technology",
  "country": "us",
  "limit": 3,
  "includeEpisodes": false,
  "chartRequests": [],
  "lookupIds": []
}' |
apify call taroyamada/apple-podcast-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,taroyamada/apple-podcast-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/82cKuLhJJl9vLKVec/builds/01yuZbs18idughfq9/openapi.json
