# Smart Transcript — YouTube Transcriber (`argosmarcelo/smart-transcript-private-bridge`) Actor

Transcribe YouTube videos and playlists with AI speech recognition—even without captions. Get full text, timestamped segments and JSON via API. Auto-detect spoken language or choose one. Process up to 3 videos per run, 60 minutes each. Pay $0.03 per started minute of successful transcription.

- **URL**: https://apify.com/argosmarcelo/smart-transcript-private-bridge.md
- **Developed by:** [Argos Benvenutti](https://apify.com/argosmarcelo) (community)
- **Categories:** Videos, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 25.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 transcribed-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

## Smart Transcript — YouTube Transcriber

Transcribe the speech from **up to 3 YouTube videos in one run**, even when the videos have no captions. Choose the exact video links you want, or select videos from a playlist or channel.

**What you get:** full transcription text, detected language, timestamped segments when available, and JSON results for each video. **Choose the spoken language or use automatic detection.**

### How to use

1. Add **1–3 YouTube video links** to **Video URLs (up to 3)**. Videos can come from different channels.
2. Select **Transcribe** and choose a spoken language, or leave it on **Auto detect**.
3. Click **Start**. Open **Results / Dataset** to view or export the output.

To discover videos from a **playlist or channel**, use **YouTube URL** instead and choose **Maximum videos from playlist/channel** (1–3). Do not fill in both URL fields.

#### Example: three videos you choose

```json
{
  "sourceUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.youtube.com/watch?v=9UkCsZUrZ2g",
    "https://www.youtube.com/watch?v=3A5vQ-LBKfU"
  ],
  "language": "auto",
  "mode": "submit"
}
```

Each link selects **one exact video**. For playlists and channels, up to three videos are selected in discovery order, which may change over time.

### Languages

Choose **Auto detect** to identify the spoken language, or select it manually in the **Language** field. The form offers **37 language selections**, including separate options for Portuguese (Brazil) and Portuguese (Portugal).

Supported languages include Arabic, Bengali, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Spanish, Swahili, Swedish, Tagalog (Filipino), Tamil, Thai, Turkish, Ukrainian, Urdu, and Vietnamese.

Transcription stays in the **original spoken language**. Translation and speaker identification are not included. Accuracy depends on the audio quality and language.

### Results and rejected videos

Each requested video receives a separate Dataset row:

- **`completed`** — transcription text and metadata are available.
- **`rejected`** — that video could not be accepted, for example because it exceeds 60 minutes or its duration cannot be verified.

**One rejected video does not cancel valid videos.** A run can finish successfully with both completed and rejected items. Check each row's `status` to see what happened. Rejected videos are not charged for transcription.

### Price and limits

- **US$0.03 per started minute of successfully delivered transcription**, rounded up separately for each completed video.
- **Up to 3 videos per run** and **60 minutes per video**.
- Works with speech audio, even without YouTube captions. Audio quality affects accuracy.
- Live streams, Shorts, and unsupported or inaccessible videos are not covered by this service.
- Processing time depends on video length and service availability. Platform usage charges may apply separately.

**Price examples:** 30 seconds = US$0.03; 7 minutes 19 seconds = US$0.24; 12 minutes 52 seconds = US$0.39. Rejected videos = US$0 in transcription charges.

### Use the API

Start a run with your Apify API token (keep it private):

```bash
curl -X POST 'https://api.apify.com/v2/actors/QPgSQoYb4m8AjQco0/runs' \
  -H 'Authorization: Bearer YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"sourceUrls":["https://www.youtube.com/watch?v=jNQXAC9IVRw"],"mode":"submit","language":"auto"}'
```

The response includes a **Run ID** and **Dataset ID**. After the run completes, fetch the results:

```text
GET https://api.apify.com/v2/datasets/YOUR_DATASET_ID/items?format=json
```

For questions or errors, use the **Issues** tab and include your Run ID. Submit only content you have permission to process.

# Actor input Schema

## `sourceUrls` (type: `array`):

Paste 1 to 3 individual YouTube video links. Each link selects one specific video. Leave YouTube URL blank when using this field.

## `sourceUrl` (type: `string`):

Use one YouTube video, playlist or channel link instead of Video URLs. For playlists and channels, choose up to 3 videos using Maximum videos from playlist/channel.

## `mode` (type: `string`):

Transcribe videos, or preview available video information without starting transcription.

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

Auto-detect the spoken language or choose one of 37 language options, including Portuguese (Brazil/Portugal), English, Spanish, French, German and more. Transcription only; no translation.

## `maxItemsPerSource` (type: `integer`):

Only for playlist and channel links. Choose up to 3 discovered videos. This setting does not affect Video URLs.

## `pollSeconds` (type: `integer`):

How often to check for completed results while the run is active.

## `maxWaitSeconds` (type: `integer`):

Maximum wait for results. For longer videos, increase this value and set the Apify Run timeout at least 120 seconds higher.

## Actor input object example

```json
{
  "sourceUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "sourceUrl": "https://www.youtube.com/watch?v=eLxpLyQBOtg",
  "mode": "submit",
  "language": "en",
  "maxItemsPerSource": 1,
  "pollSeconds": 5,
  "maxWaitSeconds": 120
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "sourceUrls": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw"
    ],
    "mode": "submit",
    "language": "en",
    "maxItemsPerSource": 1,
    "pollSeconds": 5,
    "maxWaitSeconds": 120
};

// Run the Actor and wait for it to finish
const run = await client.actor("argosmarcelo/smart-transcript-private-bridge").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 = {
    "sourceUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],
    "mode": "submit",
    "language": "en",
    "maxItemsPerSource": 1,
    "pollSeconds": 5,
    "maxWaitSeconds": 120,
}

# Run the Actor and wait for it to finish
run = client.actor("argosmarcelo/smart-transcript-private-bridge").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 '{
  "sourceUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "mode": "submit",
  "language": "en",
  "maxItemsPerSource": 1,
  "pollSeconds": 5,
  "maxWaitSeconds": 120
}' |
apify call argosmarcelo/smart-transcript-private-bridge --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,argosmarcelo/smart-transcript-private-bridge"
        }
    }
}
```

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/QPgSQoYb4m8AjQco0/builds/qyNatCZ743Iv1CiSW/openapi.json
