Audio, Video & Podcast Transcriber (Whisper)
Pricing
from $8.00 / 1,000 audio minute transcribeds
Audio, Video & Podcast Transcriber (Whisper)
Transcribe audio and video files and podcast RSS episodes with OpenAI Whisper (faster-whisper, CPU). Get full text, timestamped segments, language detection and SRT + VTT subtitles. Pay per audio minute, only for transcripts that were saved.
Pricing
from $8.00 / 1,000 audio minute transcribeds
Rating
0.0
(0)
Developer
Nick Na
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn audio files, videos and podcast episodes into text, timestamped segments and SRT + VTT subtitles with OpenAI's Whisper speech recognition. Paste direct links to media files, point it at files in your Apify storage, or give it a podcast RSS feed and it transcribes the latest episodes. You get one clean dataset row per file, plus downloadable .srt, .vtt, .txt and .json files.
You pay per minute of audio, only for transcripts that were saved. Broken links, unsupported files and refused URLs cost nothing.
Built for podcasters, content-repurposing workflows, researchers, journalists and no-code automations (n8n, Make, Zapier). It also works with AI agents through Apify's MCP server: clear input fields, predictable output, stable error codes.
Your media, your rights. This Actor only transcribes media files you supply and podcast RSS enclosures, the download links podcast feeds publish for apps. It does not download from YouTube, TikTok, Instagram, Facebook, X/Twitter, Vimeo, Twitch, Spotify, SoundCloud, Apple Music, Netflix or similar platforms, whose terms forbid downloading. Such links are refused per item at no charge. It uses no cookies, logins or workarounds of any kind. Only submit media you own or have permission to transcribe.
What it does
- Transcribes audio and video: mp3, m4a, wav, ogg, opus, flac, aac, mp4, webm, mov, mkv, avi and more. ffmpeg decodes the audio track; video is ignored.
- Podcast RSS feeds: reads the feed (RSS 2.0 with iTunes tags, Atom, RSS 1.0) and transcribes the latest N episodes, or only episodes published since a date. That is ideal for a daily or weekly schedule. A podcast website that links to its feed works too.
- 99 languages, detected automatically from the first 30 seconds, or set by you.
- Translate to English: Whisper's built-in speech translation turns any supported language into English text and subtitles. It works best with Balanced quality.
- Subtitles ready to upload: SRT and WebVTT, split into readable cues of at most 2 lines and about 7 seconds each.
- Word-level timestamps (optional): start, end and confidence for every word. Useful for editing tools, karaoke-style captions and search.
- Skips silence and music with voice activity detection. That is faster and avoids made-up text in silent parts.
- Vocabulary hint: give names and jargon so Whisper spells them right, for example "Interview with Dr. Anika Okafor about CRISPR" or "A LibriVox recording". Without the hint, Fast heard "LibriVox" as "liberal box" in our tests.
- Long files: a 3-hour episode runs in the default 4 GB of memory. Audio is processed in 10-minute chunks cut at quiet moments.
- Bulk and robust:
- downloads are polite: at most 2 at a time per host, with retries and backoff that honor
Retry-After, and they resume interrupted transfers; - size, duration and content type are checked first;
- one bad file never fails the run; it gets a row with an
errorCode.
- downloads are polite: at most 2 at a time per host, with retries and backoff that honor
- Spending cap respected: if you set a maximum cost per run, the Actor stops cleanly before going over and marks the remaining files
skipped.
Use cases
- Podcasters: transcripts and captions for every episode, show notes, blog posts, SEO pages and accessibility. Schedule the Actor with
episodesSinceto catch new episodes automatically. - Content repurposing: turn webinars, talks and interviews into text for articles, newsletters, social posts or LLM summarization.
- Research: transcribe interviews, focus groups, lectures, oral histories and public-domain archives in bulk, then search, code or analyze them.
- Video teams: SRT/VTT subtitles for your own videos; upload to your video host or player.
- AI agents and automations: an agent or an n8n/Make/Zapier flow sends a file URL and reads back
text,segmentsandsrtUrl.
How to use
-
Paste media file URLs (one per line), and/or podcast RSS feed URLs, and/or point to records in an Apify key-value store.
-
Pick Quality:
- Fast (Whisper base) is the default and fits clear speech;
- Balanced (Whisper small) is more accurate on accents, noisy recordings and non-English speech, and about 3x slower.
Fast costs $0.008 per minute, Balanced $0.016.
-
Optionally set the language, translate to English, word timestamps, a vocabulary hint, or the episodes per feed / since date.
-
Click Start. Results appear in the Output tab: status, language, duration, the transcript, and links to the SRT, VTT and JSON files.
Input example
{"mediaUrls": ["https://images-assets.nasa.gov/video/jsc2026m000070-Artemis_II_Receive_Special_Message_from_Apollo_16_Astronaut_Charlie_Duke/jsc2026m000070-Artemis_II_Receive_Special_Message_from_Apollo_16_Astronaut_Charlie_Duke~mobile.mp4"],"rssFeedUrls": ["https://feeds.megaphone.fm/nationalaeronauticsandspaceadministration1776343825"],"maxEpisodesPerFeed": 2,"quality": "fast","language": "auto","wordTimestamps": false}
| Field | Default | What it does |
|---|---|---|
mediaUrls | none | Direct http(s) links to audio/video files. Objects like {"url": "..."} are accepted too. |
rssFeedUrls | none | Podcast RSS/Atom feed URLs (or a podcast website that links to its feed) |
maxEpisodesPerFeed | 3 | Latest episodes per feed (1–500) |
episodesSince | none | Only episodes published on/after this date (YYYY-MM-DD, or relative like 7 days) |
quality | fast | fast (Whisper base) or balanced (Whisper small) |
language | auto | Whisper language code (en, es, de, fr, pt, ja, zh...) or auto |
translateToEnglish | false | Output an English translation instead of the original language |
wordTimestamps | false | Add per-word start/end/probability to segments and the JSON file |
skipSilence | true | Voice activity detection: skip long silences and music |
initialPrompt | none | Vocabulary hint: names, brands, jargon (max 600 characters) |
keyValueStoreId / keyValueStoreKeys | none | Transcribe files stored in an Apify key-value store |
maxDurationMinutes | 180 | Longer files are refused (up to 600) |
maxFileSizeMb | 1000 | Larger downloads are stopped (up to 4000) |
itemTimeoutMinutes | 120 | Time limit per file for download, and separately for transcription |
Output example
One dataset row per file or episode. The transcript files are in the run's key-value store:
{"index": 0,"sourceType": "url","source": "https://images-assets.nasa.gov/video/jsc2026m000070-.../...~mobile.mp4","status": "succeeded","language": "en","languageProbability": 0.99,"durationSeconds": 58.3,"billedMinutes": 1,"wordCount": 106,"text": "Hello, Reed, Victor, Christina and Jeremy. This is Apollo 16 astronaut Charlie Duke. John Young and I landed on the moon in 1972 in the lunar module we named Orion. ...","segments": [{ "id": 0, "start": 5.3, "end": 10.5, "text": "Hello, Reed, Victor, Christina and Jeremy." },{ "id": 1, "start": 10.5, "end": 14.4, "text": "This is Apollo 16 astronaut Charlie Duke." }],"srtUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/transcript-0000-jsc2026m000070-Artemis_II_Receive_Special_Message_from_Apoll.srt","vttUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/transcript-0000-....vtt","txtUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/transcript-0000-....txt","jsonUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/transcript-0000-....json","quality": "fast","model": "whisper-base","task": "transcribe","mediaFormat": "mov","hasVideo": true,"processingSeconds": 5.0,"realTimeFactor": 0.086,"chargedEvents": { "audio-minute-transcribed": 1 },"errorCode": null,"errorMessage": null}
Podcast episodes also carry feedUrl, feedTitle, episodeTitle, episodeGuid, episodePublishedAt and episodeLink.
A refused or failed item looks like this. It is never charged:
{ "index": 3, "source": "https://www.youtube.com/watch?v=...", "status": "failed", "chargedEvents": {},"errorCode": "PLATFORM_NOT_SUPPORTED","errorMessage": "This Actor only transcribes media files you supply or podcast RSS enclosures. YouTube links are not supported, because YouTube's terms do not allow downloading its content. ..." }
The OUTPUT record in the key-value store holds a run summary: total, succeeded, failed, skipped, audioMinutesTranscribed, chargedEvents.
Error codes (status failed, or skipped for RUN_STOPPED):
| Code | Meaning |
|---|---|
INVALID_URL | Not a valid http(s) URL |
PLATFORM_NOT_SUPPORTED | A streaming/social platform link (YouTube, TikTok, Spotify...) or an Apple Podcasts page |
URL_NOT_ALLOWED | The host resolves to a private or local network address |
DOWNLOAD_FAILED | HTTP error, DNS failure or network error after retries |
DOWNLOAD_TIMEOUT | The server was too slow |
NOT_A_MEDIA_FILE | The URL returned a web page, a document or a streaming playlist (HLS/DASH), not a file |
FILE_TOO_LARGE | Over maxFileSizeMb |
UNSUPPORTED_MEDIA | ffmpeg cannot read the file |
NO_AUDIO_TRACK | A video without sound |
NO_AUDIO | Empty file or less than 0.1 s of audio |
DURATION_TOO_LONG | Over maxDurationMinutes |
DECODE_FAILED | The audio track is corrupt |
FEED_FETCH_FAILED | The RSS feed could not be downloaded |
NOT_A_FEED | The URL is not an RSS/Atom feed (and does not link to one) |
FEED_HAS_NO_EPISODES | No episodes with audio/video, or none since episodesSince |
KVS_RECORD_NOT_FOUND | The key-value store or record does not exist |
ITEM_TIMEOUT | Over itemTimeoutMinutes |
OUT_OF_MEMORY | Run with more memory |
TRANSCRIPTION_FAILED | Unexpected error (please report it with the run ID) |
RUN_STOPPED | Skipped because the run reached your maximum cost or was aborted |
Pricing
This Actor uses pay-per-event pricing. You pay for transcribed audio, not for compute time:
| Event | Price | When |
|---|---|---|
| Audio minute transcribed (Fast quality, the default) | $0.008 per started minute | For each file or episode whose transcript was saved |
| Audio minute transcribed (Balanced quality) | $0.016 per started minute | The same, with the larger Whisper small model (about 3x more compute) |
| Actor start | Apify's standard start fee | Once per run |
Examples:
- a 58-second clip: 1 minute = $0.008 (Balanced: $0.016);
- a 42-minute podcast episode: $0.336;
- 10 hours of interviews: $4.80;
- failed, refused or skipped files: $0.
Minutes are rounded up per file, with 1 second of tolerance: 1:00.9 is billed as 1 minute, 1:01.5 as 2. Set Max cost per run in the run options to cap spending. The Actor checks the budget before each file and stops cleanly at the limit.
Speed, limits and good to know
-
Speed (CPU). With the default 4 GB of memory (1 CPU core):
- Fast transcribes about 12–14x faster than real time: our 69-minute test podcast took 4 min 50 s;
- Balanced runs at about 4–5x real time: about 13–15 minutes per hour of audio.
More memory (up to 16 GB = 4 cores) processes several files, or several parts of one long file, in parallel. On 4 cores the same 69-minute podcast took 1 min 45 s. This is a CPU Actor, cheaper per minute than GPU tools, but not instant.
-
Accuracy.
- Whisper is very good on clear speech in major languages.
- Use Balanced for strong accents, noisy or old recordings, phone or radio audio, and most non-English content.
- Names and jargon improve with a vocabulary hint.
- Like every Whisper model, it can occasionally repeat or invent a phrase in long silences or music. Keep "Skip silence and music" on.
-
No speaker labels (diarization) in this version.
-
Limits. Up to 600 minutes and 4 GB per file (defaults 180 minutes and 1 GB), and up to 5,000 inputs per run. Streaming playlists (HLS
.m3u8, DASH.mpd) are not supported. -
Where your files live. In the run's default key-value store. Unnamed storages expire after the retention period of your Apify plan, so download or copy what you need.
-
Public URLs only. Links to private or local network addresses are blocked. Private files: upload them to an Apify key-value store and use
keyValueStoreId+keyValueStoreKeys.
Use it from code, n8n, Make or agents
Run it synchronously and get the dataset back in one HTTP call (best for short files; synchronous runs time out after 300 s):
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"mediaUrls": ["https://example.com/interview.mp3"], "quality": "fast"}'
In n8n or Make, use the Apify "Run Actor" node or module with the same JSON, then read text, segments or srtUrl from the dataset items. For new podcast episodes, schedule the Actor (Apify Schedules) with rssFeedUrls and episodesSince: "7 days". AI agents can call it through the Apify MCP server; the input and dataset schemas describe every field.
FAQ
Can I transcribe YouTube, TikTok, Instagram or Spotify links? No. Those platforms' terms do not allow downloading their content, so those links are refused at no charge. If you own the video, upload the original file (or a direct link to it) instead. For podcasts, use the show's RSS feed: it is published so apps can download episodes.
Do I pay for files that fail? No. Charges happen only after the transcript files are saved. Every failure gets an error code and costs $0.
Why does Balanced cost more? Whisper small needs about 3x more computing time per minute than Whisper base. Translation and word timestamps cost the same as plain transcription.
Where do I find a podcast's RSS feed? Your podcast host shows it ("RSS feed" in the show settings). For other shows, the podcast's website usually links to it. You can also paste the website URL and the Actor will look for the feed link. Apple Podcasts and Spotify pages don't work.
How accurate is it?
- On clear English speech, Fast got 94–96% of words right in our tests (word error rate 4–6%, for example against NASA's human-made captions).
- Balanced is better on old, noisy and non-English audio: 97% vs. 94% on a 1941 radio recording.
- Results vary with audio quality, accents and jargon.
- Numbers come out as digits ("1972"), and punctuation and capitalization are included.
Can it identify who is speaking? Not yet (no diarization).
Do you keep my audio? No. Files are downloaded to temporary storage during the run and deleted right after transcription. Results are written only to your run's storage. Logs contain URLs and timings, not audio or transcripts.
Can I use the transcripts commercially? Yes. The models are MIT-licensed (OpenAI Whisper). You need the rights to the media you transcribe.
Something looks wrong? Open an issue on the Issues tab with the run ID. We read every one.
Credits
- Whisper by OpenAI (MIT), https://github.com/openai/whisper. Runs via faster-whisper (MIT) by SYSTRAN, https://github.com/SYSTRAN/faster-whisper, and CTranslate2 (MIT).
- Silero VAD (MIT), https://github.com/snakers4/silero-vad
- FFmpeg (GPL/LGPL), https://ffmpeg.org, from Debian.
- The example video is NASA's public-domain "Artemis II Receive Special Message from Apollo 16 Astronaut Charlie Duke". NASA does not endorse this Actor.