Video & Audio Transcriber

Transcribe public audio and video URLs into searchable text, timestamps, and subtitles for captioning, research, archives, and AI workflows.

Data fields

FieldTypeDescription
inputUrlstringValue exported as inputUrl.
urlstring | nullValue exported as url.
sourceTypestringValue exported as sourceType.
platformstringValue exported as platform.
durationSecondsnumber | nullValue exported as durationSeconds.
transcribedSecondsnumber | nullValue exported as transcribedSeconds.
languagestring | nullValue exported as language.
languageProbabilitynumber | nullValue exported as languageProbability.

Input preview

mediaUrlsPublic media or page URLs
feedUrlsPublic RSS or Atom feed URLs
maxEpisodesPerFeedEpisodes per feed
languageSpoken language
modelWhisper model
taskTask

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Convert public audio and video into searchable transcript text, timestamped segments, and subtitle files. Provide one public media link or a batch, then export source-bound records for captioning, research, archives, and AI workflows.

Who is it for?

Use this Actor when you need reusable text from spoken content without manually copying timestamps:

  • Content and video teams preparing captions and searchable archives.
  • Researchers and journalists creating notes from public interviews, lectures, and recordings.
  • Podcast teams turning recent public episodes into text for editorial workflows.
  • AI builders supplying speech-derived text to retrieval, analysis, or summarization pipelines.

What you get

Each completed item includes transcript text, timed segments, subtitle text, language metadata, duration information, and the submitted source link. Batch results preserve item-level errors so one unavailable source does not hide successful work.

  • Plain transcript text for search and analysis.
  • Start/end timestamps for every transcript segment.
  • SRT and WebVTT subtitle content.
  • Source URL, resolved URL where available, title, and source classification.
  • Language, selected model, processing task, and duration metadata.

Input recipes

One public audio file

{
  "mediaUrls": [{ "url": "https://raw.githubusercontent.com/ggml-org/whisper.cpp/master/samples/jfk.wav" }],
  "language": "en",
  "model": "base.en",
  "maxMinutesPerItem": 10
}

A batch with language detection

{
  "mediaUrls": [
    { "url": "https://example.com/interview.mp3" },
    { "url": "https://example.com/presentation.mp4" }
  ],
  "language": "auto",
  "model": "base",
  "task": "transcribe",
  "maxMinutesPerItem": 30
}

Recent public podcast episodes

{
  "feedUrls": [{ "url": "https://example.com/podcast.xml" }],
  "maxEpisodesPerFeed": 5,
  "language": "auto",
  "model": "base"
}

Input settings

Setting What it controls
mediaUrls Public audio/video links and supported public media pages.
feedUrls Public podcast feed links for recent episodes.
maxEpisodesPerFeed Maximum recent episodes to include from each feed.
language auto detection or an ISO 639-1 code such as en, es, de, fr, or ja.
model tiny, base, small, or English-focused base.en.
task Keep spoken language with transcribe, or use translate for English text.
maxMinutesPerItem Maximum audio duration to include for each item.

Exact duplicate source links are handled once per run. Start with a short duration limit when checking an unfamiliar source.

Example result

{
  "inputUrl": "https://example.com/interview.mp3",
  "sourceType": "public-media",
  "durationSeconds": 132,
  "transcribedSeconds": 132,
  "language": "en",
  "model": "base",
  "task": "transcribe",
  "text": "Thank you for joining us today.",
  "segments": [{ "start": 0, "end": 2.4, "text": "Thank you for joining us today." }],
  "srt": "1\n00:00:00,000 --> 00:00:02,400\nThank you for joining us today.",
  "error": null
}

Use cases

  • Create captions and subtitle drafts for public video.
  • Search spoken interviews, calls, lectures, and meetings that are publicly shared.
  • Build a text archive for podcast editorial planning.
  • Send transcript rows to an AI agent, vector database, spreadsheet, or reporting workflow.
  • Keep source links with every exported transcript for traceability.

Limits and supported sources

Use publicly reachable media. Private links, login-only pages, DRM-protected media, and speaker diarization are outside this Actor's scope. Results can vary with source availability, audio quality, language, and selected model. Direct public media links are the most predictable starting point.

Tips for better transcripts

  • Choose the correct language when you already know it.
  • Use base.en for English-only recordings; use multilingual models for other languages.
  • Choose small when accuracy matters more than run time.
  • Use shorter per-item limits to test a source before a longer batch.
  • Export segments, srt, or vtt when your downstream workflow needs timestamps.

API usage

Run the Actor through the Apify API using the same input object shown above. Replace APIFY_TOKEN with an Apify API token.

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/video-audio-transcriber-scraper').call({
  mediaUrls: [{ url: 'https://example.com/interview.mp3' }],
  language: 'auto',
  model: 'base',
  maxMinutesPerItem: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient

client = ApifyClient("APIFY_TOKEN")
run = client.actor("fetch_cat/video-audio-transcriber-scraper").call(run_input={
    "mediaUrls": [{"url": "https://example.com/interview.mp3"}],
    "language": "auto",
    "model": "base",
    "maxMinutesPerItem": 10,
})
print(client.dataset(run["defaultDatasetId"]).list_items().items)

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~video-audio-transcriber-scraper/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mediaUrls":[{"url":"https://example.com/interview.mp3"}],"language":"auto","model":"base","maxMinutesPerItem":10}'

MCP and AI agents

Add this Actor to an Apify MCP client to let an agent request transcription and read the resulting dataset. Configure the tool using Apify MCP, then give your agent a public source URL and the desired transcript language or duration limit.

claude mcp add apify -- npx -y @apify/mcp-server
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/mcp-server"],
      "env": { "APIFY_TOKEN": "APIFY_TOKEN" }
    }
  }
}

Example prompts: “Transcribe this public WAV in English” and “Run the Video & Audio Transcriber on these public episode URLs, then summarize the dataset.”

Support

For help, share a sanitized input, the affected inputUrl, and the dataset error value. Do not send credentials or private-media links.

Common questions

Questions and answers reused from the canonical actor README.

Can I submit a video page URL?

Yes, for supported publicly reachable pages. A direct public media link is the most predictable option.

Can I translate speech to English?

Yes. Set task to translate and select a multilingual model.

How does automatic language work?

Set language to auto to return language metadata when it can be determined. If certainty is low, language fields may be empty rather than guessed.

Why does a batch item show an error?

The item may be unavailable, too large, unsupported, or contain no detected speech. Other valid batch items continue normally.

Is speaker diarization included?

No. This release provides transcript text and timed segments, not speaker labels.