# YouTube Transcript Scraper (`ultimate/youtube-transcript-scraper`) Actor

Retrieve complete transcripts for any YouTube video in seconds. Provide video or channel URLs, set your data limits, and choose your preferred format: timeline-based (segmented) or continuous text. Each result delivers the full transcript for a selected video.

- **URL**: https://apify.com/ultimate/youtube-transcript-scraper.md
- **Developed by:** [Ultimate Insight](https://apify.com/ultimate) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 59 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.60 / 1,000 video results

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** Retrieve complete transcripts for any YouTube video in seconds. Simply provide your desired video or channel URLs, set data limits and choose your preferred format: timeline-based (segmented) or continuous text. Each result delivers the full transcript for a selected video.
<br><br>

### 🔑 Key Features

- Target individual videos or bulk content from your designated channels
- Get the entire transcript (caption set) for your selected videos
- Choose your preferred transcript language and output format
- Fine-grained billing means you pay only for the data elements that you actually need
- Super-simple setup gives you maximum results for minimum effort
  <br><br>

### 💡 What Can You Do with YouTube Transcripts?

YouTube transcripts are a goldmine of searchable, structured text. This scraper helps you turn spoken content into actionable data. Here are three practical ways to put it to work:

#### Content Research and Topic Discovery

You are a content strategist, researcher, or creator exploring new opportunities.

Scrape transcripts from videos in your niche to identify trending topics, recurring keywords, and emerging themes. Feed this text into an AI tool to generate topic clusters, content briefs, or keyword maps for your next video, article, or campaign.

#### Summarization and Knowledge Extraction

You are an educator, journalist, or analyst who needs to distill insights from long-form videos.

Use this scraper to collect transcripts from interviews, talks, or podcasts, then feed them into summarization or Q\&A models. Quickly extract the main ideas, arguments, or quotes without watching hours of footage.

#### SEO and Accessibility Enhancement

You are a marketer, SEO specialist, or site owner optimizing your content for discoverability.

Scrape your own video transcripts to generate searchable blog posts, metadata, or captions. This improves SEO performance, accessibility compliance, and audience reach - all from content you’ve already created.
<br><br>

### 🚀 How to Scrape YouTube Transcripts

*YouTube Transcript Scraper* is designed for simplicity and ease of use. To get started, you just need to configure a few basic settings in the Apify Console.

#### Step 1: Enter Target URLs

Start by providing a list of URLs that define the content you want to scrape.

![Screenshot: setting target page URLs](https://i.imgur.com/1RNIPHV.png)

For beginners, we recommend focusing on individual video URLs, although you can also target YouTube channels to scrape comments in bulk (see table below).

A single scraping run may mix multiple video and channel URLs.

##### Supported URL Examples

| URL Type | Example | How it Works |
| -------- | ------- | ------------ |
| **Video page URL** | `https://www.youtube.com/watch?v=VIDEO_ID` | Scrapes transcripts from one specific video. Each URL produces a separate scraping result. |
| **Channel home page URL** | `https://www.youtube.com/@CHANNEL_HANDLE`<br>`https://www.youtube.com/channel/CHANNEL_ID` | Scrapes transcripts from multiple videos on a channel. The number of videos is controlled by the `maxChannelVideos` setting. |

#### Step 2: Set a Video Crawl Limit

This step is not necessary if you are only directly targeting YouTube video URLs.

For channel URLs, configure how many videos the scraper should target. For example, setting a limit of `5` will scrape comments from the 5 most recent videos.

![Screenshot: a crawl limit](https://i.imgur.com/RBWXbJ1.png)

Video limits are **required when targeting channel URLs**. Leaving the value at zero means no videos will be scraped.

#### Step 3: Configure Transcript Preferences

Having specified which YouTube content you're targeting, and how many videos to scrape, you can optionally customize the transcript output.

![Screenshot: setting transcript options](https://i.imgur.com/LU4OfcL.png)

- `transcriptFormat` – The format in which the video transcript will be saved. The default `timeline` format splits the transcript into multiple segments each with timstamp data. The `continuous` format discards timestamp data and formats the transcript as a contiguous block of text.
- `transcriptLanguage` – The desired transcript language. Note that the transcripts for most videos are typically only available in limited range of languages and that some videos have no transcripts. If the specified language is not available, no transcript will be scraped, even if other languages are available.

#### Step 4: Launch the Scraper

Once your URLs and limits are set, simply launch the run using Apify’s standard interface. The scraper will crawl the designated videos, retrieving their transcripts and formatting them according to your settings, then deliver your scraping results via the Apify Console.
<br><br>

### 💰 Understanding Running Costs

*YouTube Transcript Scraper* uses Apify’s **Pay per Event (PPE)** pricing model. This means you are billed for each individual piece of data that the scraper processes, such as each video or transcript that is saved. Instead of paying a flat fee, your costs scale with the amount of data you scrape. You never incur any Apify platform operating costs.

#### How Costs Work

Each scraping run generates a number of micro-charges based on the operations it performs and the data collected.

All billing calculations are handled automatically by the scraper and charged to your account by Apify; you do not need to calculate anything manually.

The main cost drivers for this scraper are the number of targeted videos.

The complete pricing table for this scraper can be found on the Apify [pricing](https://apify.com/ultimate/youtube-transcript-scraper/pricing) tab.

Note that we also participate in Apify's tiered pricing scheme, which means that you'll benefit from progressive discounts if you are on a higher-tier Apify plan.

#### Worked Example

Suppose you configure a run as follows:

- 10 videos from a channel

The scraper would execute the run, subject to the following **maximum** charges:

1. **Video**: 10 videos
2. **Video Transcript**: 10 transcripts

Your run cost would then be calculated based on the per-item PPE rates for video results and transcripts.

You are only charged for the **actual data results delivered**, so videos without transcripts would be charged less than the theoretical maximum.
<br><br>

### 🧪 Sample Output Data

A successful scraper run yields one or more JSON output files, each containing the transcript for a scraped video.

Each output file contains a single root-level JSON object, representing the video, with a nested object or array that contains the transcript in one of its available languages.

The sample below reflects the transcript output in 'timeline' format, but this may optionally be configured as a continuous stream of text.

```json
{
	"id": "99bgTARgKD8",
	"url": "https://www.youtube.com/watch?v=99bgTARgKD8",
	"publishDate": "2025-07-27T19:53:39.000Z",
	"title": "England vs. Spain UEFA Women's Euro 2025 Highlights | FOX Soccer",
	"transcript": [
        {
            "start": 1520,
            "end": 5040,
            "texts": [
                "25 days and 30 action-packed matches"
            ]
        },
        {
            "start": 5040,
            "end": 8400,
            "texts": [
                "after Euro 2025 kicked off and we are"
            ]
        },
        {
            "start": 8400,
            "end": 11440,
            "texts": [
                "down to the final two in Basel. And the"
            ]
        },

        ... trimmed for brevity ... 

        {
            "start": 557200,
            "end": 560200,
            "texts": [
                "Yeah."
            ]
        },
        {
            "start": 568720,
            "end": 571720,
            "texts": [
                "Heat."
            ]
        },
        {
            "start": 574310,
            "end": 583620,
            "texts": [
                "[Applause]"
            ]
        }
    ]
}  
```

<br><br>

### 🆘 Support & Feedback

We want you to enjoy the best possible experience while using *YouTube Transcript Scraper*, so we're laser focused on providing the support you need, when you need it.

If you run into an obstacle, while configuring or using the scraper, please [raise an issue](https://apify.com/ultimate/youtube-transcript-scraper/issues), and we'll give it our rapid attention. We treat bugs and breakages as an absolute priority, but we're also keen to help out with advice and guidance that will make your scraping task easier and more effective.

If you have any feedback that would help us to improve the product, we'd also love to hear from you.

And, if you find the *YouTube Transcript Scraper* useful, we'd really appreciate it if you would leave us a quick rating/review (accessible via the **Reviews** tab in Apify Console). It really helps us to boost our Store visibility and keeps us motivated to continue working on new features. Thank you.
<br><br>

### 7️⃣ Meet the Magnificent Seven

Whatever your YouTube scraping needs, we’ve got you covered. Our expanding range includes both quick-start, task-specific scrapers and our all-encompassing *YouTube Ultimate Scraper*, which provides maximum flexibility for advanced users and complex use cases. We also have 3 exciting new additions coming soon.

<table>
<tr><td><img src="https://i.imgur.com/UrYixcn.png" width="250"></td><td><strong><a href="https://apify.com/ultimate/youtube-video-scraper">YouTube Video Scraper</a></strong><br><br>The fast and easy way to capture detailed metadata for YouTube videos and channels. Simply provide one or more video or channel URLs and set your data limits. Each result includes the video’s detailed metadata and, optionally, that of its associated channel.<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/ETP9dvS.png" width="250"></td><td><strong><a href="https://apify.com/ultimate/youtube-comments-scraper">YouTube Comments Scraper</a></strong><br><br>Quickly extract the full conversation around any YouTube video. Enter video or channel URLs and define the amount of data you need. Each result contains viewer comments (and their replies, if required), helping you analyze audience engagement and sentiment for your own channels or those of your competitors.<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/5y18kDn.png" width="250"></td><td><strong><a href="https://apify.com/ultimate/youtube-transcript-scraper">YouTube Transcript Scraper</a></strong><br><br>Retrieve complete transcripts for any YouTube video in seconds. Provide video or channel URLs, set your data limits, and choose your preferred format: timeline-based (segmented) or continuous text. Each result delivers the full transcript for a selected video.<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/wr42jBh.png" width="250"></td><td><strong><a href="https://apify.com/ultimate/youtube-scraper">YouTube Ultimate Scraper</a></strong><br><br>The flagship of our YouTube scraping suite, <em>YouTube Ultimate Scraper</em> combines the functionality of all or our individual scrapers and more. It's ideal for users who need multiple data types (e.g., comments, transcripts, and metadata) in a single dataset, or greater control over targeting, filtering, and formatting. Our free onboarding service helps you to get started, even if your scraping needs are complex.<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/zewJ2KF.png" width="250"></td><td><strong>YouTube Channel Insights</strong> (coming soon)<br><br>Gain a deep understanding of any YouTube channel’s commercial goals and strategies. This tool aggregates and analyzes channel metadata and external references to uncover insights such as linked social media profiles, owned domains, monetization models, content strategy, and key performance metrics (videos, views, subscribers, publishing tactics, engagement, and growth).<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/QIDALKK.png" width="250"></td><td><strong>YouTube Channel Finder</strong> (coming soon)<br><br>Discover YouTube channels that match your specific criteria. This tool locates channels by keywords or hashtags, then filters them using advanced inference techniques (powered by <em>YouTube Channel Insights</em>), helping you find creators, brands, or niches aligned with your interests or campaigns.<br><br></td></tr>
<tr><td><img src="https://i.imgur.com/HlMyUKi.png" width="250"></td><td><strong>YouTube Monitor</strong> (coming soon)<br><br>A scheduled, stateful monitoring tool that tracks specified YouTube metrics over time, generates trend-based insights and reports, and raises alerts when user-defined thresholds or anomalies are detected — ideal for proactive channel health and competitor tracking.<br><br></td></tr>
</table>

All of our YouTube tools use Apify’s innovative Pay per Event (PPE) pricing model, so you only pay for the data you choose to collect. When multiple scrapers offer overlapping features, pricing remains consistent across tools, ensuring you always get the best value. Users on premium Apify plans also benefit from progressive discounts through Apify’s tiered pricing scheme.

# Changelog

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

# Actor input Schema

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

The URLs of the YouTube video pages that you want to scrape transcripts for or other YouTube pages that you want to crawl to discover videos.

## `maxChannelVideos` (type: `integer`):

The maximum number of videos to be retrieved while crawling each target channel. Each video will be subsequently scraped to retrieve its transcript.

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

The format in which the video transcript will be saved. The default timeline format splits the transcript into multiple segments each with timstamp data. The continuous format discards timestamp data and formats the transcript as a contiguous block of text.

## `transcriptLanguage` (type: `string`):

The desired transcript language. Note that the transcripts for most videos are typically only available in limited range of languages and that some videos have no transcripts. If the specified language is not available, no transcript will be scraped, even if other languages are available.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/@Apify"
  ],
  "maxChannelVideos": 5,
  "transcriptFormat": "timeline",
  "transcriptLanguage": "en"
}
```

# 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/@Apify"
    ],
    "maxChannelVideos": 5,
    "transcriptFormat": "timeline",
    "transcriptLanguage": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimate/youtube-transcript-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 = {
    "urls": ["https://www.youtube.com/@Apify"],
    "maxChannelVideos": 5,
    "transcriptFormat": "timeline",
    "transcriptLanguage": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("ultimate/youtube-transcript-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 '{
  "urls": [
    "https://www.youtube.com/@Apify"
  ],
  "maxChannelVideos": 5,
  "transcriptFormat": "timeline",
  "transcriptLanguage": "en"
}' |
apify call ultimate/youtube-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimate/youtube-transcript-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/PIMbEbiLvCNQfSTiB/builds/eHV3t7Q2R7Eftn85J/openapi.json
