# Apple Podcasts Scraper · Shows, Episodes, Genres & Rankings (`reapx/apple-podcasts-scraper`) Actor

Scrape Apple Podcasts catalog, shows, episodes, top charts, genres, and rankings. HTTP-only iTunes Search API scraper for audio analytics, podcast discovery, and media datasets.

- **URL**: https://apify.com/reapx/apple-podcasts-scraper.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 podcast show returneds

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/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

![reapX — public sources in, addressable records out](https://reapx.dev/reapx.gif)

## Apple Podcasts Scraper · Shows, Episodes, Genres & Rankings

Extract comprehensive Apple Podcasts directory data, show metadata, episode counts, RSS feed URLs, artwork, genres, and top podcast chart rankings across 50+ countries. Powered by an HTTP-only client hitting Apple's public iTunes Search and RSS Marketing APIs for maximum speed, zero browser overhead, and ultra-low cost.

> Maintained by **reapX**. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at [reapx.dev/data/apple-podcasts-scraper/](https://reapx.dev/data/apple-podcasts-scraper/) and mirrored as an open dataset on [Hugging Face](https://huggingface.co/datasets/reapxdev/apple-podcasts-scraper) and [Kaggle](https://www.kaggle.com/datasets/reapxdev/apple-podcasts-scraper). Questions: reapxdev@proton.me

***

### Overview

**Apple Podcasts Scraper** provides structured, real-time access to the entire Apple Podcasts global directory and top ranking charts. Whether you are conducting audio media research, building podcast discovery engines, training AI/LLM models, monitoring podcast rankings, or analyzing publisher market share, this scraper delivers complete metadata without requiring complex browser automation or third-party subscriptions.

#### Key Capabilities

- **Global Storefront Coverage**: Query podcasts across more than 50 national storefronts (United States, United Kingdom, Canada, Australia, Germany, France, Japan, Spain, Italy, Brazil, India, South Korea, Sweden, Netherlands, Mexico, and more).
- **Top Charts Rankings**: Fetch live, top-ranking podcasts across all categories or specific Apple Podcasts genres (Technology, News, Business, Science, True Crime, Comedy, History, Sports, Health & Fitness, Society & Culture, Arts, Education).
- **Keyword Search & Discovery**: Perform targeted keyword searches across podcast titles, publisher/artist names, descriptions, and topic tags.
- **Direct ID Lookup**: Instantly look up specific podcasts by their iTunes collection ID in batches.
- **Rich Podcast Metadata**: Extract clean, addressable entity records featuring podcast titles, creator/publisher names, direct Apple Podcasts URLs, public RSS feed URLs, primary & secondary genre classifications, total episode counts, latest release dates, content advisory ratings, and 600x600 high-resolution artwork URLs.
- **Addressable Entity Keying**: Every row emits a unique `slug` (URL-friendly slugified podcast title) ensuring seamless integration into downstream web publishing and data pipelines.

***

### ⬇️ Input

The actor accepts flexible JSON configuration parameters allowing fine-grained control over scraping modes, search queries, genre filters, storefront countries, and output volume limits.

#### Input Parameters

| Parameter | Type | Required | Default | Description |
| :--- | :--- | :--- | :--- | :--- |
| `mode` | `string` | **Yes** | `"search"` | Scraping execution mode: `search` (keyword search), `top_charts` (rankings), `lookup_genre` (genre search), or `lookup_ids` (direct ID lookup). |
| `searchTerm` | `string` | No | `"technology"` | Search keyword or phrase for querying Apple Podcasts. Leave empty for `top_charts` mode. |
| `genreId` | `string` | No | `"1318"` | Apple Podcasts numeric Genre ID (e.g. `1318` for Technology, `1311` for News, `1488` for True Crime, `1483` for Business). |
| `country` | `string` | **Yes** | `"US"` | Two-letter ISO 3166-1 alpha-2 country code (e.g. `US`, `GB`, `CA`, `AU`, `DE`, `FR`, `JP`, `ES`). |
| `maxItems` | `integer` | **Yes** | `50` | Maximum number of podcast show records to return (1 to 1000). Controls run cost and execution duration. |
| `explicit` | `string` | No | `"all"` | Content advisory filter: `all` (all podcasts), `clean` (clean content only), or `explicit` (explicit content only). |
| `podcastIds` | `string` | No | `""` | Comma-separated list of iTunes podcast collection IDs for direct lookup in `lookup_ids` mode (e.g. `1200361736,1080179320`). |

#### Workflows & JSON Examples

##### Example 1: Top Technology Podcasts in the United States

```json
{
  "mode": "top_charts",
  "genreId": "1318",
  "country": "US",
  "maxItems": 50
}
```

##### Example 2: Keyword Search for Artificial Intelligence Podcasts

```json
{
  "mode": "search",
  "searchTerm": "artificial intelligence",
  "country": "US",
  "maxItems": 50,
  "explicit": "all"
}
```

##### Example 3: Direct ID Lookup of Specific Shows

```json
{
  "mode": "lookup_ids",
  "podcastIds": "1200361736,1080179320,1235836821",
  "country": "US",
  "maxItems": 50
}
```

***

### ⬆️ Output

Scraped items are written to the run's default dataset. Each output record represents a single Apple Podcasts show.

#### Dataset Field Specification

| Field Name | Type | Key | Description | Example |
| :--- | :--- | :--- | :--- | :--- |
| `slug` | `string` | **Primary Key** | URL-friendly slugified podcast collection title used as entity page key. | `"the-future-of-everything"` |
| `podcastId` | `integer` | Metric | iTunes collection identifier for the podcast show. | `1235836821` |
| `podcastTitle` | `string` | Attribute | Full title of the podcast show. | `"The Future of Everything"` |
| `artistName` | `string` | Attribute | Creator, network, or publisher of the podcast. | `"Stanford Engineering"` |
| `artistId` | `integer` | Attribute | iTunes artist identifier for the publisher network. | `1280771285` |
| `artistViewUrl` | `string` | URL | Apple Podcasts store profile URL for the creator/artist. | `"https://podcasts.apple.com/us/artist/stanford/1280771285"` |
| `podcastUrl` | `string` | URL | Direct Apple Podcasts web page URL for the show. | `"https://podcasts.apple.com/us/podcast/the-future-of-everything/id1235836821"` |
| `feedUrl` | `string` | URL | Public RSS audio feed URL for podcast episode downloads. | `"https://feeds.simplecast.com/Y8_HoeNW"` |
| `primaryGenreName`| `string` | Categorical | Primary Apple Podcasts genre category. | `"Science"` |
| `genres` | `array[str]` | Categorical | Array of all genre category names assigned to the show. | `["Science", "Technology", "Podcasts"]` |
| `trackCount` | `integer` | Metric | Total number of published episodes available. | `388` |
| `releaseDate` | `string` | Timestamp | ISO 8601 timestamp of the latest episode release date. | `"2026-07-31T14:00:00Z"` |
| `country` | `string` | Metadata | Storefront country code or territory name. | `"USA"` |
| `currency` | `string` | Metadata | Storefront currency code. | `"USD"` |
| `contentAdvisoryRating`| `string` | Filter | Content advisory tag (`Clean` or `Explicit`). | `"Clean"` |
| `artworkUrl` | `string` | Media URL | High-resolution (600x600) cover art image URL. | `"https://is1-ssl.mzstatic.com/image/thumb/.../600x600bb.jpg"` |
| `rankingPosition` | `integer` | Metric | Position in top charts ranking (only present in `top_charts` mode). | `1` |
| `searchQuery` | `string` | Context | Search term or category context used to retrieve the show. | `"technology"` |

#### Worked Output JSON Sample

```json
{
  "slug": "the-future-of-everything",
  "podcastId": 1235836821,
  "podcastTitle": "The Future of Everything",
  "artistName": "Stanford Engineering",
  "artistId": 1280771285,
  "artistViewUrl": "https://podcasts.apple.com/us/artist/stanford/1280771285?uo=4",
  "podcastUrl": "https://podcasts.apple.com/us/podcast/the-future-of-everything/id1235836821?uo=4",
  "feedUrl": "https://feeds.simplecast.com/Y8_HoeNW",
  "primaryGenreName": "Science",
  "genres": [
    "Science",
    "Podcasts",
    "Technology"
  ],
  "trackCount": 388,
  "releaseDate": "2026-07-31T14:00:00Z",
  "country": "USA",
  "currency": "USD",
  "contentAdvisoryRating": "Clean",
  "artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/ce/00/b9/ce00b95d-6a13-587f-417b-c750ec0a432c/mza_7524670328668388617.jpg/600x600bb.jpg",
  "rankingPosition": 12,
  "searchQuery": "top_charts:US:1318"
}
```

***

### How it works

The **Apple Podcasts Scraper** is built from the ground up for high reliability, zero latency overhead, and minimal compute footprint:

1. **Direct API Integration**: Unlike web scrapers that spin up heavy headless browsers (Headless Chrome / Playwright) consuming gigabytes of RAM, this actor communicates directly over HTTP with Apple's official iTunes Search API (`itunes.apple.com/search` & `itunes.apple.com/lookup`) and Apple Podcasts RSS Marketing API (`rss.applemarketingtools.com`).
2. **Automated Metadata Enrichment**: When scraping top charts, the actor fetches real-time chart rankings from Apple's RSS feed service and automatically enriches each entry by querying iTunes lookup API for full publisher profile URLs, RSS feed endpoints, episode counts, and artwork.
3. **Resilient Rate Limiting & Backoff**: Apple's API endpoints enforce standard HTTP rate limits. The actor implements automatic exponential backoff retry algorithms when encountering temporary `429 Too Many Requests` or `5xx Server Error` statuses.
4. **Per-Item Pay-Per-Event Billing**: You are charged exactly `$0.002` per podcast show record actually extracted and saved. Unresolved queries, blocked requests, or empty responses cost zero.
5. **Streaming Output & Budget Enforcement**: Records are streamed into Apify's default dataset row-by-row as they arrive. If a run reaches its pre-configured maximum budget cap (`maxTotalChargeUsd`), it terminates cleanly without losing previously saved items.

***

### Use Cases & Applications

- **Podcast Market Research & Competitive Intelligence**: Monitor top ranking podcasts across major genres and country storefronts to track publishing trends, host popularity, and market share.
- **Audio & Media LLM Training Datasets**: Aggregate thousands of public podcast metadata records and RSS feed URLs to build datasets for audio processing, speech-to-text pipelines, and media recommendation engines.
- **Podcast Directory & Discovery Apps**: Fuel mobile and web applications with real-time podcast search, high-resolution artwork, and direct RSS audio streams.
- **Ad Tech & Sponsor Identification**: Locate popular podcasts within specific target niches (e.g. B2B software, personal finance, healthcare) to identify potential advertising and sponsorship opportunities.
- **Publisher & Catalog Archiving**: Index complete show catalogs for media companies, networks, and independent creators.

***

### 50 Pre-configured Tasks

This actor includes 50 distinct pre-configured data tasks spanning global top charts, genre lookups, and specialized niche searches:

| Task Name | Title | Description | Mode / Query |
| :--- | :--- | :--- | :--- |
| `top-podcasts-us` | Top Apple Podcasts in United States | Scrape top ranking podcasts in the US storefront. | `top_charts` (US) |
| `top-podcasts-gb` | Top Apple Podcasts in United Kingdom | Scrape top ranking podcasts in the UK storefront. | `top_charts` (GB) |
| `top-podcasts-ca` | Top Apple Podcasts in Canada | Scrape top ranking podcasts in Canada storefront. | `top_charts` (CA) |
| `top-podcasts-au` | Top Apple Podcasts in Australia | Scrape top ranking podcasts in Australia storefront. | `top_charts` (AU) |
| `top-podcasts-de` | Top Apple Podcasts in Germany | Scrape top ranking podcasts in Germany storefront. | `top_charts` (DE) |
| `top-podcasts-fr` | Top Apple Podcasts in France | Scrape top ranking podcasts in France storefront. | `top_charts` (FR) |
| `top-podcasts-jp` | Top Apple Podcasts in Japan | Scrape top ranking podcasts in Japan storefront. | `top_charts` (JP) |
| `top-podcasts-es` | Top Apple Podcasts in Spain | Scrape top ranking podcasts in Spain storefront. | `top_charts` (ES) |
| `top-podcasts-it` | Top Apple Podcasts in Italy | Scrape top ranking podcasts in Italy storefront. | `top_charts` (IT) |
| `top-podcasts-br` | Top Apple Podcasts in Brazil | Scrape top ranking podcasts in Brazil storefront. | `top_charts` (BR) |
| `top-podcasts-in` | Top Apple Podcasts in India | Scrape top ranking podcasts in India storefront. | `top_charts` (IN) |
| `top-podcasts-nl` | Top Apple Podcasts in Netherlands | Scrape top ranking podcasts in Netherlands storefront. | `top_charts` (NL) |
| `top-podcasts-se` | Top Apple Podcasts in Sweden | Scrape top ranking podcasts in Sweden storefront. | `top_charts` (SE) |
| `top-podcasts-mx` | Top Apple Podcasts in Mexico | Scrape top ranking podcasts in Mexico storefront. | `top_charts` (MX) |
| `top-podcasts-kr` | Top Apple Podcasts in South Korea | Scrape top ranking podcasts in South Korea storefront. | `top_charts` (KR) |
| `top-technology-us` | Top Technology Podcasts in US | Scrape top ranking Technology podcasts (Genre 1318) in US. | `top_charts` (1318) |
| `top-news-us` | Top News Podcasts in US | Scrape top ranking News podcasts (Genre 1311) in US. | `top_charts` (1311) |
| `top-business-us` | Top Business Podcasts in US | Scrape top ranking Business podcasts (Genre 1483) in US. | `top_charts` (1483) |
| `top-science-us` | Top Science Podcasts in US | Scrape top ranking Science podcasts (Genre 1315) in US. | `top_charts` (1315) |
| `top-true-crime-us` | Top True Crime Podcasts in US | Scrape top ranking True Crime podcasts (Genre 1488) in US. | `top_charts` (1488) |
| `top-comedy-us` | Top Comedy Podcasts in US | Scrape top ranking Comedy podcasts (Genre 1303) in US. | `top_charts` (1303) |
| `top-history-us` | Top History Podcasts in US | Scrape top ranking History podcasts (Genre 1487) in US. | `top_charts` (1487) |
| `top-sports-us` | Top Sports Podcasts in US | Scrape top ranking Sports podcasts (Genre 1325) in US. | `top_charts` (1325) |
| `top-health-us` | Top Health Podcasts in US | Scrape top ranking Health & Fitness podcasts (Genre 1512) in US. | `top_charts` (1512) |
| `top-society-us` | Top Society & Culture Podcasts in US | Scrape top ranking Society & Culture podcasts (Genre 1324) in US. | `top_charts` (1324) |
| `top-arts-us` | Top Arts Podcasts in US | Scrape top ranking Arts podcasts (Genre 1301) in US. | `top_charts` (1301) |
| `top-education-us` | Top Education Podcasts in US | Scrape top ranking Education podcasts (Genre 1304) in US. | `top_charts` (1304) |
| `top-kids-family-us` | Top Kids & Family Podcasts in US | Scrape top ranking Kids & Family podcasts (Genre 1305) in US. | `top_charts` (1305) |
| `top-fiction-us` | Top Fiction Podcasts in US | Scrape top ranking Fiction podcasts (Genre 1489) in US. | `top_charts` (1489) |
| `top-religion-us` | Top Religion Podcasts in US | Scrape top ranking Religion & Spirituality podcasts (Genre 1314) in US. | `top_charts` (1314) |
| `search-artificial-intelligence` | Search AI Podcasts | Scrape podcasts matching artificial intelligence keywords. | `search` ("AI") |
| `search-startups-vc` | Search Startup Podcasts | Scrape podcasts matching startup and venture capital keywords. | `search` ("startups") |
| `search-personal-finance` | Search Personal Finance Podcasts | Scrape podcasts matching personal finance keywords. | `search` ("finance") |
| `search-cybersecurity` | Search Cybersecurity Podcasts | Scrape podcasts matching cybersecurity keywords. | `search` ("cybersecurity") |
| `search-investing-stocks` | Search Investing Podcasts | Scrape podcasts matching stock market investing keywords. | `search` ("investing") |
| `search-mental-health` | Search Mental Health Podcasts | Scrape podcasts matching mental health keywords. | `search` ("mental health") |
| `search-software-engineering` | Search Software Engineering Podcasts | Scrape podcasts matching software engineering keywords. | `search` ("software") |
| `search-data-science` | Search Data Science Podcasts | Scrape podcasts matching data science & ML keywords. | `search` ("data science") |
| `search-world-history` | Search World History Podcasts | Scrape podcasts matching world history keywords. | `search` ("history") |
| `search-climate-environment` | Search Climate Podcasts | Scrape podcasts matching climate change keywords. | `search` ("climate") |
| `search-astronomy-space` | Search Space & Astronomy Podcasts | Scrape podcasts matching space exploration keywords. | `search` ("space") |
| `search-pop-culture-movies` | Search Movie Review Podcasts | Scrape podcasts matching movie reviews & pop culture. | `search` ("movies") |
| `search-gaming-esports` | Search Gaming Podcasts | Scrape podcasts matching video games & esports keywords. | `search` ("gaming") |
| `search-digital-marketing` | Search Digital Marketing Podcasts | Scrape podcasts matching digital marketing & SEO keywords. | `search` ("marketing") |
| `search-philosophy-ethics` | Search Philosophy Podcasts | Scrape podcasts matching philosophy & ethics keywords. | `search` ("philosophy") |
| `search-cryptocurrency-web3` | Search Crypto & Web3 Podcasts | Scrape podcasts matching bitcoin & cryptocurrency keywords. | `search` ("crypto") |
| `search-architecture-design` | Search Design & Architecture Podcasts | Scrape podcasts matching architecture & UX design keywords. | `search` ("design") |
| `search-cooking-culinary` | Search Culinary & Food Podcasts | Scrape podcasts matching cooking & culinary arts keywords. | `search` ("cooking") |
| `search-parenting-family` | Search Parenting Podcasts | Scrape podcasts matching parenting & family advice keywords. | `search` ("parenting") |
| `lookup-featured-shows` | Direct Lookup of Featured Podcasts | Direct ID lookup of popular Apple Podcasts shows. | `lookup_ids` |

***

### Pricing & Billing

This actor uses Apify's **Pay-Per-Event (PPE)** pricing model:

- **Base Rate**: `$0.002` per podcast show record delivered.
- **Tiered Volume Discounts**: Automatic price reductions apply on higher subscription tiers (BRONZE `$0.0018`, SILVER `$0.0016`, GOLD `$0.0014`, PLATINUM `$0.0011`, DIAMOND `$0.0008`).
- **Platform Usage Included**: Compute units and platform usage are fully absorbed into the per-event price.
- **Zero Charge Protection**: If a search query or country storefront yields no results, or if a network error occurs, you are charged **`$0.00000`**.

***

### ❓ FAQ

##### 1. How does Apple Podcasts Scraper differ from third-party RSS aggregators?

Apple Podcasts Scraper queries Apple's official global directory APIs directly. This guarantees access to official iTunes genre classifications, Apple Podcasts storefront URLs, artwork image assets, and live top chart rankings that standard RSS feed parsers cannot provide.

##### 2. Are RSS feed URLs included for every podcast?

Yes! The scraper extracts the public `feedUrl` for every show whenever available in the Apple Podcasts directory. You can use these RSS feed URLs to directly stream or download episode audio files.

##### 3. How do country storefronts work?

Apple Podcasts operates distinct regional storefronts in over 50 countries. Top chart rankings and podcast availability can vary significantly between countries (e.g. `US`, `GB`, `JP`, `DE`). You can specify any valid two-letter ISO country code in the `country` parameter.

##### 4. What are Apple Podcasts Genre IDs?

Apple assigns standard numeric IDs to podcast categories. Some common genre IDs include:

- `1318` — Technology
- `1311` — News
- `1483` — Business
- `1315` — Science
- `1488` — True Crime
- `1303` — Comedy
- `1487` — History
- `1325` — Sports
- `1512` — Health & Fitness
- `1324` — Society & Culture

##### 5. How fast is a typical run?

Because the actor uses direct HTTP endpoints without headless browsers, fetching 50 to 500 podcast records typically completes in **under 10 to 30 seconds**.

##### 6. Can I cap the cost of a run?

Yes. You can configure `maxItems` in the input schema or set a maximum charge limit (`maxTotalChargeUsd`) in Apify Console. If the maximum budget is reached, the actor stops cleanly and saves all records fetched up to that point.

***

### Performance & Optimization

- **RAM Consumption**: 256 MB minimum / 1024 MB maximum.
- **Network Protocol**: Plain HTTP requests with automatic gzip/brotli compression.
- **Throughput**: ~100 to 500 podcast show records per minute depending on lookup batch sizes.

***

### 💬 Your feedback

We actively maintain and improve **Apple Podcasts Scraper**. If you encounter issues, need custom genre fields, or want to request new features:

- **Email**: reapxdev@proton.me
- **Bug Reports & Requests**: Open an issue on the Apify Console listing.
- **Public Archive**: Explore open datasets at [reapx.dev/data/apple-podcasts-scraper/](https://reapx.dev/data/apple-podcasts-scraper/).

***

*Disclaimer: Unofficial - not affiliated with Apple Inc. Collects public data only. reapx. Contact reapxdev@proton.me.*

### 🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

```json
{
  "mode": "top_charts",
  "country": "US",
  "maxItems": 50
}
```

### 📄 Sample output

One real row from a real run of this Actor, unedited.

```json
{
  "slug": "the-future-of-everything",
  "podcastId": 1235836821,
  "podcastTitle": "The Future of Everything",
  "artistName": "Stanford Engineering",
  "artistId": 1280771285,
  "artistViewUrl": "https://podcasts.apple.com/us/artist/stanford/1280771285?uo=4",
  "podcastUrl": "https://podcasts.apple.com/us/podcast/the-future-of-everything/id1235836821?uo=4",
  "feedUrl": "https://feeds.simplecast.com/Y8_HoeNW",
  "primaryGenreName": "Science",
  "genres": [
    "Science",
    "Podcasts",
    "Technology"
  ],
  "trackCount": 388,
  "releaseDate": "2026-07-31T14:00:00Z",
  "country": "USA",
  "currency": "USD",
  "contentAdvisoryRating": "Clean",
  "artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/ce/00/b9/ce00b95d-6a13-587f-417b-c750ec0a432c/mza_7524670328668388617.jpg/600x600bb.jpg",
  "searchQuery": "technology"
}
```

### ⚠️ Run outcomes and error handling

This Actor reports what happened in the run's **status message**, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.

| Outcome | What it means |
|---|---|
| **Success** | Rows were returned and you were charged `podcast-show-item` at $0.002 per row. |
| **No matches** | The source returned nothing for your filters. **Nothing is charged.** Widen the date window or drop a filter. |

#### What is guaranteed either way

- **Every row is pushed as it is built**, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
- **A field absent from the source is absent from the row.** Nothing is inferred, modelled or filled in to make a row look complete.

# Actor input Schema

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

Select the scraping execution mode: <code>search</code> for keyword search, <code>top\_charts</code> for top podcast rankings, <code>lookup\_genre</code> for genre browsing, or <code>lookup\_ids</code> for direct podcast ID lookups. <b>Consequence:</b> Selecting <code>top\_charts</code> fetches Apple Podcasts rankings, while <code>search</code> queries keywords; higher item limits increase run duration and total cost. Leaving this empty defaults to <code>search</code> mode.

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

Search keyword or phrase for querying Apple Podcasts (e.g. <code>technology</code>, <code>news</code>, <code>true crime</code>, <code>history</code>). <b>Consequence:</b> Broader terms return more results and take longer to scrape, increasing overall cost. <i>Empty meaning:</i> Leave this field empty when using <code>top\_charts</code> or <code>lookup\_ids</code> modes to return unfiltered rankings.

## `genreId` (type: `string`):

Apple Podcasts numeric Genre ID (e.g. <code>1318</code> for Technology, <code>1311</code> for News, <code>1488</code> for True Crime, <code>1483</code> for Business, <code>1303</code> for Comedy). <b>Consequence:</b> Filtering by genre restricts results to targeted podcast categories; larger genres return more items and take longer to process. <i>Empty meaning:</i> Leave empty to search across all podcast genres.

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

Two-letter ISO country code (e.g. <code>US</code>, <code>GB</code>, <code>CA</code>, <code>AU</code>, <code>DE</code>, <code>FR</code>, <code>JP</code>) specifying the Apple Podcasts storefront. <b>Consequence:</b> Country storefront determines local chart rankings and availability; changing storefront alters available podcast listings and pricing. <i>Empty meaning:</i> Leave empty to default to the United States (<code>US</code>) storefront.

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

Maximum number of podcast show records to return (1 to 1000). <b>Consequence:</b> The higher the limit, the longer the run takes and the more it costs in per-event charges. <i>Empty meaning:</i> Leave empty to use the default cap of 50 podcast records per run.<br><br>The higher the number, the longer the run takes and the more you are charged, because you pay per row returned.

## `explicit` (type: `string`):

Filter shows by content advisory rating (<code>all</code>, <code>clean</code>, <code>explicit</code>). <b>Consequence:</b> Filtering explicit content restricts returned podcasts, which may decrease total returned rows and reduce overall run cost. <i>Empty meaning:</i> Leave empty or set to <code>all</code> to return podcasts regardless of content advisory ratings.

## `podcastIds` (type: `string`):

Comma-separated list of iTunes podcast collection IDs (e.g. <code>1200361736,1080179320,1235836821</code>) for direct lookup in <code>lookup\_ids</code> mode. <b>Consequence:</b> Specifying exact IDs runs targeted lookups; larger ID lists fetch more shows and take longer, increasing total charge. <i>Empty meaning:</i> Leave empty unless using <code>lookup\_ids</code> mode.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerm": "technology",
  "genreId": "1318",
  "country": "US",
  "maxItems": 50,
  "explicit": "all",
  "podcastIds": "1200361736,1080179320"
}
```

# Actor output Schema

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

Every podcast show found by this run, one row per item, in the default dataset.

# 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 = {
    "mode": "search",
    "searchTerm": "technology",
    "genreId": "1318",
    "country": "US",
    "maxItems": 50,
    "explicit": "all",
    "podcastIds": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/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 = {
    "mode": "search",
    "searchTerm": "technology",
    "genreId": "1318",
    "country": "US",
    "maxItems": 50,
    "explicit": "all",
    "podcastIds": "",
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/apple-podcasts-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 '{
  "mode": "search",
  "searchTerm": "technology",
  "genreId": "1318",
  "country": "US",
  "maxItems": 50,
  "explicit": "all",
  "podcastIds": ""
}' |
apify call reapx/apple-podcasts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reapx/apple-podcasts-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/t2RXKmwJmedicGnCe/builds/gclQVcgo9N63lYN1n/openapi.json
