# YouTube Transcript Scraper: Channels, Playlists & SRT (`luzivanlt/youtube-transcripts-scraper`) Actor

YouTube transcripts with timestamps from videos, whole channels or playlists, in the languages you pick. $1 per 1,000 transcripts. SRT and VTT files, word times, every caption language listed.

- **URL**: https://apify.com/luzivanlt/youtube-transcripts-scraper.md
- **Developed by:** [Luzi](https://apify.com/luzivanlt) (community)
- **Categories:** Videos, AI, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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 Transcript Scraper: Channels, Playlists & SRT

Get the transcripts of YouTube videos, from video links or straight from a
channel's newest uploads or a playlist, with every line timed. Pick the
caption languages you want in order, or take the language spoken in the
video. Each row also lists every caption language the video has and carries
its title, channel, views, duration, tags and description. SRT and WebVTT
subtitle text and word-level times come at no extra charge. No YouTube
account, login or cookies needed.

Tested daily. Latest checks: 2 of 2 transcripts in 10 seconds; 94 transcripts
from two whole channels' newest 40 uploads, a playlist and two videos, with
SRT and VTT, in about 6 minutes.

### What does this Actor do?

You give it YouTube video links (or video ids), channel links or playlist
links. For each video it finds the captions, picks the language and kind you
asked for, and saves one row per video with the transcript.

Each row comes with:

- the transcript as plain text, and as timed lines (start, duration, text)
- the caption language used, whether it is auto-generated, and whether it is
  one of the languages you asked for
- every caption language the video has, and the languages YouTube can
  translate them to
- optional SRT and WebVTT subtitle text, and optional word-level times
- the video's title, description, tags, duration, views, thumbnail, channel
  name and id, and whether it is a live stream
- the links on the video's end screen

### Why use it?

- **Whole channels and playlists.** Give a channel and get its newest uploads'
  transcripts, or give a playlist and get its videos' transcripts, without
  collecting video links first.
- **Your languages, in your order.** List the languages you want; the first
  one a video has is used, and the row says which one you got.
- **Written or auto-generated, your choice.** Take captions written by people
  first, or only one kind.
- **Subtitle files ready to save.** SRT and WebVTT text on every row when you
  ask for it, at no extra charge.
- **Only transcripts are charged.** A video without captions is skipped and
  costs nothing.

### How to use it

1. Paste one or more video, channel or playlist links into **Video, channel
   or playlist links**.
2. Optionally, list the **Languages** you want, choose the **Caption type**,
   ask for **Subtitle files** or **Word timestamps**, and set **Max videos
   per channel or playlist**.
3. Click **Start**. When the run ends, open the **Output** tab to view the
   transcripts or download them.

Run it with no input to see a sample: the transcripts of two videos, charged
as usual.

#### Links that work

- **Videos:** a link as in your browser's address bar
  (`https://www.youtube.com/watch?v=dQw4w9WgXcQ`), a `youtu.be/…` share link,
  a Shorts, live or embed link, or the 11-character video id on its own.
- **Channels:** `https://www.youtube.com/@handle` (any of its tabs),
  `/channel/UC…`, `/c/…` or `/user/…`, or a bare `@handle` or `UC…` id. A
  channel gives its newest uploads first.
- **Playlists:** `https://www.youtube.com/playlist?list=PL…`, or the
  playlist id on its own. A playlist gives its videos in its own order.

Search pages and mixes are not supported.

### Use it with YouTube Scraper's results

Already have video links in a [YouTube Scraper](https://apify.com/streamers/youtube-scraper) run? Skip the copying:

1. Run the YouTube Scraper, then open its run and copy the **dataset id** from the
   Storage tab (or paste the dataset's link).
2. Paste it into **Dataset id from a scraper run** (`datasetId`) here. Or schedule
   this Actor after the other one and pass the id each time. If your account
   cannot read that dataset, paste its rows into **Rows from a scraper run**
   (`datasetRows`) instead.
3. Click **Start**. The Actor reads each row's `url` as a link, adds it to the
   links and reads its transcript. Our YouTube Search and YouTube Channel Videos
   Actors write the same `url` field, so their datasets work too.

Rows with no usable video link, such as channel or playlist rows, are skipped.
The status line says how many rows were read and how many were skipped. A link
in both the links and the dataset is read once. If the links still hold the
form's example links when you give a dataset, they are left out, and the status
says so. At most 10,000 rows are read from one dataset. Transcripts are priced
as usual, whichever way the links reached us.

### Input

| Field                                                          | What it does                                                     | Default |
| -------------------------------------------------------------- | ---------------------------------------------------------------- | ------- |
| **Video, channel or playlist links** (`startUrls`)             | What to read. Required unless you give a dataset.                | —       |
| **Languages** (`languages`)                                    | Caption languages in order of preference, such as `["es", "en"]` | spoken  |
| **Caption type** (`captionType`)                               | `any` (written by people first), `manual` or `auto`              | `any`   |
| **Subtitle files** (`subtitleFormats`)                         | Also return `srt` and/or `vtt` text                              | none    |
| **Word timestamps** (`wordTimestamps`)                         | Also list each word's start time, where YouTube times words      | `false` |
| **Max videos per channel or playlist** (`maxVideosPerChannel`) | How many videos to read from each channel or playlist            | `10`    |

Example input:

```json
{
  "startUrls": [
    { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
    { "url": "https://www.youtube.com/@3blue1brown" }
  ],
  "languages": ["en"],
  "captionType": "any",
  "subtitleFormats": ["srt"],
  "maxVideosPerChannel": 20
}
```

### Output

One row per video. An example, with made-up values and shortened lists:

```json
{
  "video_id": "dQw4w9WgXcQ",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "title": "A video title",
  "channel_name": "A Channel",
  "channel_id": "UC1111111111111111111111",
  "channel_url": "https://www.youtube.com/channel/UC1111111111111111111111",
  "description": "The video's description…",
  "keywords": ["tag one", "tag two"],
  "duration_seconds": 213,
  "view_count": 1234567,
  "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
  "is_live_content": false,
  "is_private": false,
  "is_crawlable": true,
  "allow_ratings": true,
  "is_tv_film": false,
  "playable_in_embed": true,
  "aspect_ratio": 1.7777778,
  "available_qualities": ["1080p", "720p", "480p"],
  "end_screen_items": [
    {
      "type": "video",
      "title": "Another video",
      "metadata": "1M views",
      "video_id": "aaaaaaaaaa1",
      "playlist_id": null,
      "channel_id": null,
      "url": "https://www.youtube.com/watch?v=aaaaaaaaaa1",
      "start_ms": 190000,
      "end_ms": 210000
    }
  ],
  "spoken_language": "en",
  "caption_tracks": [
    {
      "language_code": "en",
      "language_name": "English",
      "is_auto_generated": false,
      "is_translatable": true
    },
    {
      "language_code": "en",
      "language_name": "English (auto-generated)",
      "is_auto_generated": true,
      "is_translatable": true
    }
  ],
  "translation_languages": ["af", "ar", "de", "es", "fr"],
  "language": "en",
  "language_name": "English",
  "is_auto_generated": false,
  "requested_languages": ["en"],
  "language_found": true,
  "transcript": "Hello and welcome to the video …",
  "word_count": 1520,
  "line_count": 212,
  "lines": [
    { "start": 1.2, "duration": 2.5, "text": "Hello and welcome" },
    { "start": 3.7, "duration": 3.1, "text": "to the video", "speaker_change": true }
  ],
  "srt": "1\n00:00:01,200 --> 00:00:03,700\nHello and welcome\n…",
  "vtt": null,
  "source_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
```

| Field                   | What it holds                                                                                   |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| `video_id`              | The video's id                                                                                  |
| `url`                   | A link to the video                                                                             |
| `title`                 | The video's title                                                                               |
| `channel_name`          | The channel's name                                                                              |
| `channel_id`            | The channel's id                                                                                |
| `channel_url`           | A link to the channel                                                                           |
| `description`           | The video's description                                                                         |
| `keywords`              | The video's tags                                                                                |
| `duration_seconds`      | The video's length in seconds                                                                   |
| `view_count`            | The video's views                                                                               |
| `thumbnail_url`         | The largest thumbnail                                                                           |
| `is_live_content`       | Whether the video is or was a live stream                                                       |
| `is_private`            | Whether the video is private                                                                    |
| `is_crawlable`          | Whether YouTube lets search engines list the video                                              |
| `allow_ratings`         | Whether likes are turned on                                                                     |
| `is_tv_film`            | Whether YouTube marks the video as a TV show or film                                            |
| `playable_in_embed`     | Whether the video can be embedded on other sites                                                |
| `aspect_ratio`          | The video's width divided by its height                                                         |
| `available_qualities`   | The qualities it plays in, best first                                                           |
| `end_screen_items`      | The videos, playlists, channels and links on its end screen, with when they show                |
| `spoken_language`       | The language spoken in the video: its auto-generated captions' language, else its default track |
| `caption_tracks`        | Every caption language the video has: code, name, auto-generated or not, translatable or not    |
| `translation_languages` | The languages YouTube offers to translate the captions to                                       |
| `language`              | The language code of the transcript in this row                                                 |
| `language_name`         | Its name, as YouTube shows it                                                                   |
| `is_auto_generated`     | Whether the transcript is YouTube's auto-generated captions                                     |
| `requested_languages`   | The languages you asked for                                                                     |
| `language_found`        | Whether the transcript is in one of them (empty when you asked for none)                        |
| `transcript`            | The whole transcript as plain text                                                              |
| `word_count`            | Words in the transcript, counted by spaces (not for Chinese or Japanese)                        |
| `line_count`            | Timed lines in the transcript                                                                   |
| `lines`                 | Timed lines: `start` and `duration` in seconds, `text`; `words` with their start times if asked |
| `srt`                   | The transcript as SRT subtitle text, if asked for                                               |
| `vtt`                   | The transcript as WebVTT subtitle text, if asked for                                            |
| `source_url`            | The link you gave: the video, or the channel or playlist it came from                           |

Not included: translated transcripts (only the caption languages the video
itself has), the video's upload date and likes, and its comments.

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

- **$1 per 1,000 transcripts** ($0.001 a transcript). Each video is charged once per run.
- No start fee, and nothing per channel or playlist. Subtitle files and word times cost nothing extra.

So the transcripts of 500 videos cost $0.50. A video without captions is
skipped and not charged. If you set a maximum cost for a run, the Actor stops
when it reaches it and keeps every transcript saved so far.

### How long does a run take?

Expect about 15 transcripts a minute. In testing, 94 transcripts from two
channels, a playlist and two videos took about 6 minutes, and two videos took
about 10 seconds.

### Good to know

- **Some videos have no captions.** A video with none, or none of the kind you
  asked for, is skipped and not charged. From a video link, the run's status
  names it; from a channel or playlist, it is simply left out, so you may get
  fewer transcripts than **Max videos per channel or playlist**.
- **A language the video lacks falls back.** When a video has none of your
  languages, you get its spoken language's transcript, and `language_found`
  says `false`.
- **Private, removed and age-restricted videos cannot be read.** They are not
  charged, and the other videos carry on.
- **Check your links first.** A link that is not a YouTube video, channel or
  playlist link stops the run before anything is read, and the message names
  it.
- **One video that cannot be read does not stop the run.** The run fails only
  when no link could be read.

### More Actors from us

- [YouTube Channel Scraper: Every Video & Short](https://apify.com/luzivanlt/youtube-channel-videos-scraper): Every upload of a YouTube channel, newest first: videos, Shorts and live streams in one list.
- [YouTube Comments Scraper: With Replies](https://apify.com/luzivanlt/youtube-comments-scraper): YouTube video comments with their replies, threaded, plus the video's title, views and likes.
- [YouTube Search Scraper: Videos, Shorts & Channels](https://apify.com/luzivanlt/youtube-search-scraper): YouTube search results in YouTube's own order: videos, Shorts, channels, playlists, movies.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
- [Bilibili Video Scraper: Search & Channel Videos](https://apify.com/luzivanlt/bilibili-videos-scraper): Bilibili videos from searches or whole channels, each with its full detail page's data.
- [Career Site Jobs Scraper: Workday, Greenhouse, Lever](https://apify.com/luzivanlt/career-site-jobs-scraper): Every job on Greenhouse, Lever, Ashby, SmartRecruiters and Workday boards, checked against each board's count.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~youtube-transcripts-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    },
    {
      "url": "https://www.youtube.com/watch?v=aircAruvnKk"
    }
  ],
  "captionType": "any",
  "subtitleFormats": [],
  "wordTimestamps": false,
  "maxVideosPerChannel": 10
}
```

Its inputs, in the order of the input form:

| Input                                                      | What it takes                                                                                                                                                                                                                 | Default |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `startUrls` (Video, channel or playlist links)             | YouTube videos (watch, youtu.be, Shorts, live and embed links, or 11-character video ids), channels (@handle, /channel/UC…, /c/ and /user/ links, or a bare @handle or UC… id) and playlists (a playlist link or its PL… id). | —       |
| `datasetId` (Dataset id from a scraper run)                | The id of a run's dataset from YouTube Scraper (streamers/youtube-scraper), so you do not copy video links by hand.                                                                                                           | —       |
| `datasetRows` (Rows from a scraper run)                    | Rows pasted from YouTube Scraper (streamers/youtube-scraper) results, as a JSON list, when its dataset id is not readable by your account.                                                                                    | —       |
| `languages` (Languages)                                    | Caption languages you want, in order of preference, as codes such as en, es or pt-BR (up to 20).                                                                                                                              | —       |
| `captionType` (Caption type)                               | Which captions to use: any (captions written by people first, else auto-generated), manual (only captions written by people) or auto (only auto-generated).                                                                   | `"any"` |
| `subtitleFormats` (Subtitle files)                         | Also return the transcript as subtitle file text, ready to save as a .srt or .vtt file, in the srt and vtt fields.                                                                                                            | `[]`    |
| `wordTimestamps` (Word timestamps)                         | Also list each word with its start time inside each timed line, where YouTube times words (auto-generated captions).                                                                                                          | `false` |
| `maxVideosPerChannel` (Max videos per channel or playlist) | For each channel or playlist link, read this many of its videos: a channel's newest uploads first, a playlist in its own order.                                                                                               | `10`    |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/youtube-transcripts-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/youtube-transcripts-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per transcript delivered; the sample input above costs at most $0.02.

### FAQ

**Do I need a YouTube account or cookies?**
No. The Actor reads the captions anyone can turn on under the video.

**Can I get transcripts in a language the video has no captions for?**
Not yet: the Actor returns the caption languages the video itself has, and
lists them in `caption_tracks`.

**Can I run it from my own code, on a schedule, or with other apps?**
Yes. Like any Apify Actor, you can start it through the Apify API, run it on a
schedule, and connect it to other apps with Apify's integrations and webhooks.

### Is it legal to scrape YouTube?

This Actor reads only captions and video details that anyone can see without
logging in. Transcripts can contain what people say, and channel names can
name a person. Only collect personal data when you have a legitimate reason
to, and check YouTube's terms and the laws that apply to you. If you are
unsure, ask a lawyer.

### Support

Found a problem or missing a feature? Open an issue on the **Issues** tab and
include the run's link.

***

This Actor is not affiliated with, endorsed by or sponsored by YouTube or
Google.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/youtube-transcripts-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

YouTube videos (watch, youtu.be, Shorts, live and embed links, or 11-character video ids), channels (@handle, /channel/UC…, /c/ and /user/ links, or a bare @handle or UC… id) and playlists (a playlist link or its PL… id). A channel gives its newest uploads, a playlist its videos in order, up to Max videos per channel or playlist. Required unless you give a dataset id or rows below. Example: https://www.youtube.com/watch?v=dQw4w9WgXcQ

## `datasetId` (type: `string`):

The id of a run's dataset from YouTube Scraper (streamers/youtube-scraper), so you do not copy video links by hand. Every row's url is read as a video link (videoUrl and video_url too); rows without one are skipped and counted in the status. Reads up to 10,000 rows. Our YouTube Search and YouTube Channel Videos Actors also work. Example: your scraper run's dataset id, e.g. from its Storage tab (a username~name or a dataset link works too).

## `datasetRows` (type: `array`):

Rows pasted from YouTube Scraper (streamers/youtube-scraper) results, as a JSON list, when its dataset id is not readable by your account. Each row's url is read as a video link (videoUrl and video_url too); rows without one are skipped. Reads up to 10,000 rows. Example: \[{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}]

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

Caption languages you want, in order of preference, as codes such as en, es or pt-BR (up to 20). The first one a video has is used, matched exactly first and then by its base language (es also takes es-419). Leave empty for the language spoken in the video. A video with none of them falls back to its spoken language, and its row says so in language_found. Example: \["es", "en"]

## `captionType` (type: `string`):

Which captions to use: any (captions written by people first, else auto-generated), manual (only captions written by people) or auto (only auto-generated). A video without the kind asked for is skipped and not charged. Default any. Example: "manual" for subtitles uploaded by the channel only.

## `subtitleFormats` (type: `array`):

Also return the transcript as subtitle file text, ready to save as a .srt or .vtt file, in the srt and vtt fields. No extra charge. Leave empty for the timed lines and plain text only. Example: \["srt"] to get an SRT file's text on every row.

## `wordTimestamps` (type: `boolean`):

Also list each word with its start time inside each timed line, where YouTube times words (auto-generated captions). No extra charge, but rows get larger. Off by default. Captions written by people have one time per line and no word times, so their lines carry no word list.

## `maxVideosPerChannel` (type: `integer`):

For each channel or playlist link, read this many of its videos: a channel's newest uploads first, a playlist in its own order. Default 10, from 1 to 10,000. Videos without captions are skipped and not charged, so you may get fewer transcripts than this. Video links are not affected.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    },
    {
      "url": "https://www.youtube.com/watch?v=aircAruvnKk"
    }
  ],
  "captionType": "any",
  "subtitleFormats": [],
  "wordTimestamps": false,
  "maxVideosPerChannel": 10
}
```

# Actor output Schema

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

One row per video: its transcript, timed lines and details.

## `allFields` (type: `string`):

The same rows with every field.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
        },
        {
            "url": "https://www.youtube.com/watch?v=aircAruvnKk"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/youtube-transcripts-scraper").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 = { "startUrls": [
        { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
        { "url": "https://www.youtube.com/watch?v=aircAruvnKk" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("luzivanlt/youtube-transcripts-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    },
    {
      "url": "https://www.youtube.com/watch?v=aircAruvnKk"
    }
  ]
}' |
apify call luzivanlt/youtube-transcripts-scraper --silent --output-dataset

```

## MCP server setup

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

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/4cGKdoQM1SzB4u2z6/builds/z7HcGqqQE9rrpJPLr/openapi.json
