# YouTube Video Transcript & API: Full Text, Timestamps, SRT (`quarra/youtube-video-transcript`) Actor

Get a YouTube video transcript from the link of a video or Short, without an API key: full text for AI, timestamped segments, SRT and VTT, language of your choice, video details. $5 per 1,000 transcripts; videos without captions are free.

- **URL**: https://apify.com/quarra/youtube-video-transcript.md
- **Developed by:** [Quarra Labs](https://apify.com/quarra) (community)
- **Categories:** Videos, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 transcripts

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

## YouTube Video Transcript: Full Text, Timestamps, SRT

Paste YouTube video links and get each video's transcript: the full text, ready for AI and LLM pipelines,
timestamped segments, and SRT or WebVTT subtitles if you want them, with the video's details (title, channel, views,
likes, duration). No YouTube account, no API key. Export as JSON, CSV or Excel, or read it through the Apify API.

- **One link or thousands**: watch links, `youtu.be` links, Shorts, live replays and embeds, or plain video IDs, up to
  20,000 per run.
- **The language you want**: list your preferred languages; otherwise you get the video's original language, not a
  dubbed track. Every record lists the caption tracks the video has.
- **A free record that says why** when a video has no transcript (no captions, private, live still running). You pay
  only for transcripts delivered.

**$5 per 1,000 transcripts**, the same on every Apify plan, plus a start fee of $0.005 per run at the default memory.

### Quick start

1. Paste one video link per line into **Videos**.
2. Click **Start**.
3. Read the transcripts in the run's **Output** tab, or export them as JSON, CSV or Excel.

Through the API:

```json
{
  "urls": ["https://www.youtube.com/watch?v=8jPQjjsBbIc", "https://www.youtube.com/shorts/QyVlUmluLhs"],
  "languages": ["en"],
  "transcriptFormat": "text",
  "includeSrt": true
}
```

Like any Apify Actor, it can be scheduled, connected to webhooks, Make, Zapier, n8n, or called by AI agents through
Apify's MCP server. Channel and playlist links work here too; to read whole channels, playlists or YouTube searches
with their own settings, the [YouTube Transcript Scraper](https://apify.com/quarra/youtube-transcript-scraper) has them.

### Output

One record per video. A transcript (`status: "ok"`), shortened here:

```json
{
  "status": "ok",
  "videoId": "8jPQjjsBbIc",
  "url": "https://www.youtube.com/watch?v=8jPQjjsBbIc",
  "title": "How to stay calm when you know you'll be stressed | Daniel Levitin | TED",
  "channel": { "name": "TED", "handle": "@TED", "subscriberCount": 27900000 },
  "publishedAt": "2015-11-23T16:58:55Z",
  "durationSeconds": 740,
  "viewCount": 20051236,
  "likeCount": 268984,
  "language": "en",
  "isAutoGenerated": false,
  "transcript": "A few years ago, I broke into my own house. I had just driven home, it was around midnight in the dead of Montreal winter, …",
  "segments": [
    { "start": 13.24, "end": 15.8, "duration": 2.56, "text": "A few years ago, I broke into my own house." },
    { "start": 16.88, "end": 18.096, "duration": 1.216, "text": "I had just driven home," }
  ],
  "wordCount": 2232,
  "billedTranscripts": 1,
  "scrapedAt": "2026-10-07T19:03:48.620Z"
}
```

A video without captions comes back as a free `missing` record with the reason (`missingReason`) and the tracks it
does have (`availableLanguages`).

### What we measured

On the Apify platform on 9 October 2026, at the default memory (512 MB):

- 62 videos (a channel, searches in three languages, a Short, a video without captions): 57 transcripts and 5 free
  `missing` records with the reason, in 77 seconds.
- 12 podcast episodes of up to 5 h 16 min each, with SRT and VTT: 12 of 12 in 89 seconds.
- One video runs in about 4 seconds.
- Lectures dubbed by YouTube's AI into 11 to 19 languages came back in their original language.

### Pricing

**$5 per 1,000 transcripts** ($0.005 each), plus a start fee of $0.005 per GB of memory per run (1 GB minimum:
$0.005 at the default 512 MB). A video over 10 hours counts as one transcript per 10 hours started. Videos without
captions, errors and duplicates are free; platform usage is included.

| Run (default memory) | Price |
|---|---|
| 1 video | $0.010 |
| 100 videos, 8 of them without captions | $0.465 |
| 1,000 transcripts | $5.005 |

Your maximum charge per run is never exceeded, and `maxItems` caps the charged transcripts. Apify's free plan
includes $5 of usage a month, with no credit card required.

### Limits

- **No captions, no transcript.** This Actor reads YouTube's captions; it does not transcribe audio. In a sample of
  150 varied videos, 19% had no captions at all (silent Shorts, live streams, music): they come back as free records.
- Automatic captions are what YouTube generates: punctuation is often sparse and speakers are not named.
- Age-restricted, members-only and paid videos need a signed-in account; we do not use accounts.
- Live streams have no transcript until they end.
- For music videos, YouTube's automatic captions transcribe the lyrics; **Skip music videos** leaves them out.

### FAQ

**Do I need a YouTube API key?** No. Leave the Connection setting on its default (automatic): it is included in the
price.

**Is it legal?** It reads the captions YouTube shows to any visitor who is not signed in. Transcripts reproduce what
people say, which may be protected by copyright and may contain personal data: your use must comply with the laws
and terms that apply to you, including the GDPR in Europe.

**Why is a video "missing" when I can see captions on YouTube?** Check `availableLanguages` and `missingReason`: the
captions may be only in languages you did not list. If not, open an issue with the URL and the run ID.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

### Related tools from Quarra

- [YouTube Transcript Scraper](https://apify.com/quarra/youtube-transcript-scraper): channels, playlists, searches and
  monitoring of new videos.
- [TikTok Transcript Scraper](https://apify.com/quarra/tiktok-transcript-scraper) and
  [Instagram Transcript Scraper](https://apify.com/quarra/instagram-transcript-scraper): speech to text for short videos.

# Actor input Schema

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

One per line: video URLs (watch, youtu.be, Shorts, live, embed) or 11-character video IDs. Channel and playlist links work too and are expanded into their videos, newest first for channels (up to 10 per link).

## `languages` (type: `array`):

Language codes in order of preference (en, fr, pt-BR, es…). For each one, captions written by the creator first, then auto-generated. Empty: the language spoken in the video. Every record says which language you got (language, isAutoGenerated) and lists all tracks.

## `useAnyLanguage` (type: `boolean`):

When none of your languages exists on a video, return its transcript in the language spoken (requestedLanguageFound: false). Off: return a free missing record listing the available languages instead.

## `transcriptFormat` (type: `string`):

transcript is the whole text in one string; segments is a list of {start, end, duration, text} in seconds.

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

Add an srt field with the transcript as a ready-to-save .srt subtitle file.

## `includeVtt` (type: `boolean`):

Add a vtt field with the transcript as a ready-to-save .vtt subtitle file.

## `removeSoundTags` (type: `boolean`):

Remove non-speech tags such as \[Music], \[Applause] or (laughter) from the text and segments. Handy before feeding transcripts to an LLM.

## `includeDescription` (type: `boolean`):

Add the video's full description and its tags (keywords). Title, channel, date, duration, views, likes and chapters are always included.

## `excludeMusicVideos` (type: `boolean`):

Skip videos whose YouTube category is Music before their transcript is downloaded (never charged). YouTube's automatic captions transcribe song lyrics as speech; turn this on if you only want spoken content. Interviews or lessons filed under Music are skipped too.

## `maxItems` (type: `integer`):

Optional cap for the whole run, counted in charged transcripts (a video over 10 hours counts one per 10 hours started). Respected exactly. Free records (no captions, errors) do not count; a run that keeps meeting videos without a transcript stops early and says why (see Pricing in the README). Empty = no cap.

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

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=8jPQjjsBbIc"
  ],
  "useAnyLanguage": true,
  "transcriptFormat": "both",
  "includeSrt": false,
  "includeVtt": false,
  "removeSoundTags": false,
  "includeDescription": false,
  "excludeMusicVideos": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every video: transcript, segments, metadata, and free missing/error records with the reason.

## `overview` (type: `string`):

One line per video: status, title, channel, language, words, reason.

## `summary` (type: `string`):

Per-input counts (listed, transcripts, missing, errors, already delivered), videos without captions 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 = {
    "urls": [
        "https://www.youtube.com/watch?v=8jPQjjsBbIc"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/youtube-video-transcript").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": ["https://www.youtube.com/watch?v=8jPQjjsBbIc"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/youtube-video-transcript").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": [
    "https://www.youtube.com/watch?v=8jPQjjsBbIc"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/youtube-video-transcript --silent --output-dataset

```

## MCP server setup

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

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/PnYM6UbZ2wGiekfcz/builds/UECUN0klH7GpzxY8d/openapi.json
