# Whisper Audio & Podcast Transcriber (SRT, VTT, Translate) (`steady_kahikatea/whisper-transcriber`) Actor

Transcribe audio/video files or podcast RSS episodes with Whisper running inside the Actor (no third-party API). Text, timestamps, SRT/VTT, language detection, optional English translation. Only transcribe recordings you have rights and consent to.

- **URL**: https://apify.com/steady_kahikatea/whisper-transcriber.md
- **Developed by:** [Nick Hellmich](https://apify.com/steady_kahikatea) (community)
- **Categories:** AI, Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 96.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Whisper Audio & Podcast Transcriber (SRT, VTT, Translate)

Transcribe audio and video files, or the latest episodes of a **podcast RSS feed**, with **Whisper running inside this Actor**: no third-party API or account needed. You get text, timestamped segments, **SRT and VTT subtitles**, the detected language, and optional **translation to English**. Upload files or paste links, including Google Drive and Dropbox share links.

> **Consent and rights:** only transcribe recordings you own or have permission to transcribe, and respect the privacy of the people speaking.

### Quick start

1. Click **Start**. The prefill transcribes a 45-second clip of the Gettysburg Address (LibriVox reading, public domain) with the **fast** model for **$0.016**.
2. Add your own files, or a podcast RSS feed together with "Latest episodes per feed".
3. Open the **Output** tab. The **Text only** view shows just the transcripts; the full view includes download links for TXT, SRT and VTT.

### Models

| Quality | Model | Best for | Price per audio minute |
|---|---|---|---|
| fast | Whisper base | Clear speech, drafts, search indexing | $0.006 |
| standard (default) | Whisper small | Most podcasts and meetings, translation | $0.015 |
| accurate | Whisper large-v3-turbo | Accents, noisy audio, names | $0.05 |

Each successfully transcribed file also costs **$0.01**, which covers download and model start-up. Examples (standard): a 3-minute clip costs $0.055; a 30-minute episode costs $0.46. With the fast model, a 30-minute episode costs $0.19. **Failed files are never charged**, and that includes dead links, sign-in pages and web pages that aren't audio. Bronze, Silver and Gold plans get **10/20/30% off**.

**Long episodes:** set **Maximum cost per run** high enough. If it's too low, the row says how long the recording is and roughly how much it needs, and you aren't charged.

### Output

```json
{ "source": "https://api.apify.com/v2/key-value-stores/1jeoFyhuQnpLWO4x9/records/gettysburg-address-40s.mp3", "ok": true,
  "language": "en", "durationSeconds": 45.1, "billedMinutes": 1, "quality": "fast", "charged": true,
  "text": "Four score and seven years ago our fathers brought forth on this continent a new nation ...",
  "segments": [{ "start": 0.0, "end": 6.2, "text": "Four score and seven years ago ..." }],
  "files": { "txt": "https://api.apify.com/...txt", "srt": "https://api.apify.com/...srt", "vtt": "https://api.apify.com/...vtt" } }
```

### Limits

Up to 10 files per run (including RSS episodes), 500 MB and 120 minutes per file, and 4 GB memory. Transcription runs on CPU, so long files take a while; the fast model is the quickest. Inputs are deleted after each file, and audio and transcripts are never logged. Output stays in the run's storage under Apify's normal retention.

### FAQ

**Which languages?** About 99, detected automatically. Set `language` (for example `es`) to skip detection.
**Speaker labels?** Not yet. You get one transcript per file, with timestamps.
**YouTube or TikTok links?** They're refused on purpose. Use files or podcast feeds you have rights to.
**Why "LOGIN_OR_VIEWER_PAGE"?** The share link isn't public. Set it to "Anyone with the link" or upload the file. You weren't charged.
**Can an AI agent call it?** Yes, through the Apify API or MCP, and it supports x402 payments.

### Integrations: no-code and AI

#### Zapier: new podcast episode → transcript in Notion

1. **Trigger:** RSS by Zapier → *New Item in Feed* (your show's feed).
2. **Action:** Apify → *Run Actor* → `Whisper Audio & Podcast Transcriber`, run **asynchronously** (start-up alone takes about 40 s, over Zapier's 30 s sync limit). Input: `{"audioUrls": ["{{Enclosure URL}}"], "quality": "standard"}`.
3. **Second Zap:** Apify → *Finished Actor run* (this Actor) → *Fetch dataset items* → Notion *Create Database Item* with Title = `episodeTitle` or `source`, Content = `text`, and the SRT link = `files.srt`.

#### Make: weekly show → transcript plus YouTube captions

*Schedule* → *Apify Run an Actor* with `{"rssFeeds": ["https://example.com/feed.xml"], "latestEpisodes": 1}` → a separate scenario with *Watch Actor Runs* → *Get Dataset Items* → *Google Docs Create a Document* (`text`) and *HTTP Get a file* (`files.srt`) for captions.

#### n8n: voice notes → meeting minutes with an LLM

*Telegram/Drive trigger* → *Apify: Run an Actor and get dataset* (wait for finish = true) → *OpenAI / AI Agent* node ("Summarise `{{$json.text}}` into decisions and action items") → *Slack* or *Email*.

#### LangChain: searchable podcast archive

```python
from langchain_apify import ApifyWrapper
from langchain_core.documents import Document
docs = ApifyWrapper().call_actor(
    actor_id="steady_kahikatea/whisper-transcriber",
    run_input={"rssFeeds": ["https://example.com/feed.xml"], "latestEpisodes": 5, "quality": "fast"},
    dataset_mapping_function=lambda it: Document(page_content=it.get("text") or "",
        metadata={"source": it["source"], "title": it.get("episodeTitle"), "published": it.get("published")}),
).load()
```

#### LlamaIndex: one node per timestamped segment

```python
from llama_index.core import Document
from llama_index.readers.apify import ApifyDataset
## Run the Actor once, then load the run's dataset by ID.
docs = ApifyDataset("<APIFY_TOKEN>").load_data(dataset_id="<defaultDatasetId>",
    dataset_mapping_function=lambda it: Document(text=it.get("text") or "", metadata={"source": it["source"]}))
```

**Sample input → output:** `{"audioUrls": ["https://example.com/ep42.mp3"], "quality": "standard"}` → `{"ok": true, "language": "en", "durationSeconds": 1802, "billedMinutes": 31, "text": "Welcome back to the show ...", "files": {"srt": "https://api.apify.com/...srt"}, "charged": true}`. Cost: $0.475.

**Want a finished PDF or Word transcript?** See **Podcast & Audio to PDF / Word Transcript**, which chains this Actor with the document generator.

> **Tip:** Zapier's synchronous *Run Actor* times out after 30 seconds. For anything longer, run it asynchronously and start a second Zap from the **Finished Actor run** trigger. Make's synchronous timeout depends on your plan; use **Watch Actor Runs** for long jobs.

**Also works with:** the Apify API ("API" tab), the Apify MCP server for Claude/Cursor-style agents, and x402 payments.

**Docs used:** [Zapier](https://docs.apify.com/platform/integrations/zapier) · [Make](https://docs.apify.com/platform/integrations/make) · [n8n](https://docs.apify.com/platform/integrations/n8n) · [LangChain](https://docs.apify.com/platform/integrations/langchain) · [LlamaIndex](https://docs.apify.com/platform/integrations/llama-index)

### For AI agents

```
Actor: steady_kahikatea/whisper-transcriber
Input: {"audioUrls": ["https://example.com/ep.mp3"], "quality": "fast"}  or  {"rssFeeds": ["https://example.com/feed.xml"], "latestEpisodes": 2}
Output: rows with text, segments[], srt, vtt, language, billedMinutes, charged, error
```

### Licenses

faster-whisper and CTranslate2 (MIT); Whisper models (MIT).

Questions? Use the Issues tab. If it's useful, a rating helps others find it.

# Actor input Schema

## `audioUrls` (type: `array`):

Upload recordings or paste direct links to audio/video files you have the right and consent to transcribe. Video/social platform links (YouTube, TikTok, Instagram, Vimeo, X, Facebook…) are rejected. Max 10 files per run, 500 MB and 120 minutes each.

## `rssFeeds` (type: `array`):

Podcast feed URLs. The latest N episodes of each feed are transcribed (counted toward the 10-file limit).

## `latestEpisodes` (type: `integer`):

How many of the newest episodes to transcribe from each feed.

## `quality` (type: `string`):

fast = Whisper base (cheapest, good for clear English). standard = Whisper small (better accuracy and languages). accurate = Whisper large-v3-turbo (best accuracy, especially non-English; slowest).

## `task` (type: `string`):

transcribe = text in the spoken language. translate = English translation (uses the fast or standard model).

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

ISO code such as en, es, de, ja. Leave empty to auto-detect.

## `skipSilence` (type: `boolean`):

Skips non-speech parts; reduces hallucinations on music/silence.

## `beamSearch` (type: `boolean`):

Use beam size 5 instead of greedy decoding.

## `includeSubtitles` (type: `boolean`):

SRT and VTT are always saved as files; this also embeds them in each dataset row.

## Actor input object example

```json
{
  "audioUrls": [
    "https://api.apify.com/v2/key-value-stores/1jeoFyhuQnpLWO4x9/records/gettysburg-address-40s.mp3"
  ],
  "latestEpisodes": 1,
  "quality": "fast",
  "task": "transcribe",
  "skipSilence": true,
  "beamSearch": false,
  "includeSubtitles": true
}
```

# Actor output Schema

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

No description

## `files` (type: `string`):

No description

# 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 = {
    "audioUrls": [
        "https://api.apify.com/v2/key-value-stores/1jeoFyhuQnpLWO4x9/records/gettysburg-address-40s.mp3"
    ],
    "quality": "fast"
};

// Run the Actor and wait for it to finish
const run = await client.actor("steady_kahikatea/whisper-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 = {
    "audioUrls": ["https://api.apify.com/v2/key-value-stores/1jeoFyhuQnpLWO4x9/records/gettysburg-address-40s.mp3"],
    "quality": "fast",
}

# Run the Actor and wait for it to finish
run = client.actor("steady_kahikatea/whisper-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 '{
  "audioUrls": [
    "https://api.apify.com/v2/key-value-stores/1jeoFyhuQnpLWO4x9/records/gettysburg-address-40s.mp3"
  ],
  "quality": "fast"
}' |
apify call steady_kahikatea/whisper-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,steady_kahikatea/whisper-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/bdiyDyODjYzi6aoU1/builds/bSv1Q6RgXf2MywY9Q/openapi.json
