# Apple Podcasts Scraper - Shows, Episodes, Reviews & Host Leads (`scrapesage/apple-podcasts-scraper`) Actor

Scrape Apple Podcasts: search shows, full show details, top charts, a publisher's whole catalog, episodes and reviews. Rich RSS data - owner email, website, publishing cadence, active/dormant flags - plus opt-in host-contact leads and monitoring. No login, no key, no browser.

- **URL**: https://apify.com/scrapesage/apple-podcasts-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Social media, SEO tools
- **Features:** Limited permissions
- **Stats:** 6 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.81 / 1,000 podcast show scrapeds

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

## Apple Podcasts Scraper - Shows, Episodes, Reviews & Host Leads

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Apple Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Apple Podcasts" is referenced only to describe the publicly available website this Actor collects data from.

Extract **complete Apple Podcasts data** - search shows by keyword, pull full show details, read top-chart rankings, list a publisher's whole catalog, grab episodes, and collect listener reviews. Every show is enriched from its **public RSS feed** with the fields Apple's API hides: **owner name & email, website, publishing cadence, and active/dormant status** - and, optionally, turned into a **ready-to-contact lead** by crawling the show's own site for emails, phone numbers and socials.

No login, no API key, no browser - fast JSON + RSS extraction with 99%+ reliability.

### Why this Apple Podcasts scraper?

This actor merges Apple's public endpoints **and** each show's RSS feed, then derives the signals that matter for outreach and research - shipping **a complete podcast dataset**:

| Data | This actor |
| --- | --- |
| Show metadata (title, publisher, artwork, genres, episode count) | ✅ |
| Owner **name + email** (the host's real inbox) | ✅ from RSS |
| Show website + language + full RSS categories | ✅ |
| Publishing **cadence**, last-episode date, **active/dormant** flag | ✅ derived |
| Average episode duration, feed type, "show has ended" flag | ✅ derived |
| **Host-contact leads** (emails, phone, socials from the show's site) | ✅ opt-in |
| Lead score (0–100) per show | ✅ |
| Episodes (audio URL, duration, season/episode, type) | ✅ opt-in |
| Listener reviews (rating, title, text, date) | ✅ |
| Top charts by category & country | ✅ |
| Monitoring - only new shows / episodes / reviews | ✅ |

### Use cases

- **Podcast guesting & booking** - find **active** shows in your niche (`isActive`, `publishingCadenceDays`, `daysSinceLastEpisode`), then pitch the host directly using `ownerEmail` and `contactEmails`.
- **Sponsorship & advertising outreach** - filter shows by reach (`userRatingCount`, `episodeCount`) and reach decision-makers with verified contact data and a `leadScore`.
- **Market & competitive research** - track top charts, publishing frequency, and catalog size across any category and country (Business, True Crime, Technology, News, Health & Fitness…).
- **Content & trend monitoring** - schedule recurring runs to capture only **new episodes** across a watchlist of shows for newsletters, alerts, or LLM summarization.
- **PR & media databases** - build a contactable directory of hosts and publishers, enriched with websites and social profiles.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) - the free plan is enough to try this actor.
2. Open the **Apple Podcasts Scraper**, fill in the inputs you need, and click **Start**.
3. Watch results stream into the dataset table as each record is parsed.
4. **Export** as JSON, CSV, Excel, XML, or RSS - or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "search",
    "searchTerms": ["b2b marketing", "startup founders"],
    "maxResultsPerQuery": 50,
    "enrichFromRss": true,
    "includeEpisodes": false,
    "enrichHostContacts": true,
    "country": "us"
}
```

- **mode** - `search` (find shows by keyword), `showDetails` (full records for specific shows), `topCharts` (top shows by category), `publisherShows` (a publisher's whole catalog), or `reviews` (listener reviews for specific shows).
- **searchTerms** - keywords for `search` mode (one row per term).
- **podcastIds** - Apple Podcasts IDs (`1138869817`), Apple Podcasts URLs, or direct RSS feed URLs. Used by `showDetails` and `reviews`.
- **genre** - category for `topCharts` (Business, True Crime, Technology, News…), or `All podcasts` for the overall chart.
- **artistIds** - numeric Apple artist IDs (or artist URLs) for `publisherShows`.
- **enrichFromRss** *(default true)* - fetch each show's RSS feed to add owner email, website, categories and the derived analytics (cadence, last-episode date, active/dormant, average duration).
- **includeEpisodes** *(default false)* - also output episode records; set `maxEpisodesPerShow` to control how many. In monitoring mode this returns only **new** episodes.
- **enrichHostContacts** *(default false)* - crawl each show's own website (home + contact/about) for emails, phone and social links. Only runs for shows that have a website.
- **maxReviewsPerShow / reviewsSort** - review controls (Apple exposes roughly the latest 500 per show).
- **country** - two-letter Apple storefront (`us`, `gb`, `de`, `au`…).

### Output

One record per show (`type: "show"`), plus optional `episode` and `review` records:

```json
{
    "type": "show",
    "podcastId": 1138869817,
    "title": "Marketing School - Digital Marketing and Online Marketing Tips",
    "artistName": "Eric Siu and Neil Patel",
    "artistId": 1138869800,
    "feedUrl": "https://feeds.megaphone.fm/ESHO5419936864",
    "appleUrl": "https://podcasts.apple.com/us/podcast/id1138869817",
    "primaryGenre": "Marketing",
    "genres": ["Marketing", "Business", "Careers"],
    "episodeCount": 2000,
    "lastEpisodeAt": "2026-06-11T14:00:00.000Z",
    "daysSinceLastEpisode": 3,
    "publishingCadenceDays": 1.4,
    "avgEpisodeDurationMinutes": 23,
    "isActive": true,
    "hasEnded": false,
    "language": "en",
    "website": "https://www.marketingschool.io/",
    "ownerName": "Eric Siu and Neil Patel",
    "ownerEmail": "maya.harper@singlegrain.com",
    "feedCategories": ["Business", "Marketing", "Careers"],
    "contactEmails": ["hello@singlegrain.com"],
    "contactPhones": [],
    "socialLinks": { "youtube": "https://www.youtube.com/@marketingschoolpod" },
    "leadScore": 95,
    "country": "US",
    "scrapedAt": "2026-06-14T23:40:00.000Z"
}
```

Notes: fields are `null` only when the data genuinely doesn't exist (some feeds omit an owner email, website, or episode numbers - the actor never fabricates them). `ownerEmail` comes from the show's public RSS feed; `contactEmails`/`socialLinks` come from the show's own website when `enrichHostContacts` is on. Empty results are reported as a successful run.

### Monitoring - get only new shows, episodes & reviews

Turn on **`monitorMode`** to remember everything returned in previous runs and emit **only new records** the next time - new shows for a search/chart/publisher, new **episodes** per show, or new **reviews** per show. Each record type is de-duplicated independently, so a show you've already seen never hides its fresh episodes.

Set a distinct **`monitorStoreName`** per tracked target/query to keep their histories separate. Monitoring pairs with [Apify Schedules](https://docs.apify.com/platform/schedules): the schedule triggers the run, and monitoring mode makes sure you only pay for and process what's actually new.

### How much does it cost to scrape Apple Podcasts?

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Podcast Show Scraped** - Full Apple metadata + RSS data (owner name/email, website, language, categories) + derived analytics (episode count, last-episode date, cadence, avg duration, active/dormant, lead score).
- **Episode Scraped** - One episode from the RSS feed: title, date, duration, audio URL, season/episode numbers, type, description.
- **Review Scraped** - One listener review: rating, title, text, helpful-vote count, date.
- **Host Contacts Enriched** - Website crawl of one show for host-contact leads: emails, phone numbers and social links.

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** - start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** - official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** - run it on a cron to keep your data fresh.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** - trigger downstream actions the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/apple-podcasts-scraper').call({
    mode: 'search',
    searchTerms: ['b2b marketing'],
    enrichFromRss: true,
    enrichHostContacts: true,
    country: 'us',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} records`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new records straight into your CRM or sheet.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a run finds something new.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** - trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** - ask your assistant to "find active business podcasts and list their host contact emails" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Pair podcast intelligence with the rest of the **media, marketing and lead-gen** toolkit:

- **[Telegram Scraper](https://apify.com/scrapesage/telegram-scraper)** - channels, messages, media and search.
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** - competitor and sponsor ad intelligence.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** - who's advertising what on Google.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** - events plus organizer leads with contacts.
- **[Sched Conference Scraper](https://apify.com/scrapesage/sched-conference-scraper)** - conference speakers, sessions and leads (great for guest sourcing).
- **[Whova Event Scraper](https://apify.com/scrapesage/whova-event-scraper)** - event sessions, speakers, sponsors and exhibitors.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** - filter-based job postings, no login.
- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** - US federal contract opportunities and contacts.

### Tips

- **Find contactable hosts fast** - run `search` with `enrichFromRss` on; sort the dataset by `leadScore` and filter `isActive = true` to surface shows that publish regularly and have a reachable owner.
- **Reviews are capped** - Apple's public feed exposes roughly the latest 500 reviews per show. Use `monitorMode` + a Schedule to accumulate new reviews over time.
- **Big catalogs** - `maxResultsPerQuery` and `maxEpisodesPerShow` keep large publishers and long-running shows under control; raise them only as needed.
- **Cost control** - `enrichHostContacts` only runs for shows that actually have a website, and episodes/contacts are billed separately so you pay for exactly what you turn on.
- **Proxies** - Apple's endpoints and most RSS hosts have no hard anti-bot, so the default Apify proxy is plenty; switch to residential only for very large or high-frequency runs.

### FAQ

**Where does the host email come from?** From the show's own public RSS feed (`<itunes:owner>`), which podcast hosts publish so Apple and apps can reach them - plus, with `enrichHostContacts`, the emails listed on the show's own website. Never from anything private.

**How do I scrape a specific podcast?** Use `showDetails` mode and put the Apple Podcasts ID, the `podcasts.apple.com` URL, or the RSS feed URL into `podcastIds`.

**Can I get every episode of a show?** Yes - turn on `includeEpisodes` and raise `maxEpisodesPerShow`. Episodes come straight from the RSS feed with audio URLs, durations and season/episode numbers.

**How do I track new episodes automatically?** Turn on `monitorMode`, then create a [Schedule](https://docs.apify.com/platform/schedules). Each run returns only episodes (or shows/reviews) you haven't seen before.

**Can I export to Google Sheets, CSV, or Excel?** Yes - one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping Apple Podcasts legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Apple's terms.

### Data & lawful use

This Actor reads only what Apple Podcasts publishes to logged-out visitors: it does not log in, use cookies or session tokens, create accounts, or reach anything behind a sign-in. Names, handles, bios and engagement figures are public, but they relate to identifiable people, so treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for research, marketing analytics or B2B prospecting), honour access and deletion requests, and do not use the output for spam or unsolicited messaging.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Apple Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"Apple Podcasts" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Apple Podcasts product, is not authorised or certified by Apple Inc., and does not distribute Apple Podcasts software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome - this actor is actively maintained.

# Actor input Schema

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

Pick a job. Search finds shows by keyword. Show details pulls full records (with RSS data) for specific shows. Top charts lists the top podcasts in a category. Publisher shows returns a publisher's whole catalog. Reviews pulls listener reviews for specific shows.

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

Keywords to search Apple Podcasts for, e.g. `true crime`, `b2b marketing`, `startup founders`. One row per term. (Mode: Search.)

## `podcastIds` (type: `array`):

Apple Podcasts IDs (e.g. `1138869817`), full Apple Podcasts URLs (`https://podcasts.apple.com/.../id1138869817`), or direct RSS feed URLs. Used by Show details and Reviews modes. Reviews need an Apple ID/URL (not a feed URL).

## `genre` (type: `string`):

Category for the top chart, or `All podcasts` for the overall chart. (Mode: Top charts.)

## `artistIds` (type: `array`):

Numeric Apple artist IDs (e.g. `1439215748`) or Apple Podcasts artist URLs. Returns every show in that publisher's catalog. (Mode: Publisher shows.)

## `maxResultsPerQuery` (type: `integer`):

Cap the number of shows returned per search term, chart, or publisher (Apple returns up to 200).

## `fullDetails` (type: `boolean`):

For Top charts, open each ranked show for the complete record. Search and Publisher modes already return full records. Turn off for a faster, lighter chart listing.

## `enrichFromRss` (type: `boolean`):

Fetch each show's public RSS feed to add the fields Apple's API omits: owner name & EMAIL, website, language, full categories, plus derived analytics (episode count, last-episode date, publishing cadence, average duration, active/dormant). One extra request per show.

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

Also output episode records (type `episode`) from each show's RSS feed - title, date, duration, audio URL, season/episode numbers, type and description. In monitoring mode this returns only NEW episodes since the last run.

## `maxEpisodesPerShow` (type: `integer`):

How many recent episodes to pull per show when 'Include episodes' is on.

## `enrichHostContacts` (type: `boolean`):

Opt-in lead enrichment: visit each show's own public website (home + a contact/about page) and extract contact emails, phone numbers and social links - for podcast guesting, sponsorship and PR outreach. Only runs for shows that have a website.

## `maxReviewsPerShow` (type: `integer`):

How many reviews to fetch per show, newest first by default. Apple's public review feed exposes roughly the latest 500 per show (50 per page, 10 pages). (Mode: Reviews.)

## `reviewsSort` (type: `string`):

Order in which reviews are pulled. (Mode: Reviews.)

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

Two-letter Apple storefront code (e.g. `us`, `gb`, `de`, `au`). Affects search results, chart rankings and the review pool.

## `monitorMode` (type: `boolean`):

Remember what was already returned and emit ONLY records not seen in previous runs (new shows for a search/chart/publisher, new episodes per show, or new reviews per show). Pairs with Apify Schedules to track changes over time.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' ids for monitoring mode. Use a different name per tracked target/query to keep their histories separate.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests. Lower it if you hit rate limits on very large runs.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apple's public endpoints and most podcast RSS feeds have no hard anti-bot, so the default Apify proxy is plenty; switch to residential for very large or high-frequency runs.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "marketing"
  ],
  "podcastIds": [
    "1138869817"
  ],
  "genre": "ALL",
  "maxResultsPerQuery": 50,
  "fullDetails": true,
  "enrichFromRss": true,
  "includeEpisodes": false,
  "maxEpisodesPerShow": 10,
  "enrichHostContacts": false,
  "maxReviewsPerShow": 100,
  "reviewsSort": "mostrecent",
  "country": "us",
  "monitorMode": false,
  "monitorStoreName": "apple-podcasts-monitor",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped records in the default dataset. Show rows carry full metadata, RSS data, derived analytics and host-contact leads; episode and review rows carry their own fields.

# 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": [
        "marketing"
    ],
    "podcastIds": [
        "1138869817"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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": ["marketing"],
    "podcastIds": ["1138869817"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "searchTerms": [
    "marketing"
  ],
  "podcastIds": [
    "1138869817"
  ]
}' |
apify call scrapesage/apple-podcasts-scraper --silent --output-dataset

```

## MCP server setup

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