Podcast Episode Scraper: RSS, Audio URLs & Transcripts
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
21 hours ago
Last modified
Categories
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:
| Show | Transcripts 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}
| Field | What it takes |
|---|---|
searchTerms | Show names. Each is looked up in Apple's public directory and the top 3 matching feeds are scraped. |
feedUrls | Direct RSS feed URLs, for when you already have the feed or the show is not in Apple's directory. |
maxEpisodesPerShow | Hard cap per show. Your main cost and runtime control. |
includeTranscripts | Fetch 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"}
| Field | Description |
|---|---|
๐๏ธ show_title | Podcast name |
๐ค show_author | Publisher or host |
๐ก feed_url | RSS feed the episode came from |
๐ episode_title | Episode title, HTML entities decoded |
๐ description | Show notes, HTML stripped |
๐ guid | Feed GUID, stable for deduplication across runs |
๐
published_at | Publish date as the feed states it |
โฑ๏ธ duration_seconds | Duration normalised to seconds, whether the feed used 3431 or 00:57:11 |
๐ข episode_number / season | Where the feed publishes them |
๐ audio_url | Direct audio file URL, ready for transcription or download |
โ
has_transcript | Whether a transcript was found and captured |
๐ transcript_url | The transcript file as published |
๐ transcript | Transcript converted to clean plain text |
๐ scraped_at | ISO 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
| Event | Price | You pay when |
|---|---|---|
| Episode delivered | $0.002 | An 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
- Run once with the input you want repeated, then click Save as a task.
- In the Apify Console go to Schedules โ Create new.
- Pick a frequency and attach the saved task.
- 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.