Podcast Episode Scraper: RSS, Audio URLs & Transcripts avatar

Podcast Episode Scraper: RSS, Audio URLs & Transcripts

Pricing

Pay per usage

Go to Apify Store
Podcast Episode Scraper: RSS, Audio URLs & Transcripts

Podcast Episode Scraper: RSS, Audio URLs & Transcripts

Scrape podcast episodes from any RSS feed or by show name: title, description, duration, audio URL and publish date, plus the full transcript for shows that publish one. No API key, pay per episode.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

21 hours ago

Last modified

Share

๐ŸŽ™๏ธ Podcast Episode Scraper: RSS, Audio URLs & Transcripts

โšก Pure HTTP. No API key, no login, no proxy, no browser.

๐Ÿ’ธ You are only charged for an episode that actually lands in your dataset. Feeds that fail to load are never billed.

Overview

Podcast Episode Scraper turns any podcast into structured rows. Give it an RSS feed URL, or just a show name, and it returns every episode with title, show notes, publish date, duration in seconds, episode and season numbers, the direct audio file URL, and the full transcript for shows that publish one.

Search by name and the show is resolved through Apple's public podcast directory, so you never have to hunt for the RSS URL yourself.

โœ… Any podcast host ยท โœ… Transcripts where published ยท โœ… Duration normalised to seconds ยท โœ… MCP-ready for AI agents

About transcripts, honestly

Transcripts are not universally available, and no scraper can invent them. A transcript exists only when the publisher attaches a <podcast:transcript> tag to the feed, which is a genuine minority of podcasts today.

We measured five real feeds on 2026-08-13:

ShowTranscripts in feed
Podnews Dailyโœ… every episode
Buzzcast (Buzzsprout-hosted)โœ… every episode
The VergecastโŒ none
The DailyโŒ none
Late Night LinuxโŒ none

So this actor always returns complete episode metadata, and returns transcript text for the shows that publish it. Every row carries a has_transcript boolean so you know exactly which case you got, and we never return a fabricated or machine-guessed transcript.

If you need a transcript for a show that does not publish one, you need speech-to-text on the audio file, which is a different and far more expensive product. This actor gives you the audio_url to feed into one.

Shows hosted on Buzzsprout, Captivate, Transistor, RSS.com and Podnews commonly publish transcripts. Large network shows frequently do not.

Input

{
"searchTerms": ["Podnews Daily"],
"feedUrls": ["https://feeds.buzzsprout.com/1538779.rss"],
"maxEpisodesPerShow": 50,
"includeTranscripts": true
}
FieldWhat it takes
searchTermsShow names. Each is looked up in Apple's public directory and the top 3 matching feeds are scraped.
feedUrlsDirect RSS feed URLs, for when you already have the feed or the show is not in Apple's directory.
maxEpisodesPerShowHard cap per show. Your main cost and runtime control.
includeTranscriptsFetch and convert transcripts where published. Costs one extra request per episode, so turn it off for a fast metadata-only pass.

You can mix both inputs in one run. Feeds resolved twice are deduplicated.

Output

{
"show_title": "Podnews Weekly Review",
"show_author": "James Cridland",
"feed_url": "https://feeds.buzzsprout.com/1538779.rss",
"episode_title": "Spotify add a \"Skip Ahead\" button",
"description": "This week we look at Spotify's new player controls...",
"guid": "buzzsprout-19612589",
"published_at": "Fri, 08 Aug 2026 05:00:00 -0000",
"duration_seconds": 5284,
"episode_number": "212",
"audio_url": "https://www.buzzsprout.com/1538779/19612589.mp3",
"has_transcript": true,
"transcript_url": "https://www.buzzsprout.com/1538779/19612589/transcript.vtt",
"transcript": "Jordan Blair 0:00 I just upload one file to Buzzsprout and it distributes...",
"scraped_at": "2026-08-13T12:31:07.004Z"
}
FieldDescription
๐ŸŽ™๏ธ show_titlePodcast name
๐Ÿ‘ค show_authorPublisher or host
๐Ÿ“ก feed_urlRSS feed the episode came from
๐Ÿ“„ episode_titleEpisode title, HTML entities decoded
๐Ÿ“ descriptionShow notes, HTML stripped
๐Ÿ”‘ guidFeed GUID, stable for deduplication across runs
๐Ÿ“… published_atPublish date as the feed states it
โฑ๏ธ duration_secondsDuration normalised to seconds, whether the feed used 3431 or 00:57:11
๐Ÿ”ข episode_number / seasonWhere the feed publishes them
๐Ÿ”Š audio_urlDirect audio file URL, ready for transcription or download
โœ… has_transcriptWhether a transcript was found and captured
๐Ÿ”— transcript_urlThe transcript file as published
๐Ÿ“ƒ transcriptTranscript converted to clean plain text
๐Ÿ•’ scraped_atISO timestamp of capture

Why duration is normalised. Feeds publish duration as either raw seconds or HH:MM:SS, inconsistently, sometimes within the same feed. Sorting or filtering on the raw value gives nonsense, so we always emit seconds.

Why transcripts are cleaned. Published transcripts are usually WebVTT or SRT, which are full of cue numbers, timing lines and, in some exports, padding whitespace between every word. We strip the machinery, collapse the padding and return readable prose.

Common use cases

RAG and AI knowledge bases. Transcript text is the highest-value podcast data for retrieval. Pull a back catalogue once and index it.

Content research and repurposing. Find which episodes covered a topic, then pull the transcript section you need for clips, show notes or newsletters.

Competitive and industry monitoring. Track what shows in your space are publishing, on a schedule, with publish dates and durations.

Media and PR tracking. Watch for mentions of a brand, person or product across a set of shows that publish transcripts.

Audio pipelines. Use audio_url to feed your own speech-to-text for shows that do not publish transcripts.

Pricing

EventPriceYou pay when
Episode delivered$0.002An episode lands in your dataset

$2.00 per 1,000 episodes, whether or not that episode carried a transcript. Feeds that fail to load cost nothing.

Run it on a schedule

  1. Run once with the input you want repeated, then click Save as a task.
  2. In the Apify Console go to Schedules โ†’ Create new.
  3. Pick a frequency and attach the saved task.
  4. Wire the dataset to Sheets, Slack or a webhook from the Integrations tab.

Deduplicate on guid so a repeated schedule never reprocesses the same episode.

FAQ

Do I need an Apple or Spotify account? No. Podcast RSS feeds are public by design, and the directory lookup uses Apple's public search endpoint.

Why does an episode have no transcript? Because the publisher did not put one in the feed. See the section above. has_transcript: false is a real answer, not a failure.

Can it scrape Spotify-exclusive shows? No. Shows without a public RSS feed are not reachable, by anyone, without breaking into a closed platform.

How far back does it go? As far as the feed publishes. Many feeds carry the full back catalogue, and we saw feeds with over 1,000 episodes.

Why is my run slower with transcripts on? Each transcript is a separate file download. Turn includeTranscripts off for a fast metadata-only pass.

Use from Claude, ChatGPT and any MCP agent

https://mcp.apify.com/?tools=themineworks/podcast-episode-scraper

Or call it programmatically:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/podcast-episode-scraper').call({
searchTerms: ['Podnews Daily'],
maxEpisodesPerShow: 50,
includeTranscripts: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Questions, or need a field we don't return yet? Reach out through the Apify profile.