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

Scrapes YouTube video transcripts by URL or video ID. Returns full transcript text, segmented lines with timestamps, and optional SRT subtitle export. No API key required.

- **URL**: https://apify.com/parseforge/youtube-transcript-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Automation, Developer tools, Social media
- **Stats:** 34 total users, 9 monthly users, 99.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 result items

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### YouTube Transcript Scraper

**Scrape YouTube video transcripts from any URL or video ID, up to a million per run.** Get the full transcript as segmented JSON with timestamps, plus optional SRT subtitle export. No API key, no quotas. Export to CSV, JSON, Excel, or XML.

YouTube's official API needs OAuth, quotas, and only returns captions for your own videos. This reads the public transcript feeds directly from any video URL or ID, filters by language, and returns each transcript in one fixed schema. It works for videos with manually uploaded or auto-generated captions.

| Who uses it | What they scrape YouTube for |
|---|---|
| Content marketers | Repurpose video content into blog posts, social snippets, or SEO articles |
| Market researchers | Analyze what competitors say in their videos without watching them |
| Podcast producers | Turn video interviews into searchable text and show notes |
| Data scientists | Build datasets of spoken content for NLP and sentiment analysis |
| Accessibility teams | Generate accurate captions and transcripts for video libraries |

### What it does

This Actor collects YouTube video transcripts by URL or video ID, and returns each one as a flat row with the full transcript text, segmented lines with timestamps, and optional SRT subtitle export.

- 📄 **Segmented JSON transcript:** every line with its start time, duration, and text, ready for analysis.
- 🎞️ **SRT subtitle export:** optional SRT file per video, billed per video, for direct use in players.
- 🌐 **Language selection:** pick any ISO language code (en, es, fr...) or leave empty for the video's default.
- 🔗 **Flexible input:** feed video URLs, video IDs, or both, and cap the run with maxItems.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with YouTube data

**📝 Repurpose video content.**

A content marketer feeds a list of YouTube video URLs and gets full transcripts to turn into blog posts, newsletters, and social media copy.

**🔍 Competitor research.**

A market researcher scrapes transcripts from competitor videos to identify talking points, product mentions, and messaging without watching hours of footage.

**🎙️ Podcast transcription.**

A podcast producer extracts transcripts from video interviews to create searchable show notes and improve SEO.

**📊 NLP dataset building.**

A data scientist collects thousands of transcripts by video ID to train sentiment analysis or topic modeling models.

**♿ Accessibility compliance.**

An accessibility team scrapes transcripts and SRT files to add captions to an existing video library.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API key or quotas** | Reads public transcript feeds directly, no OAuth or daily limits. |
| **Full transcript text** | Returns the complete transcript as one string plus segmented lines with timestamps. |
| **SRT subtitle export** | Optional SRT file per video for use in video players and editors. |
| **Language control** | Request a specific language or get the video's default transcript. |
| **Bulk scraping** | Process up to a million transcripts per run with a simple input list. |

### How it compares

This Actor focuses on transcript extraction with a clean segmented JSON output and optional SRT export, while the competitors below either cover broader YouTube scraping or offer transcript extraction with different feature sets.

| Feature | ParseForge | YouTube Scraper | YouTube Transcript Ninja ⚡️🥷⚡ | Youtube Transcript Scraper |
|---|---|---|---|---|
| Full transcript text | Yes | Not listed | Yes | Yes |
| Segmented JSON with timestamps | Yes | Not listed | Not listed | Not listed |
| SRT subtitle export | Yes | Not listed | Not listed | Not listed |
| Language selection | Yes | Not listed | Not listed | Not listed |
| Bulk input via video IDs | Yes | Not listed | Not listed | Not listed |
| No API key required | Yes | Yes | Not listed | Not listed |

### Configure the run

Drive the Actor from YouTube video URLs and video IDs, alone or together, set a preferred language, and cap the run with maxItems. The includeSrt toggle adds SRT subtitle export per video. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    }
  ],
  "maxItems": 10
}
```

A larger pull:

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    }
  ],
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.015 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.50 |
| 1,000 results | $15.00 |
| 10,000 results | $150.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [YouTube Transcript Scraper](https://apify.com/parseforge/youtube-transcript-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to YouTube through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/youtube-transcript-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that the video URLs or IDs are correct and publicly accessible. Some videos have no captions at all, in which case the Actor returns an empty transcript. Try a different video to confirm.

**Why is the transcript in the wrong language?**

Set the language field to the desired ISO code. If that language is not available, the Actor uses the video's default. You can also leave language empty to always get the default.

**Why is the SRT file missing?**

Make sure includeSrt is set to true. SRT export is billed per video, so if you disabled it to save costs, only the JSON transcript is returned.

**Why did the run stop before processing all my videos?**

Check the maxItems setting. The Actor stops after collecting that many transcripts. Increase maxItems if you need more.

**Why do I get an error for a video that has captions?**

The video may be region-locked or have captions disabled for embedding. Try a different video or check the video's settings on YouTube.

### FAQ

| Question | Answer |
|---|---|
| Does this work for auto-generated captions? | Yes, it retrieves both manually uploaded and auto-generated transcripts when available. If a video has no captions at all, the Actor returns an empty transcript with a status flag. |
| Can I get the transcript in a specific language? | Yes, set the language field to an ISO code like en, es, or fr. If that language is not available, the Actor falls back to the video's default transcript. |
| What is the difference between the JSON transcript and the SRT export? | The JSON transcript is a structured array of segments with start time, duration, and text. The SRT export is a standard subtitle file you can use directly in video players. SRT export is billed per video and can be disabled. |
| How many videos can I scrape in one run? | You can set maxItems up to 1,000,000. The Actor processes URLs and video IDs from your input list until it reaches that limit. |
| Do I need a YouTube API key? | No. The Actor reads public transcript feeds directly, so there are no API keys, OAuth, or daily quotas. |
| Can I input a YouTube channel URL? | No, this Actor accepts individual video URLs or video IDs. To get all videos from a channel, use a YouTube channel scraper first and then feed the video URLs here. |
| What output formats are supported? | The dataset can be exported to CSV, JSON, Excel, or XML from the Apify platform. The SRT file is stored as a separate attachment per video. |
| Does it work with age-restricted or private videos? | It works with any publicly accessible video that has captions. Private or age-restricted videos may not return transcripts. |
| Is the transcript returned as one string or segmented? | Both. The output includes the full transcript text as one string and a segmented array with timestamps for each line. |
| Can I run this on a schedule? | Yes, you can schedule recurring runs in Apify to collect new transcripts automatically. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by YouTube LLC. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

URLs to process

## `videoIds` (type: `array`):

YouTube video IDs

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

ISO language code (en, es, fr...). Leaves empty to get the video's default.

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

How many transcripts to collect per run.

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

Include the transcript as SRT subtitle format (billed per video). Disable to return only the segmented JSON transcript.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    }
  ],
  "maxItems": 10,
  "includeSrt": false
}
```

# Actor output Schema

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

Complete dataset

# 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"
        }
    ],
    "maxItems": 10
};

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

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

```

## MCP server setup

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