Podcast Transcription API — RSS feeds to episode transcripts
Under maintenancePricing
Pay per event
Podcast Transcription API — RSS feeds to episode transcripts
Under maintenanceTranscribe podcast episodes straight from an RSS feed. Pick the newest N per show, only episodes after a date, or only titles matching a phrase. Whisper runs inside the Actor — no API key. Show and episode metadata, text, SRT + VTT. Failed or silent episodes are never billed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Dos
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Point it at a podcast RSS feed and get transcripts of the episodes you actually want — the newest N of each show, everything published after a date, or only episodes whose title matches a phrase. Whisper runs inside the Actor (faster-whisper, int8, CPU), so there is no API key, no external service, and no per-provider markup. 99 languages, auto-detected. Optional translation to English.
Every item carries the show and episode metadata from the feed — show title, author, episode number, season, publish date, GUID — next to the transcript, so a podcast pipeline never has to resolve enclosure URLs or re-fetch the feed to find out what it just transcribed.
Built for podcast search, show-notes generation, clip finding, media monitoring and AI agents that need episodes as text.
What you get
One dataset item per episode:
{"feed_title": "Gravity Assist","feed_author": "Brian Dunbar","episode_title": "Season 5, Episode 32: Finale","episode_number": 32,"season": 5,"published": "2022-08-12T18:21:00+00:00","episode_guid": "…","url": "https://www.nasa.gov/…/gafinale081222.mp3","status": "ok","language": "en","duration_seconds": 1864.3,"billed_minutes": 32,"n_segments": 214,"n_words": 4930,"text": "Full transcript as one string …","segments": [{ "start": 0.0, "end": 6.48, "text": "Welcome back to the show." }],"srt": "1\n00:00:00,000 --> 00:00:06,480\nWelcome back to the show.\n","vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:06.480\nWelcome back to the show.\n"}
Episode selection
| Field | Default | What it does |
|---|---|---|
feed_urls | — | up to 10 RSS/Atom feeds, 40 MB each |
episodes_per_feed | 3 | how many matching episodes to take per show |
published_after | — | 2026-08-01, or an ISO timestamp |
title_contains | — | case-insensitive substring match on the title |
episode_urls | — | extra direct audio URLs, transcribed alongside the feeds |
Filters combine: published_after and title_contains must both match.
Selection runs in feed order — which is newest-first for virtually every
show — and then takes the first episodes_per_feed.
Two deliberate behaviours worth knowing:
- An episode whose feed gives no usable date survives a
published_afterfilter. Dropping it would hide episodes because the publisher's XML is sloppy, which is not your problem to debug. - A direct episode URL pasted into
feed_urlsis detected and transcribed as a single episode instead of failing as a malformed feed.
Up to 50 episodes are queued per run, however the feeds divide it up.
Pricing — pay only for delivered transcripts
| Event | Price | Charged when |
|---|---|---|
episode-transcribed | $0.005 | an episode delivered a non-empty transcript |
transcription-minute | $0.008 | per started minute of audio transcribed |
A 30-minute episode costs $0.245. A weekly show, 4 episodes a month, runs about $1.
There is no actor-start fee — a start fee bills you for failed runs, and this family never charges one.
The billing rule is deliberate: episodes that fail to download, cannot be decoded, or contain no recognizable speech are never billed — not even the per-episode fee. A feed that will not parse is reported in the dataset and costs nothing. Your cost ceiling per episode = $0.005 + $0.008 × Max minutes per episode (default 120).
Transcription options
| Field | Default | Notes |
|---|---|---|
model | base | tiny / base / small — accuracy vs speed |
language | auto | ISO code (en, ar, es, …) skips detection |
task | transcribe | translate = English text from any language |
vad_filter | true | skip silence — faster, fewer hallucinated lines |
max_minutes_per_episode | 120 | hard cost/length cap; longer episodes flagged truncated |
tiny and base are baked into the image and start instantly; small
downloads once at the start of the run (~1 minute extra).
Re-running without paying twice
Each run checkpoints the episode URLs it finished, so a migrated or resumed
run never re-transcribes — and never re-charges — work it already delivered.
Across runs, deduplicate on episode_guid: it is the identifier the feed
itself considers stable.
Limits, stated plainly
- CPU transcription: roughly 5–15 seconds of processing per audio minute
with
base, more withsmall. A 60-minute run timeout comfortably covers three 45-minute episodes withbase; raise the timeout for longer batches or forsmall. - 10 feeds per run, 25 episodes per feed, 50 episodes per run, 250 MB per episode, 480 minutes max per episode.
- Video podcasts work — the audio track is what gets transcribed.
- Feeds behind a paywall or private RSS token work only if the enclosure URL itself is fetchable without a login.
The family
| Actor | Use it for |
|---|---|
| Podcast Transcription API (this one) | RSS feeds → episode transcripts + metadata |
| Whisper Transcriber | any audio/video file → transcript text |
| SRT Subtitles Generator | media → finished .srt / .vtt caption files |
| PDF OCR Extractor | scanned PDFs, Arabic + English OCR |
Issues and requests
Open an issue on the actor's Issues tab — I read all of them.