# YouTube Video Summarizer: AI Summary, Chapters, Key Points (`trueline-data/youtube-video-summarizer`) Actor

Turn any YouTube video into an AI summary, key points, timestamped chapters, verified quotes and topics, in any language. Ask your own question about each video. Pay only for videos summarized.

- **URL**: https://apify.com/trueline-data/youtube-video-summarizer.md
- **Developed by:** [Trueline Data](https://apify.com/trueline-data) (community)
- **Categories:** Videos, AI, Social media
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 video summaries

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 Video Summarizer: AI Summary, Chapters, Key Points

Turn any YouTube video into a summary you can read in one minute:

- **TL;DR**: the video in one sentence.
- **Summary**: one short paragraph.
- **Key points**: the most useful points, most important first.
- **Chapters with timestamps**: a title and one sentence for each part, and a link that opens the
  video at that moment.
- **Quotes**: short, striking sentences from the video, each with its time and link.
- **Topics**: the keywords and names the video is about.
- **Your own question** (optional): ask the same question about every video, for example
  "Which products are mentioned?". The answer comes from what is said in the video.

### Why this one

- **Checked, not made up.** Chapter times come from the transcript and never point past the end of
  the video. A quote is kept only when its words really are in the transcript, and its time is taken
  from the transcript, not from the AI.
- **Any language.** Summarize a Spanish video in English, or an English video in German. Quotes stay
  in the words the speaker used.
- **Long videos too.** A 3-hour podcast gets chapters spread over the whole 3 hours.
- **One price, all included.** The transcript, the AI and the proxy are in the price. You do not need
  your own OpenAI key.
- **You pay only for summaries.** Videos with no captions, private or removed videos, and failed
  summaries are listed with the reason and are not charged.
- **Pairs with the YouTube Scraper**: list a channel or a search there, then send the links here.

### Input

| Field | What it does |
| --- | --- |
| `videos` | Video URLs or ids. |
| `summaryLanguage` | Language code such as `en` or `es`. Empty = the video's own language. |
| `question` | Optional. The same question for every video. |
| `includeTranscript` | Also return the full transcript. |
| `captionLanguage` | Which caption track to read when a video has several. |

```json
{
  "videos": ["https://www.youtube.com/watch?v=F4LeAVpTdds"],
  "summaryLanguage": "en",
  "question": "Which tools or ingredients do I need?"
}
```

### Output

One row per video.

Real row from a test run on Apify on 17 October 2026 (shortened to 2 chapters and 1 quote):

```json
{
  "videoId": "F4LeAVpTdds",
  "url": "https://www.youtube.com/watch?v=F4LeAVpTdds",
  "title": "EASY FIX! Kitchen Faucet Leaking? How to fix a leaky kitchen faucet in 1 minute",
  "channel": "Lifey Guy",
  "durationSeconds": 324,
  "viewCount": 1296314,
  "status": "ok",
  "transcriptLanguage": "en",
  "isAutoGenerated": true,
  "transcriptWords": 792,
  "truncated": false,
  "tldr": "Fix a leaky kitchen faucet by turning off the water, loosening the handle screw, tightening a nut, or replacing the cartridge.",
  "summary": "This video demonstrates how to fix a leaky kitchen faucet. First, turn off the hot water supply under the sink. Then, loosen the screw on the faucet handle using pliers or a screwdriver and remove the handle. ...",
  "keyPoints": [
    "Turn off the hot water supply under the sink.",
    "Loosen the handle screw with pliers or a screwdriver.",
    "Tighten any loose nuts on the faucet assembly.",
    "If the leak continues, replace the faucet cartridge."
  ],
  "chapters": [
    {
      "start": 0,
      "time": "00:00",
      "title": "Introduction and Importance",
      "summary": "Learn how to easily repair a leaky kitchen faucet to save money and water.",
      "url": "https://www.youtube.com/watch?v=F4LeAVpTdds"
    },
    {
      "start": 43,
      "time": "00:43",
      "title": "Tools and Turning Off Water",
      "summary": "Gather necessary tools and turn off the hot water supply under the sink.",
      "url": "https://www.youtube.com/watch?v=F4LeAVpTdds&t=43s"
    }
  ],
  "quotes": [
    {
      "text": "it is super easy",
      "start": 3,
      "time": "00:03",
      "url": "https://www.youtube.com/watch?v=F4LeAVpTdds&t=3s"
    }
  ],
  "topics": ["kitchen faucet", "leaky faucet", "DIY", "home improvement", "faucet repair"],
  "question": "Which tools or ingredients do I need?",
  "answer": "You need some pliers and a hex wrench or a Phillips screwdriver, depending on the faucet handle."
}
```

In the same run, an 82-minute podcast got 15 chapters and 5 checked quotes, and a Spanish cooking
video was summarized in English with its quotes kept in Spanish. All 3 videos took 13 seconds.

### Pricing

Pay per video summarized. Videos with no captions and errors are free.

### Notes

- The summary is made from the video's captions (written by a person, or YouTube's automatic ones).
  A video with no captions at all cannot be summarized and is not charged.
- Automatic captions can misspell names. Quotes keep the caption's words exactly as they are.
- Transcripts longer than about 6 hours are cut at that point, and the row says `"truncated": true`.

# Actor input Schema

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

Video URLs or ids. Any form works: youtube.com/watch?v=, youtu.be/, /shorts/, /embed/, /live/, or the 11-character id.

## `summaryLanguage` (type: `string`):

Language code such as en, es, de, pt. The summary is written in this language, whatever language the video speaks. Leave empty to use the video's own language.

## `question` (type: `string`):

Ask the same question about every video, for example "Which products are mentioned?" or "What is the price they quote?". The answer comes from the transcript only.

## `includeTranscript` (type: `boolean`):

Also return the full transcript text of each video.

## `captionLanguage` (type: `string`):

Which caption track to read when a video has several, such as en or es. Leave empty for English, else the first available.

## `maxConcurrency` (type: `integer`):

How many videos to summarize in parallel.

## `maxRetries` (type: `integer`):

How many times to retry getting a transcript. Each retry uses a new IP address.

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

YouTube blocks most datacenter IPs. Residential proxies are the reliable choice.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "includeTranscript": false,
  "maxConcurrency": 5,
  "maxRetries": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("trueline-data/youtube-video-summarizer").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"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("trueline-data/youtube-video-summarizer").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"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call trueline-data/youtube-video-summarizer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trueline-data/youtube-video-summarizer"
        }
    }
}
```

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/hvuKAxJkDcBqi2I67/builds/9bj4ZeeKnggMxhoDP/openapi.json
