# Video & Audio Transcriber - Speech to Text, Subtitles & SRT (`zaver.api/universal-video-audio-transcriber`) Actor

Transcribe any video or audio to text from a URL - YouTube, TikTok, Facebook, X, Vimeo, podcasts, 1000+ sites, or direct media files. AI speech-to-text with language detection, timestamps and ready-to-use SRT/WebVTT subtitles. Optional AI summary. Export to CSV, JSON or Excel.

- **URL**: https://apify.com/zaver.api/universal-video-audio-transcriber.md
- **Developed by:** [Zaver](https://apify.com/zaver.api) (community)
- **Categories:** AI, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 video transcribeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Video & Audio Transcriber — Speech to Text, Subtitles & SRT

Turn **any video or audio URL into accurate text** — with language detection, timestamped segments, ready-to-use **SRT/WebVTT subtitles**, and an optional **AI summary**. Paste links from YouTube, TikTok, Facebook, X (Twitter), Vimeo, SoundCloud, podcast RSS feeds and **1000+ other sites**, or point it straight at a media file. Export to **CSV, JSON or Excel**.

Powered by OpenAI Whisper speech-to-text. No login, no browser extension, no manual downloading.

### What it does

- 🎙️ **Speech to text** — a clean, full transcript for every URL.
- 🌍 **Any language** — automatic language detection, or pass a language hint.
- ⏱️ **Timestamps** — optional segment-level start/end times.
- 💬 **Subtitles** — ready-to-use **SRT** and **WebVTT** files for captioning and editing.
- 🧠 **AI summary** — optional 1–2 sentence summary plus keywords per item.
- 🔗 **Works everywhere** — YouTube, TikTok, Facebook, Instagram, X, Vimeo, SoundCloud, Dailymotion, podcasts (RSS), and 1000+ sites, **or direct media files** (mp3, mp4, wav, m4a, flac, ogg, webm, mov).
- 📄 **Export** — CSV, JSON, Excel via the Apify dataset.

### Input

| Field | Type | Description |
|---|---|---|
| `mediaUrls` | array | **Required.** Video/audio page URLs or direct media-file links, one per line. |
| `includeSummary` | boolean | Add an AI summary + keywords for each transcript. |
| `includeTimestamps` | boolean | Return timestamped segments, not just full text. |
| `includeSrt` | boolean | Also produce `srt` and `vtt` subtitle strings. |
| `language` | string | Optional ISO hint (`en`, `es`, `hi`, …). Empty = auto-detect. |
| `proxyConfiguration` | object | Apify Proxy (on by default). Switch to Residential if a site blocks datacenter IPs. |

```json
{
  "mediaUrls": [
    "https://www.tiktok.com/@nasa/video/7665075736742530317",
    "https://www.youtube.com/watch?v=VIDEO_ID",
    "https://cdn.example.com/episode-12.mp3"
  ],
  "includeSrt": true,
  "includeSummary": true
}
```

### Output

One row per URL:

```json
{
  "url": "https://www.tiktok.com/@nasa/video/7665075736742530317",
  "platform": "TikTok",
  "title": "Something big just landed on TikTok.",
  "uploader": "nasa",
  "status": "ok",
  "transcript": "Something big just landed ...",
  "language": "english",
  "audio_duration": 25.0,
  "duration_seconds": 25,
  "srt": "1\n00:00:00,000 --> 00:00:04,000\nSomething big just landed ...",
  "summary": "A short NASA clip announcing a new arrival on TikTok.",
  "keywords": ["nasa", "space", "announcement"]
}
```

Failed, private, or non-media URLs return a row with `status: "error"` and **are not billed**.

### Pricing (pay per result)

Length-tiered, so long recordings stay fair:

| Event | Price | When |
|---|---|---|
| `media-transcribed` | **$0.030** | per item (includes the first audio-minute) |
| `transcription-minute` | **$0.020** | per additional audio-minute |
| `srt-exported` | **$0.006** | only if subtitle export is on |
| `ai-summary` | **$0.007** | only if AI summary is on |

A 1-minute clip is $0.03; a 10-minute video is $0.03 + 9 × $0.02 = **$0.21**. You pay only for successful transcripts.

### Notes

- Only media that **has an audio track** can be transcribed; silent or image-only content returns an error row.
- Very long media works — audio is extracted to a compact stream before transcription, so there's no small file-size ceiling.
- For sites that block datacenter traffic, select a **Residential** proxy group.

# Actor input Schema

## `mediaUrls` (type: `array`):

URLs to transcribe, one per line. Works with page URLs from YouTube, TikTok, Facebook, X (Twitter), Vimeo, SoundCloud, podcast RSS and 1000+ other sites, or direct links to media files (mp3, mp4, wav, m4a, flac, ogg, webm, mov). Only media with audio can be transcribed.

## `includeSummary` (type: `boolean`):

Generate a short AI summary and keywords from each transcript. Billed per summary (see pricing).

## `includeTimestamps` (type: `boolean`):

Return the transcript broken into timestamped segments, not just the full text.

## `includeSrt` (type: `boolean`):

Generate ready-to-use subtitle files - an <code>srt</code> and <code>vtt</code> string per item - for captioning and video editing. Billed per item exported (see pricing).

## `language` (type: `string`):

ISO code (e.g. <code>en</code>, <code>es</code>, <code>hi</code>) to hint the transcriber. Leave empty to auto-detect.

## `proxyConfiguration` (type: `object`):

Proxy used to fetch media. Apify Proxy is enabled by default and is enough for most sites; switch to a Residential group if a site blocks datacenter IPs.

## Actor input object example

```json
{
  "mediaUrls": [
    "https://www.tiktok.com/@nasa/video/7665075736742530317"
  ],
  "includeSummary": false,
  "includeTimestamps": false,
  "includeSrt": false,
  "language": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per URL, with the transcript, language, metadata and optional summary.

## `resultsCsv` (type: `string`):

The same records as a CSV download, ready for Excel or Sheets.

## `runSummary` (type: `string`):

Counts for the run: items transcribed, summaries, audio minutes, and errors.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mediaUrls": [
        "https://www.tiktok.com/@nasa/video/7665075736742530317"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaver.api/universal-video-audio-transcriber").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mediaUrls": ["https://www.tiktok.com/@nasa/video/7665075736742530317"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("zaver.api/universal-video-audio-transcriber").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mediaUrls": [
    "https://www.tiktok.com/@nasa/video/7665075736742530317"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call zaver.api/universal-video-audio-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zaver.api/universal-video-audio-transcriber"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/62eeHFQ8KIrkVJWfz/builds/KFQgIzpbnxbAyGmWA/openapi.json
