# YouTube Transcript Extractor: Captions, Subtitles, SRT (`gouda_studios/youtube-transcript-extractor`) Actor

Get the transcript of any YouTube video or Short as clean text, timestamped text, segments and SRT. Bulk URLs, any language, auto-translate. Pay only for transcripts you get; failed videos are free.

- **URL**: https://apify.com/gouda_studios/youtube-transcript-extractor.md
- **Developed by:** [Gouda Studios](https://apify.com/gouda_studios) (community)
- **Categories:** Videos, AI, Social media
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 transcript extracteds

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

## YouTube Transcript Extractor: Get Captions, Subtitles and SRT from Any Video

This **YouTube transcript extractor** turns YouTube links into clean transcripts. Paste video URLs, Shorts or IDs and get **one row per video** with the full transcript as plain text, timestamped text, timed segments and optional SRT subtitles, plus the video title and channel.

**You pay only for transcripts you get.** Videos with captions turned off, private or deleted videos and other failures are still returned with the reason, but they are free.

### Why use this YouTube transcript scraper?

- **$4 per 1,000 transcripts.** Cheaper than most transcript scrapers on the Store, with no monthly rental.
- **Bulk input.** Watch URLs, `youtu.be` links, Shorts, live and embed URLs, or bare 11-character IDs. Duplicates are removed.
- **Any language, plus translation.** Pick languages in priority order, prefer human-made captions over auto-generated ones, or auto-translate into another language with YouTube's own translation when the video offers it.
- **Ready for AI.** The `text` field is one clean string you can drop straight into ChatGPT, Claude, a RAG pipeline, a summarizer or a vector database.
- **Subtitles too.** Turn on SRT output to get a subtitle file for each video.
- **No login, no API key, no cookies, no proxy setup.** A residential proxy is built in and included in the price, so YouTube's "Sign in to confirm you're not a bot" blocks are handled for you.

### What data do you get?

| Field | Example |
| --- | --- |
| `videoId` | `dQw4w9WgXcQ` |
| `title`, `channel`, `channelUrl` | video title and channel |
| `status` | `ok` or `error` |
| `languageCode`, `language` | `en`, `English` |
| `isGenerated` | `true` for auto-generated captions |
| `text` | the full transcript as one string |
| `timestampedText` | `[0:18] We're no strangers to love` |
| `segments` | `{start, duration, text}` for every caption line |
| `srt` | SRT subtitle file (optional) |
| `wordCount`, `durationSeconds` | size of the transcript |
| `availableLanguages` | every caption track on the video |
| `error` | why a video failed (free) |

### How to get a YouTube transcript

1. Paste one or more YouTube links into **YouTube video URLs or IDs**.
2. Optional: set **Preferred languages** (default `en`), **Translate to**, or turn on **Include SRT subtitles**.
3. Click **Start**. Download transcripts as JSON, CSV, Excel or HTML, or pull them with the API.

### Use cases

- **Summarize YouTube videos with AI.** Feed transcripts to an LLM for summaries, notes, show notes or blog posts.
- **Repurpose content.** Turn videos and Shorts into articles, newsletters, tweets and LinkedIn posts.
- **Research and monitoring.** Search what creators, competitors or experts said across many videos.
- **Subtitles and accessibility.** Export SRT captions for editing or re-uploading.
- **Datasets.** Build training or evaluation sets from spoken content.

### Use it from code or an AI agent

Call it from the Apify API, the Python or JavaScript client, Make, Zapier, n8n, or as an MCP tool for Claude, Cursor and other AI agents.

```json
{ "videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/9bZkp7q19f0"], "languages": ["en"], "includeSrt": true }
```

### Pricing

Pay per event: **$0.004 per transcript extracted** plus a tiny start fee per run. Failed videos cost nothing.

### FAQ

**Does it work for Shorts and live streams?** Yes, if the video has captions. Paste the Shorts or live URL as is.

**What if a video has no captions?** You get a row with `status: error` and the reason, and you are not charged. This tool reads YouTube's caption tracks; it does not run speech-to-text on audio.

**Can I get transcripts in another language?** Yes. Add language codes to **Preferred languages**, or set **Translate to** to auto-translate.

**Do I need a YouTube API key?** No.

**Is it legal to scrape YouTube transcripts?** This tool reads publicly available captions. Use the data in line with YouTube's terms and applicable copyright law, especially when republishing.

**Do I need a proxy?** No. Residential proxies are built in and included in the price. You can still supply your own under **Proxy**.

# Actor input Schema

## `videos` (type: `array`):

Watch URLs, youtu.be links, Shorts, live or embed URLs, or bare 11-character video IDs.

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

Language codes in priority order, e.g. en, es, de. If none match, the first available transcript is returned.

## `translateTo` (type: `string`):

Language code to auto-translate the transcript into using YouTube's translation, e.g. en.

## `preferManual` (type: `boolean`):

Use manually created captions over auto-generated ones when both exist.

## `includeSegments` (type: `boolean`):

Add an array of segments with start time and duration.

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

Add an SRT subtitle file as a string.

## `maxVideos` (type: `integer`):

Stop after this many videos.

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

Optional. Leave off to use our built-in residential proxy, included in the price. Set your own only if you want to.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "languages": [
    "en"
  ],
  "preferManual": true,
  "includeSegments": true,
  "includeSrt": false,
  "maxVideos": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "videos": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

```

## MCP server setup

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

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/tduQuVrY7qOWkeSNF/builds/Mm0p9IHzySBlI1gk8/openapi.json
