# Podcast Episodes Scraper: Apple Podcasts and RSS | $1/1K (`one_dollar_store/podcast-episodes-scraper`) Actor

$1 per 1,000 results, platform usage included. Podcast episodes by show name, Apple Podcasts id or RSS feed link: title, date, duration, audio link and description, from Apple's public lookup and the show's own feed. No login, no API key.

- **URL**: https://apify.com/one_dollar_store/podcast-episodes-scraper.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** News, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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 Episodes Scraper: episodes, dates, audio links and show notes

**$1 per 1,000 episodes. Platform usage included. No rental, no minimum.**

[Open it in Apify Console](https://console.apify.com/actors/RuYdHOo5fsyiJebHG/input)

### What it costs

| Episodes | Cost |
|---|---|
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 100,000 | $100.00 |

Plus $0.001 per run. One flat price, platform usage included, so there is no separate compute or proxy bill. Reading the newest 25 episodes of 20 shows costs about $0.50.

### Why use it

- **Three ways in.** Give a show name, an Apple Podcasts id or link, or the RSS feed link. Mix them in one run.
- **The show's own data.** Episodes come from the public RSS feed the publisher maintains, so titles, dates, durations, audio links and show notes match what podcast apps see.
- **Newest first.** Feeds that list oldest episodes first are sorted by date, so "the latest 25" means the latest 25.
- **Quick.** A run of one show and 25 episodes took 2 to 5 seconds in our tests.
- **Safe with links you paste.** Only public http and https addresses are read, with a size limit, a time limit and a limit on redirects.

### Quick start

1. Open the actor, type a show name, press **Start**.
2. Or paste this input:

```json
{ "searchTerms": ["the daily"], "country": "us", "maxEpisodesPerShow": 25, "maxItems": 50 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

To read a feed directly: `{ "feedUrls": ["https://example.com/feed.xml"] }`. To use Apple ids: `{ "podcastIds": ["1200361736"] }`.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~podcast-episodes-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["the daily"], "maxEpisodesPerShow": 10, "maxItems": 10}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/podcast-episodes-scraper").call(
    run_input={"searchTerms": ["the daily"], "maxEpisodesPerShow": 10, "maxItems": 10}
)
for ep in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(ep["publishedAt"], ep["podcastName"], ep["episodeTitle"], ep["durationSeconds"])
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/podcast-episodes-scraper
```

Then ask, for example: "List the last 20 episodes of The Daily with their dates and lengths."

### Switching from another podcast actor

Most podcast actors take a show link or a search term and a result limit. Here the inputs are `searchTerms`, `podcastIds` and `feedUrls`, plus `maxEpisodesPerShow` and `maxItems`. The core fields are `podcastName`, `episodeTitle`, `publishedAt`, `durationSeconds`, `audioUrl` and `description`.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchTerms` | list of text | none | Show names to look up in Apple Podcasts. The best matches are read. |
| `podcastIds` | list of text | none | Apple Podcasts ids (`1200361736`) or page links. All ids go to Apple in one lookup. |
| `feedUrls` | list of text | none | RSS feed links to read directly. |
| `country` | text | `us` | Two letter code of the Apple Podcasts store used for searches and id lookups. |
| `showsPerSearch` | number | 1 | How many of the best matching shows to read for each search term (1 to 10). |
| `maxEpisodesPerShow` | number | 25 | The newest episodes taken from each show (1 to 5,000). |
| `publishedAfter` | text | none | A date such as `2026-01-01`. Older episodes are left out. |
| `maxItems` | number | 100 | Total episodes for the run. Minimum 10. |

Give at least one search term, id or feed link. Example:

```json
{
  "searchTerms": ["the daily", "hard fork"],
  "podcastIds": ["1200361736"],
  "feedUrls": ["https://example.com/feed.xml"],
  "showsPerSearch": 1,
  "maxEpisodesPerShow": 50,
  "publishedAfter": "2026-01-01",
  "maxItems": 500
}
```

### Output fields

One row is one episode.

| Field | Meaning |
|---|---|
| `podcastId`, `podcastName`, `podcastAuthor` | The show, as Apple lists it (the id is empty for feeds you gave directly). |
| `podcastFeedUrl`, `podcastApplePageUrl`, `podcastWebsite` | The RSS feed, the Apple Podcasts page and the show's own website. |
| `podcastLanguage`, `podcastGenres` | Language from the feed and genres from Apple. |
| `episodeTitle`, `episodeGuid` | Episode title and the feed's id for it, good for dropping repeats. |
| `publishedAt` | Publish time in UTC. |
| `durationSeconds` | Length in seconds, from the feed's duration tag. |
| `audioUrl`, `audioType`, `audioBytes` | The audio file address, its type and its size in bytes. |
| `description` | Show notes as plain text, cut at 4,000 characters. |
| `episodeUrl` | The episode's web page, when the feed gives one. |
| `episodeNumber`, `seasonNumber`, `episodeType` | Numbering and `full`, `trailer` or `bonus`, when the feed gives them. |
| `explicit`, `imageUrl` | Explicit flag and episode image, when the feed gives them. |

### Sample results

Real rows from a test run on 9 October 2026 (long links and show notes shortened, a few fields left out to keep this short).

```json
[
  {"podcastId": "1200361736", "podcastName": "The Daily", "podcastAuthor": "The New York Times", "podcastFeedUrl": "https://feeds.simplecast.com/Sl5CSM3S", "podcastWebsite": "https://www.nytimes.com/the-daily", "episodeTitle": "A Failed Execution and the Future of the Death Penalty", "episodeGuid": "94855b15-9742-4344-bf6c-d6a1e0df51ea", "publishedAt": "2026-10-08T09:45:00.000Z", "durationSeconds": 1868, "audioUrl": "https://dts.podtrac.com/redirect.mp3/pdst.fm/e/pfx.vpixl.com/6qj4J/psc...", "audioType": "audio/mpeg", "audioBytes": 29890098, "description": "Christa Pike survived two doses of a lethal injection drug last week during a botched execution in Tennessee. Pamela Colloff, who writes for The New Y...", "episodeUrl": "https://www.nytimes.com/the-daily", "episodeType": "full"},
  {"podcastId": "1200361736", "podcastName": "The Daily", "podcastAuthor": "The New York Times", "podcastFeedUrl": "https://feeds.simplecast.com/Sl5CSM3S", "podcastWebsite": "https://www.nytimes.com/the-daily", "episodeTitle": "Three Vans, a Startled Farmer and an Iranian Plot Against the U.S.", "episodeGuid": "b587b66a-193d-4669-af69-2003af848d97", "publishedAt": "2026-10-07T09:45:00.000Z", "durationSeconds": 1355, "audioUrl": "https://dts.podtrac.com/redirect.mp3/pdst.fm/e/pfx.vpixl.com/6qj4J/psc...", "audioType": "audio/mpeg", "audioBytes": 21682215, "description": "What exactly happened near an air base in Britain used by the United States? Eric Schmitt, a national security correspondent for The New York Times, d...", "episodeUrl": "https://www.nytimes.com/the-daily", "episodeType": "full"},
  {"podcastId": "1200361736", "podcastName": "The Daily", "podcastAuthor": "The New York Times", "podcastFeedUrl": "https://feeds.simplecast.com/Sl5CSM3S", "podcastWebsite": "https://www.nytimes.com/the-daily", "episodeTitle": "The Restaurant Industry Is Broken. Can It Be Fixed?", "episodeGuid": "45a7f05b-0915-41a7-8ceb-9d046acd8cbc", "publishedAt": "2026-10-04T10:00:00.000Z", "durationSeconds": 2247, "audioUrl": "https://dts.podtrac.com/redirect.mp3/pdst.fm/e/pfx.vpixl.com/6qj4J/psc...", "audioType": "audio/mpeg", "audioBytes": 35965501, "description": "If you dine out regularly, you might have noticed some changes in restaurants over the past few years. Perhaps you’ve found yourself ordering at a cou...", "episodeUrl": "https://www.nytimes.com/the-daily", "episodeType": "full"}
]
```

### Limits

- Apple asks API users to stay near 20 requests a minute. Each search term costs one Apple request and the actor waits about 3 seconds between them, so 20 search terms take about a minute. Ids go to Apple in groups, one request for up to 100 ids. Feed links need no Apple request.
- Episodes come from RSS feeds. A feed is read up to 12 MB (very long shows can pass that), for at most 30 seconds, with at most 5 redirects. If a feed is cut at 12 MB the log says so, and feeds that list oldest episodes first may then miss the newest ones.
- Only plain RSS podcast feeds are read. Atom feeds, pages that are not feeds and feeds behind a login are skipped, and the run summary lists them under `problems`.
- Some shows have no public feed link in Apple's lookup (some Apple exclusives). They are skipped and listed under `problems`.
- Only public http and https addresses are read. Links to private, local or internal addresses are refused.
- Show notes are cut to 4,000 characters and shown as plain text. Fields a feed does not give, such as a season number, are left out.
- The audio link points to the publisher's file. The actor does not download or transcribe audio.
- Apple search returns the shows it ranks best for your words, which may not be the one you meant. Check `podcastName`, or use the Apple id for an exact show.

### FAQ

**How much does it cost to scrape 10,000 podcast episodes?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage is included in the $1 per 1,000 price. The actor needs no proxy.

**Where does the data come from?**
Apple's public lookup finds the show and its feed address. The episodes come from that public RSS feed, the same file podcast apps read.

**How do I find a show's Apple id?**
Open the show on Apple Podcasts. The number after `id` at the end of the address is the id, for example `1200361736`. You can paste the whole link as well.

**Can I get every episode of a show?**
Up to 5,000 per show in one run, as far as the feed lists them. Set `maxEpisodesPerShow` to 5000 and `maxItems` high enough.

**How do I get only new episodes?**
Schedule a run with `publishedAfter` set to a recent date, and use `episodeGuid` to drop episodes you already have.

**Is it legal?**
The actor reads public information: Apple's public lookup and RSS feeds that publishers put on the open web for anyone. Audio files and show notes belong to their publishers, so follow their terms and the law where you live, and do not republish content you do not have rights to.

**Is this an official Apple product?**
No. It is an independent tool and is not affiliated with or endorsed by Apple or any podcast publisher.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Social media**

- [Threads Scraper](https://apify.com/one_dollar_store/threads-post-scraper): Public Threads posts by keyword or profile.
- [Instagram Profile Scraper](https://apify.com/one_dollar_store/instagram-profile-data-scraper): Followers, posts and engagement for public profiles.
- [TikTok Hashtag Scraper](https://apify.com/one_dollar_store/tiktok-hashtag-videos-scraper): Videos, views and creators for any hashtag.
- [Pinterest Pin Search Scraper](https://apify.com/one_dollar_store/pinterest-pin-search-scraper): Public pins with images and outbound links.
- [Telegram Channel Scraper](https://apify.com/one_dollar_store/telegram-channel-posts-scraper): Posts, views and media from public channels.
- [Xiaohongshu Scraper](https://apify.com/one_dollar_store/xiaohongshu-explore-feed-scraper): RedNote notes from the public explore feeds.
- [Facebook Ad Library Scraper](https://apify.com/one_dollar_store/facebook-ad-library-scraper): Meta ads by keyword or advertiser page.
- [Username Availability Checker](https://apify.com/one_dollar_store/username-availability-checker): Check if a username is free across sites.

### Changelog

- October 2026: first release.

# Actor input Schema

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

Show names to look up in Apple Podcasts, one per line. The best matches are read (see Shows per search). Apple allows about 20 lookups a minute, so each lookup waits a few seconds.

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

Apple Podcasts ids (1200361736) or page links (https://podcasts.apple.com/us/podcast/the-daily/id1200361736). All ids go to Apple in one lookup.

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

Podcast RSS feed links to read directly. Only http and https addresses on the public internet are read.

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

Two letter country code of the Apple Podcasts store used for searches and id lookups, for example us, gb, in, de.

## `showsPerSearch` (type: `integer`):

How many of the best matching shows to read for each name.

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

The newest episodes to return for each show.

## `publishedAfter` (type: `string`):

Optional. A date such as 2026-01-01. Older episodes are left out.

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

The run stops after this many episodes in total. Minimum 10.

## Actor input object example

```json
{
  "searchTerms": [
    "the daily"
  ],
  "country": "us",
  "showsPerSearch": 1,
  "maxEpisodesPerShow": 25,
  "maxItems": 50
}
```

# Actor output Schema

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

No description

## `summary` (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": [
        "the daily"
    ],
    "country": "us",
    "showsPerSearch": 1,
    "maxEpisodesPerShow": 25,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/podcast-episodes-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": ["the daily"],
    "country": "us",
    "showsPerSearch": 1,
    "maxEpisodesPerShow": 25,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/podcast-episodes-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": [
    "the daily"
  ],
  "country": "us",
  "showsPerSearch": 1,
  "maxEpisodesPerShow": 25,
  "maxItems": 50
}' |
apify call one_dollar_store/podcast-episodes-scraper --silent --output-dataset

```

## MCP server setup

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