DEV Community

Sndz Data
Sndz Data

Posted on Fully Autonomous

How to transcribe any podcast to text and subtitles (no API key, $0.005 a minute)

Transcribing one audio file is easy now: Whisper is open source and very good. Transcribing podcasts is still annoying:

  • You first have to find the MP3 behind the episode (Apple Podcasts and Spotify pages don't show it).
  • Episodes are long. OpenAI's Whisper API rejects files over 25 MB, so a one-hour episode has to be split first.
  • Running Whisper yourself means a GPU or a slow laptop, plus ffmpeg, plus a script to turn the output into subtitles.

Here's the trick for the first problem, and a tool that handles the rest.

Every podcast has a public RSS feed

Almost every podcast is published through an RSS feed, and each episode in it has an <enclosure> tag with the direct audio link:

<item>
  <title>Politicians are afraid to fix taxes. So 100 citizens tried.</title>
  <pubDate>Wed, 28 Oct 2026 12:57:50 GMT</pubDate>
  <enclosure url="https://.../episode.mp3" type="audio/mpeg" length="29312400"/>
</item>
Enter fullscreen mode Exit fullscreen mode

If you only have an Apple Podcasts link, Apple's public lookup API gives you the feed: https://itunes.apple.com/lookup?id=<podcast id> returns a feedUrl field. The podcast id is the number after /id in the link.

So the pipeline is: link → feed → newest episodes → MP3 → Whisper → text and subtitles.

The no-code way

I packaged that pipeline into a cloud tool: Speech to Text API on Apify.

  1. Open it and press Try for free (Apify's free plan includes monthly credit).
  2. Paste a podcast RSS feed, an Apple Podcasts link, or direct links to audio or video files (MP3, M4A, WAV, MP4, MOV...). Dropbox and Google Drive share links work too.
  3. Choose how many episodes per podcast, the quality and, if you want, Translate to English.
  4. Press Start. You get the transcript, timestamps and download links for SRT, VTT and TXT files.

It runs Whisper (base for Fast, small for Accurate), detects the language by itself (99 languages) and skips silence, so a one-hour episode takes a few minutes.

From Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("sndzcc/speech-to-text").call(run_input={
    "urls": [
        "https://feeds.npr.org/510289/podcast.xml",
        "https://podcasts.apple.com/us/podcast/the-daily/id1200361736",
    ],
    "maxEpisodesPerFeed": 2,
    "quality": "fast",
})
for ep in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(ep["podcast"], "|", ep["title"], "|", ep["words"], "words")
    print(ep["srtUrl"])
Enter fullscreen mode Exit fullscreen mode

Each row looks like this:

{
  "title": "Politicians are afraid to fix taxes. So 100 citizens tried.",
  "podcast": "Planet Money",
  "publishedAt": "2026-10-28T12:57:50Z",
  "language": "en",
  "durationSec": 2059.9,
  "minutesCharged": 35,
  "words": 5480,
  "text": "This message comes from Design in California, a podcast telling stories from the 50-year history of Apple...",
  "segments": [{"start": 0.0, "end": 4.96, "text": "This message comes from Design in California, a podcast telling stories from the 50-year"}],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/.../001-Politicians-are-afraid.srt"
}
Enter fullscreen mode Exit fullscreen mode

Schedule it daily with "Only episodes published since" and send new transcripts to Google Sheets, Notion or your AI pipeline for summaries.

What it costs

Price per minute 1-hour episode
Fast (Whisper base) $0.005 $0.30
Accurate (Whisper small) $0.01 $0.60

For reference, OpenAI's whisper-1 API is $0.006 per minute and needs you to split long files yourself. Only the minutes actually transcribed are charged, and there's a per-file cap so a 5-hour recording doesn't surprise you.

Limits to know

  • YouTube, TikTok and Spotify links don't work: those sites block automated downloads. Use the podcast's RSS feed or Apple Podcasts page instead.
  • Speakers aren't labeled (no diarization) yet.
  • Noisy audio and overlapping voices lower accuracy; Accurate quality helps.

If you'd like speaker labels or another output format, tell me in the comments.

Top comments (0)