Video Transcriber - Video & Audio to Text Transcript avatar

Video Transcriber - Video & Audio to Text Transcript

Pricing

from $1,250.00 / 1,000 short video (under 5 min)s

Go to Apify Store
Video Transcriber - Video & Audio to Text Transcript

Video Transcriber - Video & Audio to Text Transcript

Transcribe any video or audio URL to text. Full transcript, timestamped segments, SRT subtitles, word timings. YouTube, Vimeo, SoundCloud, direct media links. Whisper AI, 50+ languages, no API keys. $0.02 per minute.

Pricing

from $1,250.00 / 1,000 short video (under 5 min)s

Rating

0.0

(0)

Developer

Marielise

Marielise

Maintained by Community

Actor stats

0

Bookmarked

516

Total users

20

Monthly active users

8 days ago

Last modified

Share

Turn any video or audio URL into a text transcript with timestamps. Paste a YouTube, Vimeo or SoundCloud link, or a direct .mp3 / .mp4 file, and get the full video transcript, timestamped segments, word timings and an SRT subtitle file back. Whisper AI, 50+ languages, no API keys.

$0.02 per transcribed minute. A 10-minute video costs $0.20. A run that produces no transcript costs nothing.

What you get

  • Full transcript as one string, plus timestamped segments with start and end times
  • Word-level timestamps for every word (on by default)
  • SRT subtitles or a plain .txt file, saved to the key-value store on request
  • Language auto-detection across 50+ languages, or pin the language yourself
  • Media metadata: title, uploader, view count, upload date, platform
  • Up to 2 hours per recording

Quick start

Default input transcribes a 4-minute Vimeo short film for $0.08:

{
"url": "https://player.vimeo.com/video/108650530",
"language": "auto",
"includeTimestamps": true
}

API (cURL)

curl -X POST "https://api.apify.com/v2/acts/marielise.dev~video-transcriber-ultimate/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://player.vimeo.com/video/108650530", "language": "auto"}'

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('marielise.dev/video-transcriber-ultimate').call({
url: 'https://player.vimeo.com/video/108650530',
language: 'auto',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].text);
console.log(items[0].segments);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('marielise.dev/video-transcriber-ultimate').call(run_input={
'url': 'https://player.vimeo.com/video/108650530',
'language': 'auto',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0]['text'])

Pricing

Pay per event. No subscription, no per-result fee.

Per-minute pricing takes effect on 29 September 2026. Until then the previous duration tiers shown on the Pricing tab still apply.

EventPriceWhen
Transcribed minute$0.02Every started minute of audio, one minute minimum. Charged only after the transcript is saved.
Residential proxy minute$0.01Added per transcribed minute only when the download went through a residential proxy: you enabled useResidentialProxy, or YouTube's free proxy was unavailable and the actor fell back.
RecordingCostWith residential proxy
3 minutes$0.06$0.09
10 minutes$0.20$0.30
30 minutes$0.60$0.90
1 hour$1.20$1.80
2 hours$2.40$3.60

Platform compute is included. Nothing is charged for a run that ends without a transcript: unsupported URL, video not found, blocked download, no speech detected, recording over 2 hours, or an actor-side error.

Free-plan users get every feature. The only limit is your run's Max total charge; the actor checks it against the recording length before downloading anything and stops, uncharged, if the recording would exceed it.

Supported sources

SourceStatusNotes
YouTubeSupportedDownloads through a built-in free proxy. If that proxy is unavailable the actor falls back to a residential proxy and adds $0.01 per minute.
VimeoSupportedUse player.vimeo.com/video/ID. Plain vimeo.com/ID links often fail authorization.
SoundCloudSupportedPodcasts, interviews, any audio track
Direct media linksSupportedAny public URL ending in .mp3, .mp4, .m4a, .wav, .webm, such as a webinar recording or archive.org/download/<item>/<file>.mp3
Other yt-dlp sitesBest effortHundreds of sites listed under yt-dlp supported sites. Sites that serve only muxed video are downloaded at the smallest rendition and the audio track is extracted.
TikTok, X/Twitter, Facebook, Instagram, LinkedIn, AmazonNot supportedRejected before any download. Not charged.

Nothing in this table crashes the run. An unsupported or blocked URL finishes with a labelled status record in the key-value store under OUTPUT, and you are not charged.

Private, age-restricted and geo-restricted content

CaseWhat to do
Private or age-restrictedExport cookies from a logged-in browser (Netscape format) and paste them into cookies
Geo-restrictedSet useResidentialProxy to true and pick a proxyCountry where the video is viewable

Input

ParameterTypeDefaultDescription
urlstringrequiredVideo or audio URL. One per run; playlists are not expanded.
languagestring"auto"ISO 639-1 code (en, es, ja) or auto
includeTimestampsbooleantrueWord-level timestamps. Segment times are always returned.
outputFormatstring"json"json, text (adds transcript.txt) or srt (adds transcript.srt)
useResidentialProxybooleanfalseRoute the download through a residential proxy. +$0.01 per minute.
proxyCountrystring"US"Proxy country when a residential proxy is used
cookiesstringNetscape-format cookies for private or age-restricted content

Output

One dataset item per run:

{
"url": "https://player.vimeo.com/video/108650530",
"title": "Wanderers - a short film by Erik Wernquist",
"duration": 230,
"billedMinutes": 4,
"language": "English",
"text": "For all its material advantages, the sedentary life has left us edgy, unfulfilled...",
"segments": [
{
"text": "For all its material advantages, the sedentary life has left us edgy, unfulfilled.",
"start": 0,
"end": 17.7,
"words": [
{ "text": "For", "start": 0.0, "end": 0.32 },
{ "text": "all", "start": 0.32, "end": 0.5 }
]
}
],
"words": [
{ "text": "For", "start": 0.0, "end": 0.32 }
],
"metadata": {
"platform": "vimeo",
"uploader": "Erik Wernquist",
"viewCount": 2100000,
"uploadDate": "20141129"
},
"processedAt": "2026-09-14T09:12:00.000Z",
"provider": "groq-whisper"
}
FieldTypeDescription
urlstringInput URL
titlestringTitle from the platform
durationnumberAudio length in seconds, as measured from the file
billedMinutesnumberMinutes charged for this run
languagestringDetected or specified language
textstringComplete transcript
segments[]arraytext, start, end, and words[] when includeTimestamps is on
words[]arrayFlat word list with start and end, present when includeTimestamps is on
metadataobjectplatform, uploader, viewCount, uploadDate
processedAtstringISO timestamp
providerstringTranscription engine

With outputFormat: "srt" the key-value store also holds transcript.srt:

1
00:00:00,000 --> 00:00:17,700
For all its material advantages, the sedentary life has left us edgy, unfulfilled.

When there is no transcript

The run still finishes, and the key-value store record OUTPUT says why:

{
"ok": false,
"status": "not_found",
"reason": "The video could not be found.",
"nextSteps": ["Open the URL in a private browser window to confirm the video still exists and is public."],
"charged": false
}

Statuses: unsupported_platform, not_found, blocked, download_failed, invalid_input, video_too_long, budget_exceeded, no_speech, audio_too_large, transcription_failed, quota_exceeded, misconfigured, error.

How it works

  1. Reads the media metadata first. Recordings over 2 hours, or over your run's max total charge, stop here uncharged.
  2. Downloads the smallest stream that carries the speech.
  3. Compresses the audio to 16 kHz mono, the format Whisper works in internally, so a 2-hour recording uploads in under 25 MB.
  4. Transcribes with Whisper large-v3-turbo via Groq.
  5. Saves the transcript, then charges per minute.

A 4-minute video finishes in about 15 seconds end to end.

Use cases

  • Video transcript for SEO: publish the full transcript under the video so search engines index the spoken content
  • Subtitles: generate SRT files for YouTube, Vimeo or a course platform
  • Content repurposing: turn talks and podcasts into blog posts, show notes, newsletters, social clips
  • Research: make interviews and lectures searchable and quotable
  • AI pipelines: feed the transcript into summarisation, translation or a RAG index
  • Media monitoring: transcribe a channel's uploads on a schedule and search them for mentions

Limitations

  • One recording per run, up to 2 hours. Start runs in parallel for batches.
  • Recorded content only. Live streams and DRM-protected media cannot be downloaded.
  • Music-only or silent recordings produce no transcript and are not charged.
  • Sites not in the supported table may or may not work; a failure is reported and uncharged.

FAQ

Do I need a Whisper or Groq API key? No. Transcription is included in the per-minute price.

How accurate is it? Whisper large-v3 class accuracy, typically 95%+ on clear speech. Background music, crosstalk and heavy accents lower it.

How long does a run take? Roughly 4 seconds per minute of audio, dominated by the download. A 1-hour recording takes 3 to 5 minutes.

Why was I charged 4 minutes for a 3:50 video? Every started minute counts.

Can I get a YouTube transcript without a proxy charge? Yes. YouTube uses a built-in free proxy first. The residential surcharge applies only when that proxy is unavailable, and the run's RUN_METADATA record says whether it was used.

Can I cap what a run can cost? Set "Max total charge" in the run options. The actor checks the recording length against it before downloading and stops, uncharged, if it would not fit.


Built by Ekipnico. Transcription by Whisper via Groq.