# YouTube Transcript Scraper & Channel Monitor (`suresignal/youtube-transcript-scraper`) Actor

Get YouTube transcripts with timestamps for videos and channels. Never pay twice for the same video: new-only delivery, change tracking, any language, translation. Clean text for AI/LLM.

- **URL**: https://apify.com/suresignal/youtube-transcript-scraper.md
- **Developed by:** [SureSignal](https://apify.com/suresignal) (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

$8.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.

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 & Channel Monitor: Never Pay Twice

**by SureSignal**

**Get the transcript of any YouTube video, or every new upload from the channels you follow, as clean text with timestamps.** Paste video URLs or channel @handles. SureSignal returns the full transcript, timestamped segments, language and video metadata, ready for ChatGPT, RAG, summaries, SEO content or research.

**Only pay for new data:** each video is delivered and charged once per monitor. Re-runs skip videos you already have, for free. Unavailable videos and videos without captions are free too.

### What can this YouTube transcript extractor do?

- 📝 **Transcript text and timestamped segments** (`start`, `duration`, `text`)
- 📺 **Channel monitoring**: add @handles and schedule daily to get transcripts of new uploads only
- ♻️ **Never pay twice**: already-delivered videos are skipped. *New + changed* mode re-delivers a video only when its captions changed, with a `transcriptChanged` flag
- 🌍 **Any language**: pick preferred languages, prefer human captions over auto-generated, or **translate** with YouTube's own translation
- 🎬 **Metadata**: title, channel, views, duration, publish date, description, tags and available caption languages
- 🤖 **AI-ready**: plain text plus word count, usable from the Apify API, MCP server, n8n, Make and Zapier
- 🛡️ Automatic retries and proxy rotation when YouTube rate-limits, which is the usual "YouTube transcript API IP blocked" problem

### How to download a YouTube transcript (with or without timestamps)

1. Paste one or more **video URLs** (watch, youtu.be, Shorts or live) or **channels**.
2. Choose languages and whether you want timestamps.
3. Run it and export as JSON, CSV or Excel, or send it to Sheets or a webhook. For a free-of-duplicates feed, **schedule** it with the *New videos only* mode.

### Output example

```json
{
  "videoId": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
  "channelName": "Rick Astley",
  "language": "en",
  "isAutoGenerated": false,
  "wordCount": 487,
  "transcriptText": "We're no strangers to love ...",
  "segments": [{ "start": 18.64, "duration": 3.24, "text": "We're no strangers to love" }],
  "isNew": true,
  "transcriptChanged": false
}
```

### How much does it cost?

**$8 per 1,000 transcripts delivered.** Skipped, already-delivered, unavailable and no-caption videos cost $0. `maxTranscripts` caps every run.

### Is there an official YouTube transcript API?

YouTube's official Data API only lets a video's owner download its captions. This Actor reads the publicly displayed captions of public videos, the same text anyone sees when they click *Show transcript*. Use transcripts in line with YouTube's Terms of Service and copyright law (summaries, research, accessibility), and don't republish creators' content wholesale.

### FAQ

**Can I get a transcript if the video has no captions?** Only if YouTube has auto-generated captions. If there are none, you get a free `error` row.

**Can I get transcripts for a whole channel?** Each run checks a channel's latest 15 uploads from its public feed. Schedule it to build the archive going forward. For older videos, paste their URLs.

**Does it work for Shorts and live streams?** Yes, whenever captions exist.

**Python or API?** Call it through the Apify API or client libraries and get JSON back.

More SureSignal tools are on our Apify profile, including the AI Search Visibility Tracker and Company Profile API.

### More from SureSignal

Other SureSignal data feeds that pair well with this one:

- [Recently Funded Startups: SEC Form D Leads](https://apify.com/SureSignal/sec-form-d-funding-leads): find companies that just raised money.
- [Careers Job Feed](https://apify.com/SureSignal/company-careers-job-feed): see who is hiring, and for what.
- [Google Ads Transparency Monitor](https://apify.com/SureSignal/google-ads-transparency-library): track competitors' new Google ads.
- [AI Search Visibility Tracker](https://apify.com/SureSignal/ai-search-visibility-tracker): check if ChatGPT and Perplexity mention your brand.

Need a source or field we don't cover? Open an issue on the **Issues** tab and describe what you need.

# Actor input Schema

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

YouTube video URLs (watch, youtu.be, shorts, live) or 11-char IDs.

## `channels` (type: `array`):

@handle, channel URL or UC... ID. Latest uploads (up to 15) are checked each run.

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

How many recent uploads to check per channel.

## `deliveryMode` (type: `string`):

Already-delivered videos are skipped for free.

## `monitorName` (type: `string`):

Separate 'already delivered' memory per project.

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

Language codes in priority order, e.g. en, es, de.

## `preferManualCaptions` (type: `boolean`):

Use creator-uploaded captions when available.

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

Language code for YouTube's machine translation, e.g. en.

## `includeTimestamps` (type: `boolean`):

Add segments with start/duration seconds.

## `maxTranscripts` (type: `integer`):

Cost cap per run.

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

Residential proxy recommended: YouTube blocks datacenter IPs with a bot check.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "maxVideosPerChannel": 15,
  "deliveryMode": "newOnly",
  "languages": [
    "en"
  ],
  "preferManualCaptions": true,
  "includeTimestamps": true,
  "maxTranscripts": 500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All records from this run.

## `runState` (type: `string`):

Default key-value store for this run.

# 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": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

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

```

## MCP server setup

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