Audio & Video Transcription (Whisper) for AI Agents avatar

Audio & Video Transcription (Whisper) for AI Agents

Pricing

Pay per event

Go to Apify Store
Audio & Video Transcription (Whisper) for AI Agents

Audio & Video Transcription (Whisper) for AI Agents

Transcribe your audio and video files with Whisper: text, timestamped segments, optional word timings, language detection, translation to English, and SRT/VTT subtitle files. MP3, M4A, WAV, MP4, WebM and more from URLs or key-value stores. Priced per audio minute.

Pricing

Pay per event

Rating

0.0

(0)

Developer

tinplatelabs

tinplatelabs

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

10

Monthly active users

2 days ago

Last modified

Share

Turn your audio and video files into text the way an AI agent or pipeline can use it: the full transcript, timestamped segments (and word timings if you want them), the detected language with a confidence score, the duration, and ready-made SRT and WebVTT subtitle files. Send a batch of file URLs or key-value store records; get one result row per file.

Works on interviews, meetings, podcasts, lectures, voice notes, webinars, customer calls and videos you own. Built for people and AI agents (Claude, ChatGPT, Cursor and others through the Apify MCP server).

Your files only. This Actor transcribes media files you supply. It does not download from YouTube, TikTok, Instagram, Facebook, X, Vimeo, SoundCloud, Spotify or other platforms: links to their pages get a PLATFORM_URL_NOT_SUPPORTED error (free). Upload the file you have the rights to into a key-value store, or give a direct link to it on your own storage.

Why this one

  • Whisper, three sizes. OpenAI's Whisper (MIT) via faster-whisper on CPU: base (fast, clear speech), small (accents, noise, non-English), medium (most accurate). Each has its own per-minute price.
  • 99 languages. Automatic language detection with a confidence score, or set the language yourself. Optional translation to English.
  • Subtitles included. SRT, WebVTT and plain-text files are saved to the run's key-value store, with download links in the result.
  • Clean output. Silero voice activity detection skips silence and music, which avoids invented text in quiet parts. The plain text starts a new paragraph after long pauses.
  • Any format. MP3, M4A/AAC, WAV, FLAC, OGG/Opus, WebM, MP4, MOV, MKV, AVI and most other audio and video formats (decoded by ffmpeg). Video files are transcribed from their audio track.
  • Long files. Up to 5 hours per file (default limit 3 hours). Long recordings are cut at quiet moments into 10-minute pieces and stitched back on one timeline.
  • Predictable. Pay per started audio minute, only for files that were transcribed. Every failure is an error item that says what to change, and it costs nothing.

Input

FieldTypeDefaultWhat it does
mediaarray of stringsrequiredDirect http(s) URLs of audio/video files, key-value store records as kvs://KEY (the store in keyValueStoreId, else this run's store) or kvs://STORE_ID_OR_NAME/KEY, or signed Apify record URLs (?signature=). Up to 200 per run.
keyValueStoreIdstringYour key-value store holding the files (pick it in Console, or pass its ID). The Actor runs with limited permissions and can read only this store and its own.
modelbase | small | mediumbaseWhisper model size. medium needs 4 GB of memory; with less, small is used instead (and charged at the small price).
languagestringautoISO 639-1 code such as en, es, de, ja. Empty: detect.
tasktranscribe | translatetranscribetranslate outputs English.
wordTimestampsbooleanfalseAdd words with start, end and probability to each segment.
vadFilterbooleantrueSkip silence and music (Silero VAD).
initialPromptstringNames and terms in the recording, to guide spelling.
includeSegmentsbooleantrueAdd segments to each result.
saveSubtitleFilesbooleantrueSave SRT, VTT and TXT files and link them in files.
maxDurationMinutesinteger 1-300180Longer files get a TOO_LONG item (not charged).
fileTimeoutSecsinteger 60-144003600Slower files get a TIMEOUT item (not charged).
{
"media": [
"https://upload.wikimedia.org/wikipedia/commons/3/35/First_Inauguration_of_FDR_-_Fear_Itself_Excerpt.ogg",
"kvs://team-call-2026-10-01.m4a"
],
"keyValueStoreId": "my-recordings",
"model": "small",
"wordTimestamps": true
}

To transcribe a file that isn't online, upload it to a key-value store, pick that store as keyValueStoreId and pass kvs://KEY.

Output

One dataset item per file:

{
"source": "https://upload.wikimedia.org/wikipedia/commons/3/35/First_Inauguration_of_FDR_-_Fear_Itself_Excerpt.ogg",
"status": "ok",
"text": "So first of all, let me assert my firm belief that the only thing we have to fear is fear itself ...",
"language": "en",
"languageProbability": 0.99,
"languageDetected": true,
"task": "transcribe",
"model": "base",
"durationSeconds": 46.959,
"speechSeconds": 44.1,
"billedMinutes": 1,
"chargedEvent": "minute-transcribed-base",
"segmentCount": 9,
"wordCount": 96,
"files": {
"srt": {"key": "001-First_Inauguration_of_FDR_-_Fear_Itself_Excerpt.srt", "url": "https://api.apify.com/v2/key-value-stores/.../records/001-...srt?signature=..."},
"vtt": {"key": "001-First_Inauguration_of_FDR_-_Fear_Itself_Excerpt.vtt", "url": "https://..."},
"txt": {"key": "001-First_Inauguration_of_FDR_-_Fear_Itself_Excerpt.txt", "url": "https://..."}
},
"media": {"format": "ogg", "audioCodec": "vorbis", "hasVideo": false, "sizeBytes": 995439},
"timingMs": {"download": 310, "decode": 120, "transcribe": 4200, "total": 4700},
"realtimeFactor": 0.089,
"warnings": [],
"segments": [
{"id": 0, "start": 0.0, "end": 6.2, "text": "So first of all, let me assert my firm belief", "avgLogprob": -0.21, "noSpeechProb": 0.01}
]
}
  • languageProbability is Whisper's confidence in the detected language (null when you set language).
  • speechSeconds is the speech found by voice activity detection; billing uses durationSeconds.
  • With wordTimestamps, each segment has words: [{"start", "end", "word", "probability"}].
  • The files links are signed and work without an Apify token.

A file that can't be transcribed gives an error item, and the run carries on:

{"source": "https://www.youtube.com/watch?v=...", "status": "error",
"error": {"code": "PLATFORM_URL_NOT_SUPPORTED", "message": "Links to youtube.com pages are not supported: this Actor transcribes media files you supply ..."}}

Error codes: INVALID_SOURCE, PLATFORM_URL_NOT_SUPPORTED, ACCESS_DENIED, DOWNLOAD_FAILED, FILE_TOO_LARGE, NOT_MEDIA, NO_AUDIO_STREAM, UNSUPPORTED_MEDIA, EMPTY_AUDIO, TOO_LONG, TIMEOUT, SPENDING_LIMIT_REACHED, INTERNAL_ERROR.

Pricing (pay per event)

EventPriceWhen
minute-transcribed-base$0.007Each started minute of audio transcribed with base
minute-transcribed-small$0.016Each started minute with small
minute-transcribed-medium$0.055Each started minute with medium
apify-actor-start$0.0025 per GBOnce per run, per GB of memory: $0.01 at the default 4 GB (loading the speech model)

A 1-hour podcast costs $0.43 with base or $0.97 with small (including the run start). A 61-second clip counts as 2 minutes. Send many files in one run to pay the start fee once. Platform usage is included in the price. Failed files are never charged; a file with no speech in it is charged like any other. Before each file the run checks your maximum total charge; a file that does not fit is marked SPENDING_LIMIT_REACHED and not transcribed.

Speed and memory

It runs on CPU. The default 4 GB run has one CPU core: base transcribes about 10 minutes of audio per minute, small about 4, medium a little over 1 (measured on Apify). 8 GB (two cores) is faster at the same price. medium needs 4 GB; a run with less memory uses small instead and says so in its status and warnings. At 2 GB, small decodes in smaller batches to stay within memory (a little slower). Audio is decoded to disk, so long files do not need extra memory. A failed file gets an error item and is not charged; the run itself only fails for invalid input.

Limits

  • 1 GB per file, 200 files per run, up to 300 minutes per file (maxDurationMinutes, default 180).
  • One audio track per file (the first). No speaker labels (diarization).
  • Platform page links (YouTube, TikTok, Instagram, Facebook, X, Vimeo, SoundCloud, Spotify, Twitch and similar) are refused.
  • Downloads follow up to 5 redirects; only public addresses are fetched.

Privacy

Files are downloaded into your run and processed inside it; results go only to the run's dataset and key-value store. Nothing is sent to any third party (no speech-to-text API), there is no telemetry, and only the exact URLs you give are fetched.

Use from an AI agent (MCP)

Add the Apify MCP server to your agent and enable this Actor. Call it with {"media": ["<file url>"]} and read text (or segments for timestamps) from the dataset item; use files.srt.url for subtitles.

Models and licenses

  • Models: OpenAI Whisper base, small and medium (MIT), as CTranslate2 conversions by SYSTRAN (faster-whisper-base, -small, -medium, MIT), pinned to a revision and checked against SHA256 sums at build time, run with int8 weights. Silero VAD (MIT) ships with faster-whisper. No endorsement by OpenAI or SYSTRAN is implied.
  • ffmpeg (LGPL/GPL) is the unmodified Debian package, run as a separate program to decode media. PyAV is not used.
ComponentLicenseRole
Whisper base/small/medium weights (SYSTRAN CTranslate2 conversions)MITSpeech recognition
faster-whisper 1.2.1 (incl. Silero VAD model)MITTranscription
CTranslate2 4.8.2MITInference
onnxruntime 1.31.0MITVoice activity detection
tokenizers, huggingface-hubApache-2.0Tokenizer, model loading
numpy 2.4.6BSD-3-ClauseAudio arrays
httpx 0.28.1, httpcore, h11, anyio, idnaBSD-3-Clause / MITDownloads
apify 4.1.0, apify-client, crawlee and their dependenciesApache-2.0 / MIT / BSDApify SDK
tqdm, certifiMPL-2.0 + MIT / MPL-2.0 (used unmodified)Progress helper, CA certificates
ffmpeg (Debian package, separate process)LGPL-2.1+ / GPLDecoding

Test-only: pytest (MIT). CI fails on any copyleft Python dependency.


Made by Tinplate Labs. This Actor is maintained by an AI; there is no support desk, so every error message is written to tell you exactly what to change.