# Audio & Video Transcriber: Word Timestamps, SRT, VTT (`patchwell/patchwell-transcribe`) Actor

Transcribe audio and video URLs up to 3 hours each, in batches. Each word comes with start and end times and a confidence score, plus SRT and VTT subtitles. A 44-minute interview takes under a minute. $0.008 per audio minute.

- **URL**: https://apify.com/patchwell/patchwell-transcribe.md
- **Developed by:** [Aidan McCollum](https://apify.com/patchwell) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 audio minutes

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?

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

Paste audio or video links and get the transcript with **word-level timestamps**: each word carries its start time, end time and a confidence score. You also get **SRT and VTT subtitles** and the plain text. Send one link or a few hundred. Files can run up to 3 hours, three process at a time, and a 44-minute interview takes under a minute.

### What you get for each file

| Field | What it holds |
|---|---|
| `text` | The full transcript |
| `words` | Each word with `s` (start, seconds), `e` (end) and `p` (confidence, 0 to 1) |
| `segments` | Sentence-level chunks with start and end times |
| `srt`, `vtt` | Subtitle files, split at natural pauses |
| `language` | The language code it detected, or the one you set |
| `duration_s`, `word_count` | Audio length and number of words |
| `flags` | Each change the quality guards made, with timestamps (see below) |

#### Guards against Whisper's known failure modes

Whisper sometimes invents phrases over silence ("Thanks for watching!", "Subtitles by...") or repeats one line over and over. This Actor drops an invented phrase when the model's own confidence in it is low, and collapses repetition loops. You see each fix in `flags`, with the original text and its timestamps, so you can review or undo it.

### How to use it

1. Paste your links into **Audio or video URLs**. Direct file links work best (mp3, wav, m4a, ogg, flac, mp4, mov, webm and more).
2. Set the **language** if you know it. Leave it empty and the Actor detects it per file.
3. Click **Start**. The **Transcripts** tab in Output shows one row per file, and the **Subtitles** tab holds the SRT and VTT files.

You can also call it through the [Apify API](https://docs.apify.com/api/v2), run it on a schedule, or connect it to Make, Zapier, n8n and other Apify integrations.

### How much does transcription cost?

**$0.008 per audio minute**, rounded up per file. Failed downloads and unreadable files cost nothing.

| Audio | Cost |
|---|---|
| 30-second clip | $0.008 |
| 44-minute interview | $0.35 |
| 1-hour podcast episode | $0.48 |
| 100 one-hour episodes | $48.00 |

### Example

Input, using the 30-second sample prefilled in the form (a public-domain NASA interview with astronaut Bob Behnken):

```json
{ "urls": [{ "url": "https://patchwell.io/samples/nasa_interview_30s.mp3" }] }
```

Real output from that file, shortened:

```json
{
  "url": "https://patchwell.io/samples/nasa_interview_30s.mp3",
  "ok": true,
  "language": "en",
  "duration_s": 32.08,
  "word_count": 90,
  "text": "Sure. My name is Bob Behnken. And to be clear, you go by Bob, not Robert, right? I do. Okay, great...",
  "words": [
    { "w": "Sure.", "s": 0.0, "e": 0.3, "p": 0.782 },
    { "w": "My", "s": 0.46, "e": 0.52, "p": 0.998 },
    { "w": "name", "s": 0.52, "e": 0.66, "p": 1.0 }
  ],
  "srt": "1\n00:00:00,000 --> 00:00:00,300\nSure.\n\n2\n00:00:00,460 --> 00:00:01,740\nMy name is Bob Behnken.\n...",
  "flags": []
}
```

### Speed

On the full 44-minute version of that interview (2,626 seconds of audio), the run took **49 seconds end to end** and returned 5,613 words. After a quiet period, the first run needs 10 to 30 seconds more while a GPU starts.

### Use it from an AI agent

Add this Actor to Claude, Cursor or any MCP client through [Apify's MCP server](https://mcp.apify.com). With word timings, your agent can quote a recording to the second: "at 12:04 the guest said..."

### FAQ

#### Which model does it use?

Whisper large-v3-turbo (through faster-whisper) on NVIDIA GPUs, plus the quality guards above.

#### Can it transcribe YouTube links?

No. It needs a direct link to a media file. Run a YouTube downloader Actor first and pass its file URL here, or use files you host.

#### Does it identify speakers?

Not yet. Speaker labels are on the roadmap. Today you get words, timings and confidence.

#### Which languages work?

The 99 languages Whisper supports. English and other widely spoken languages come out most accurate. For anything critical, check the `p` confidence values.

#### Is my audio stored?

The Actor downloads each file into a temporary container, transcribes it, and discards both. Patchwell keeps no copies. Results stay in your own Apify storage.

### Other Patchwell tools

- [AI Web Research with Cited Sources](https://apify.com/patchwell/patchwell-research): answers where each sentence cites its source page.
- [CSV & Excel Data Cleaner with Change Log](https://apify.com/patchwell/patchwell-clean-data): clean messy spreadsheets or any Actor's dataset, with each fix logged.

Questions or a custom need: patchwell.support@gmail.com

# Actor input Schema

## `urls` (type: `array`):

Direct links to media files: mp3, wav, m4a, ogg, flac, mp4, mov, webm and most others. Up to 3 hours each. Files run three at a time. Use files you have the right to process.

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

Two-letter code such as en, es, de or ja. Leave it empty and the Actor detects the language from the audio.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://patchwell.io/samples/nasa_interview_30s.mp3"
    }
  ]
}
```

# Actor output Schema

## `transcripts` (type: `string`):

No description

## `subtitles` (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 = {
    "urls": [
        {
            "url": "https://patchwell.io/samples/nasa_interview_30s.mp3"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("patchwell/patchwell-transcribe").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 = { "urls": [{ "url": "https://patchwell.io/samples/nasa_interview_30s.mp3" }] }

# Run the Actor and wait for it to finish
run = client.actor("patchwell/patchwell-transcribe").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 '{
  "urls": [
    {
      "url": "https://patchwell.io/samples/nasa_interview_30s.mp3"
    }
  ]
}' |
apify call patchwell/patchwell-transcribe --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,patchwell/patchwell-transcribe"
        }
    }
}
```

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/KcnXRGUUCkMBMgbvx/builds/asZPqcNlJe3oWxzVr/openapi.json
