# Podcast Scraper API: RSS Episodes & Audio URLs, $1/1K (`conserving_celerytop/podcast-episode-scraper`) Actor

Get every episode of any podcast from its RSS feed: title, audio file URL, duration, season and episode number, publication date, description and artwork, plus the show title and language. $1 per 1,000 episodes; broken feeds are free.

- **URL**: https://apify.com/conserving\_celerytop/podcast-episode-scraper.md
- **Developed by:** [Don Mangu](https://apify.com/conserving_celerytop) (community)
- **Categories:** News, Developer tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 episodes

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

## Podcast Episode Scraper

Podcast Scraper API for any podcast with an RSS feed: one row per episode with the title, audio file URL, duration, season and episode number, date, description and artwork, plus the show's title and language. Use it to build podcast databases, feed transcription pipelines or track new episodes.

**Cost:** $0.001 per episode ($1 per 1,000). Feeds that cannot be read, addresses that are not feeds, and invalid entries are free. No login or API key.

### What does Podcast Episode Scraper do?

It reads each podcast's RSS feed, including the iTunes tags podcast apps use (duration, season, episode, artwork), and returns the newest episodes first. It never reads host or author names or emails.

- **Podcast databases:** collect episodes, lengths and audio links of many shows in one table.
- **Transcription and AI:** pass audio URLs to a speech-to-text Actor, such as our Audio and Podcast Transcription.
- **Monitoring:** schedule it with Published since to get each new episode.

**Try it now.** The form opens with two NASA podcasts, 5 episodes each. Click **Start**; it takes a few seconds and costs about one cent.

### How to use the podcast scraper

1. Paste podcast RSS feed addresses into **Podcast feeds**, one per line.
2. Set **Episodes per feed** and, if you want, **Published since**.
3. Click **Start**, then open the **Episodes** table or download the rows.

### How much does the podcast scraper cost?

| Event | Price |
|---|---|
| Episode (`episode`) | $0.001 ($1 per 1,000) |
| Feed that cannot be read, not a feed, or invalid address | Free |

Apify adds only its small standard fee per run start. You can set a spending limit on any run, and the Actor stops cleanly when it is reached.

Example: you build a list of 200 podcasts with their last 50 episodes each: 10,000 episodes cost $10.

### Input

```json
{
  "feedUrls": [
    "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast",
    "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps"
  ],
  "maxEpisodesPerFeed": 5
}
```

### Output

One row per result:

```json
{
  "feedUrl": "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps",
  "podcastTitle": "Small Steps, Giant Leaps",
  "title": "Human Factors: Designing Systems with People in Mind",
  "audioUrl": "https://traffic.megaphone.fm/NATIONALAERONAUTICSANDSPACEADMINISTRATION6370129648.mp3",
  "audioType": "audio/mpeg",
  "durationSeconds": 1139,
  "publishedAt": "2026-09-17T15:00:00.000Z",
  "status": "ok",
  "charged": true
}
```

`status` is `ok` for episodes, which are charged. A feed that cannot be read gives one free row with the reason in `error`. A STATS record in the key-value store counts episodes, free rows and requests.

### Related Actors

- [Speech to Text & Audio Transcription](https://apify.com/conserving_celerytop/audio-podcast-transcription): Use it to transcribe audio, video and podcast episodes to text with timestamps and subtitles.
- [RSS Feed Reader API](https://apify.com/conserving_celerytop/rss-feed-reader): Use it to read RSS and Atom feeds into one row per item.
- [Article Extractor](https://apify.com/conserving_celerytop/article-extractor): Use it to pull clean article text, dates and metadata from news and blog pages.
- [Kokoro Text to Speech](https://apify.com/conserving_celerytop/kokoro-text-to-speech): Use it to turn text into spoken MP3 audio with 41 voices.

### FAQ

**Where do I find a podcast's RSS feed?** Most podcast apps and hosting pages show it under Share, About or RSS. Apple Podcasts does not show it directly; the show's own website usually links it.

**Does it download the audio?** No. It returns the audio file URL. To get text, pass the URLs to a transcription Actor.

**Does it respect robots.txt?** Yes. It skips feeds the site does not allow for the token DonMangu-PodcastScraper or for all crawlers, as free rows.

**Does it include host names?** No. It returns episodes and show details, not personal details about hosts or guests.

# Actor input Schema

## `feedUrls` (type: `array`):

Enter podcast RSS feed addresses, one per line. Most podcast apps show the feed under Share or About.

## `maxEpisodesPerFeed` (type: `integer`):

Return at most this many of the newest episodes of each podcast.

## `publishedSince` (type: `string`):

Keep only episodes published on or after this date, as 2026-09-01 or a period such as 30 days. Leave empty for all.

## `maxResults` (type: `integer`):

Stop after this many episodes in total.

## Actor input object example

```json
{
  "feedUrls": [
    "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast",
    "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps"
  ],
  "maxEpisodesPerFeed": 5,
  "maxResults": 1000
}
```

# Actor output Schema

## `overview` (type: `string`):

Episodes

## `errors` (type: `string`):

Feed problems

## `all` (type: `string`):

Every row with every field.

## `stats` (type: `string`):

Results, free rows, requests and time.

# 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 = {
    "feedUrls": [
        "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast",
        "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps"
    ],
    "maxEpisodesPerFeed": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("conserving_celerytop/podcast-episode-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 = {
    "feedUrls": [
        "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast",
        "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps",
    ],
    "maxEpisodesPerFeed": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("conserving_celerytop/podcast-episode-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 '{
  "feedUrls": [
    "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast",
    "https://www.nasa.gov/feeds/podcasts/small-steps-giant-leaps"
  ],
  "maxEpisodesPerFeed": 5
}' |
apify call conserving_celerytop/podcast-episode-scraper --silent --output-dataset

```

## MCP server setup

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