Audio Transcription - Speech to Text, Podcast RSS, SRT avatar

Audio Transcription - Speech to Text, Podcast RSS, SRT

Pricing

from $5.60 / 1,000 results

Go to Apify Store
Audio Transcription - Speech to Text, Podcast RSS, SRT

Audio Transcription - Speech to Text, Podcast RSS, SRT

Audio transcription and speech to text with faster-whisper (tiny, base or small model, language auto-detect). Give mp3, m4a, wav, ogg or mp4 URLs or a public podcast RSS feed: one row per audio minute (text, start, end, language) plus the full TXT, SRT and VTT. Only-new mode for feeds.

Pricing

from $5.60 / 1,000 results

Rating

0.0

(0)

Developer

Martin Petrov

Martin Petrov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Security

Limited permissions

Share

Audio & Podcast Transcription - Whisper on CPU, one row per minute, TXT/SRT/VTT, podcast RSS

Turn audio files and podcast episodes into text and subtitles. Give direct mp3, m4a, wav, ogg, flac, mp4 or webm URLs, or a public podcast RSS feed. Measured: 10.5 minutes of audio were transcribed in 91 seconds of total run time at 4096 MB (about 8x faster than real time, model base), so 1 hour of audio takes roughly 8 minutes. You pay per transcribed audio minute: one dataset row = one minute.

What you get

  • One dataset row per transcribed minute: sourceUrl, episodeTitle, minute, start, end (seconds), text, language, feedUrl, published.
  • The full transcript as .txt, .srt and .vtt files in the run's key-value store. Public links are in every row (transcriptTxtUrl, transcriptSrtUrl, transcriptVttUrl, transcriptJsonUrl) and in the RUN_SUMMARY record.
  • Subtitle-ready SRT/VTT: cues are timed from word timestamps, max 2 lines of 42 characters (set subtitleMaxChars, e.g. 32 for vertical Shorts/Reels/TikTok), max 7 seconds per cue, cut at sentence ends and pauses. Upload the .srt straight to YouTube, Premiere, DaVinci Resolve or CapCut.
  • A .json file with every subtitle cue and every word with its start/end time (for karaoke captions, search inside audio, or clip cutting).
  • Language auto-detection per file (or set language, for example en).
  • Podcast RSS support: the newest maxEpisodes episodes of each feed (enclosure URLs are used). Apple Podcasts show links work too (the public RSS feed is looked up with Apple's official lookup API).
  • Episode filters for feeds: episodesSince (a date or "30 days"), titleIncludes / titleExcludes (e.g. skip trailers and reruns).
  • vocabulary: names and brands spoken in the audio, used as a spelling hint.
  • Only-new mode: with onlyNew and a monitorId, episodes that were already transcribed are skipped and not charged again. Schedule the actor daily to transcribe every new episode of your feeds.
  • RUN_SUMMARY record with counts (files, rows, audio minutes, compute seconds), per-file details and lastError.

What it does not do

  • No YouTube, TikTok or Instagram links (they need proxies and bot-detection workarounds; this actor does not use any). Only direct file URLs and public RSS feeds.
  • No speaker labels (diarization). Quality depends on the model: tiny is fastest, base (default) is good for clear English, small is more accurate and handles other languages better but is slower.
  • Whisper can mishear names and noisy audio; check important transcripts.
  • Files up to 1.5 GB each. Silent minutes produce no row.

Default input (about 1 minute)

The default input transcribes a 2.4 minute public-domain LibriVox recording (archive.org) and returns 3 rows.

Input

FieldMeaning
urlsAudio/video file URLs or podcast RSS feed URLs
maxEpisodesNewest N episodes per feed (default 1)
episodesSinceOnly episodes published on/after a date (2026-10-01) or within a period (30 days)
titleIncludes, titleExcludesKeep / skip episodes by title text (* = anything)
vocabularyNames and terms in the audio, e.g. Apify, Kubernetes (spelling hint)
modeltiny, base (default), small
languageLanguage code, empty = auto-detect
maxMinutesPerFileTranscribe only the first N minutes (0 = all)
onlyNew, monitorIdSkip already transcribed episodes

API example

curl -X POST "https://api.apify.com/v2/acts/martin10291~audio-podcast-transcriber/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://feeds.example.com/my-podcast.xml"], "maxEpisodes": 1, "model": "base", "onlyNew": true, "monitorId": "my-podcast"}'

Example: the new episodes of a show from Apple Podcasts from the last 14 days, no trailers, with names spelled right (checked 2026-11-06: 6 matching episodes):

{"urls": ["https://podcasts.apple.com/us/podcast/the-daily/id1200361736"], "maxEpisodes": 3, "episodesSince": "14 days",
"titleExcludes": ["trailer"], "vocabulary": "Apify, Kubernetes", "onlyNew": true, "monitorId": "daily-interviews"}

MCP (AI agents)

Add this actor as a tool: https://mcp.apify.com?tools=martin10291/audio-podcast-transcriber

Pricing and measured cost

Price: $8.00 per 1,000 results = $0.008 per transcribed audio minute (one row per minute). Measured on Apify on 2026-11-04 (model base, int8, 4096 MB): 10.47 audio minutes took 91 s of run time and 0.101 compute units (about 0.0097 compute units per audio minute). A 2.4 minute file costs more per minute because of the fixed start-up (loading the model). At 2048 MB the same file took 123 s and 0.068 compute units, but 4096 MB is the default so long recordings do not run out of memory.

Honest notes

Uses an honest User-Agent (RadarTranscriber/1.0 (+apify.com/martin10291)), no proxies. Only transcribe audio you have the right to use. Speech recognition: faster-whisper (CTranslate2) with OpenAI Whisper weights, running on CPU inside the actor, no external AI API.

Use it as an integration (chain it after another actor)

This actor can run automatically after any actor whose results contain an audio file or podcast RSS feed.

  1. Open the source actor in Apify Console and go to the Integrations tab.
  2. Click Add integration -> Actor, pick this actor and set Dataset to {{resource.defaultDatasetId}} (leave urls empty). Set your other options and save.
  3. When the source run finishes, this actor reads its dataset and processes every row. The field is detected automatically; set Dataset field if your column has another name.

You can also start it by hand with datasetId (pick a dataset or paste its ID) to process an existing dataset.

Good sources to chain from:

  • martin10291/apple-podcasts-scraper (feedUrl)
  • any actor with audioUrl / enclosureUrl / RSS feedUrl