# Podcast Directory + Host Emails Scraper (`aurenic/podcast-scraper`) Actor

Extract podcast metadata, host emails, social links, and episode data from Apple Podcasts and any RSS feed. Uses the official iTunes API and public RSS — no API key, no browser, no login.

- **URL**: https://apify.com/aurenic/podcast-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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

## Podcast Directory + Host Emails Scraper

Extract podcast metadata, host emails, social links, and episode data from Apple Podcasts and any RSS feed. Uses the official iTunes API and public RSS — no API key, no browser, no login.

### What does Podcast Directory + Host Emails Scraper do?

Scrape podcasts in three modes:

- **Search Apple Podcasts** — pass keywords, get matching podcasts with metadata and **host emails** extracted from the RSS owner block.
- **Lookup podcast IDs** — pass Apple collection IDs, get the same rich records.
- **Direct RSS feeds** — pass any RSS URL (not just Apple-indexed podcasts) and get the same extraction.

For every podcast you get: title, host/artist, genre, artwork, episode count, feed URL, **all emails found in the feed** (owner block + channel description + episode descriptions), and **social media handles** for Twitter/X, Instagram, Facebook, LinkedIn, YouTube, and TikTok.

The **email extraction** is the primary B2B use case — perfect for podcast guest outreach, sponsorship prospecting, and building press lists.

### Output fields

| Field | Description |
|---|---|
| podcastId | Apple Podcasts collection ID (null for raw RSS mode) |
| title | Podcast title |
| artist | Host / artist name |
| artistId | Apple artist ID |
| feedUrl | RSS feed URL |
| trackViewUrl | Apple Podcasts page |
| artwork | Cover art URL |
| genre / genres | Primary genre and full genre list |
| country | Storefront country |
| trackCount | Episode count (Apple) |
| releaseDate | Last release date |
| contentAdvisory | Explicit content flag |
| rss | Parsed RSS channel metadata |
| **emails** | **Comma-separated list of all emails found in the feed** |
| **ownerEmail** | Email from `<itunes:owner>` block (most reliable) |
| **socialLinks** | Twitter, Instagram, Facebook, LinkedIn, YouTube, TikTok |
| episodes | Episode list (when `includeEpisodes: true`) |
| error | Diagnostic message if RSS fetch or parse failed |

### Who is it for?

- **Podcast guest outreach agencies** — build lists of shows and host emails by niche
- **Sponsorship and ad sales teams** — find podcast owners for direct sponsorship deals
- **PR and press teams** — build media lists of podcast hosts in a vertical
- **Market researchers** — analyze podcast categories, episode frequencies, and release cadence
- **AI and RAG builders** — source podcast metadata and episode descriptions for training
- **Growth teams** — find complementary podcasts for cross-promotion

### Pricing

**$2.50 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.25 |
| 1,000 | $2.50 |
| 10,000 | $25.00 |

### How to use it

1. Pick a **Mode**.
2. Fill in the mode's inputs: search terms, podcast IDs, or RSS URLs.
3. Choose the **Country** storefront.
4. Toggle **Include Episodes** for deeper data (slower).
5. Click **Start**.

### Output example

```json
{
  "recordType": "podcast",
  "podcastId": 1234567890,
  "title": "Marketing School",
  "artist": "Neil Patel & Eric Siu",
  "feedUrl": "https://feeds.megaphone.fm/marketing-school",
  "trackViewUrl": "https://podcasts.apple.com/us/podcast/marketing-school/id1234567890",
  "artwork": "https://is1-ssl.mzstatic.com/image/thumb/.../600x600bb.jpg",
  "genre": "Business",
  "genres": ["Business", "Marketing", "Entrepreneurship"],
  "country": "us",
  "trackCount": 2100,
  "rss": {
    "title": "Marketing School",
    "description": "Neil Patel and Eric Siu bring you daily actionable digital marketing lessons...",
    "language": "en-us",
    "author": "Neil Patel & Eric Siu",
    "ownerName": "Marketing School",
    "categories": ["Business", "Marketing"],
    "imageUrl": "https://..."
  },
  "ownerEmail": "hello@marketingschool.io",
  "emails": [
    "hello@marketingschool.io",
    "sponsorships@marketingschool.io",
    "neil@neilpatel.com"
  ],
  "socialLinks": {
    "twitter": "https://twitter.com/neilpatel",
    "youtube": "https://youtube.com/@marketingschool"
  },
  "scrapedAt": "2026-09-21T12:00:00.000Z"
}
```

### Technical details

- **Apple Podcasts via official iTunes API** — `itunes.apple.com/search?media=podcast` and `/lookup`. Fully public, unauthenticated, no anti-bot.
- **RSS feed parsing** — the feed URL returned by Apple points to the podcast's own RSS feed (hosted on Megaphone, Libsyn, Anchor, etc.). These are public by design — that's how podcast players work.
- **Email extraction** — from the `<itunes:owner>` block (most reliable), the channel description, the author field, and every episode description.
- **Social link extraction** — Twitter/X, Instagram, Facebook, LinkedIn, YouTube, and TikTok handles from any of the text fields.
- **Self-throttled** at 400 ms between requests.
- **No proxy required.** iTunes API and RSS feeds accept datacenter IPs.

### Known limits

- **Not every podcast exposes an owner email.** Many feeds omit `<itunes:owner>`. Where the feed has no email, the record still includes metadata and social links.
- **Email extraction is best-effort.** Emails found in episode descriptions may be guest or sponsor emails rather than the host's.
- **Episode descriptions may be truncated** at 5,000 characters per episode.
- **Apple Podcasts search is limited to 200 results per query.** For deeper coverage, split by sub-keyword or use `podcast` mode with known IDs.
- **RSS feed availability** — if a podcast's RSS host blocks our IP or the feed is dead, the record is returned with an `error` field and Apple metadata only.

### FAQ

**Do I need an API key?** No. The iTunes Search API is public.

**Do I need a proxy?** No. Both iTunes and podcast RSS hosts accept datacenter IPs.

**Where do the emails come from?** The `<itunes:owner>` block in the RSS feed (this is the email the host provided to Apple), plus any email found in the channel description or episode descriptions.

**Why is `emails` empty for some podcasts?** The host either didn't provide an email in the feed, or the feed doesn't include one. In that case, the `socialLinks` field is usually the best way to reach them.

**Can I scrape Spotify podcasts?** Not in this version. Spotify does not expose RSS feeds for all shows and enforces auth on its API.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

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

What to scrape.

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

Keywords to search on Apple Podcasts (e.g. 'marketing', 'true crime'). Used in search mode.

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

Apple Podcasts collection IDs. Used in podcast mode.

## `rssUrls` (type: `array`):

Direct RSS feed URLs. Used in rss mode.

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

Two-letter country code for Apple Podcasts storefront (us, gb, de, fr, jp, br, etc.).

## `maxPodcasts` (type: `integer`):

Hard cap on podcasts per run.

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

Fetch episode list from the RSS feed. Adds one request per podcast but produces deeper data.

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

Hard cap on episodes per podcast when includeEpisodes is enabled.

## `includeEmails` (type: `boolean`):

Extract emails from the RSS owner block, channel description, and episode descriptions. Primary B2B use case.

## `includeSocialLinks` (type: `boolean`):

Extract Twitter/X, Instagram, Facebook, LinkedIn, YouTube, and TikTok handles from the feed.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "marketing"
  ],
  "podcastIds": [],
  "rssUrls": [],
  "country": "us",
  "maxPodcasts": 100,
  "includeEpisodes": false,
  "maxEpisodesPerPodcast": 50,
  "includeEmails": true,
  "includeSocialLinks": true
}
```

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

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

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

```

## MCP server setup

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