# Youtube Insight Extractor (`mrdoe/youtube-insight-extractor`) Actor

Turn a YouTube video transcript into a structured briefing: summary, key takeaways, action items, timestamped quotes and a chapter outline. Full transcript included. No login.

- **URL**: https://apify.com/mrdoe/youtube-insight-extractor.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.20 / 1,000 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?

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

![YouTube Insight Extractor — turn a video transcript into a structured briefing](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/youtube-insight-extractor--website.png)

### What does YouTube Insight Extractor do?

YouTube Insight Extractor reads a YouTube video's transcript and returns a structured briefing for each video: a short summary, key takeaways, action items, notable quotes with timestamps, an ordered chapter breakdown, topic tags, tone, and target audience. It also returns the full transcript, the timestamped transcript segments, and the video's metadata (title, channel, duration, view count, description, keywords, thumbnail). You give it a list of YouTube video URLs or IDs; it gives you one clean row per video that you can read, search, or feed into notes and research tools.

It is built for researchers, content teams, analysts, and anyone who needs the substance of a video without watching all of it.

### Why use YouTube Insight Extractor?

- **Substance, not a raw dump** - you get takeaways and action items, not just an unformatted transcript.
- **Timestamped** - notable quotes and chapters carry offsets so you can jump straight to the moment.
- **Full transcript included** - the complete transcript and per-line segments are in every row for your own processing.
- **Clean, structured output** - one row per video, consistent field names, ready for CSV or API.
- **Any available caption language** - request a language, or fall back to the video's default track.
- **Automatable** - schedule runs over a channel's new uploads or a research list.

### What makes this different

Most transcript tools return the transcript and stop. This Actor adds the briefing layer: it turns the transcript into a summary, a list of concrete takeaways, action items a viewer could act on, verbatim quotes with timestamps, and a chapter outline - while still returning the raw transcript and segments so nothing is lost. The briefing uses a no-cost default model, so the per-result cost stays low.

### How it works

![How YouTube Insight Extractor works: input video URLs, collection engine, structured briefings](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/youtube-insight-extractor--how-it-works.png)

1. **Your input** - a list of YouTube video URLs or IDs and a preferred transcript language.
2. **The Actor collects it** - it reads each video's metadata and transcript, then writes one structured briefing per video.
3. **Your output** - a dataset with one row per video: summary, takeaways, action items, quotes, chapters, topics, and the full transcript. Export to JSON, CSV, or Excel, or read it from the API.

### What data can you extract?

| Field                  | Description                                                            |
| ---------------------- | ---------------------------------------------------------------------- |
| `videoId`              | The 11-character YouTube video ID.                                     |
| `url`                  | Canonical watch URL.                                                   |
| `title`                | Video title.                                                           |
| `channel`              | Channel name.                                                          |
| `channelUrl`           | Channel URL.                                                           |
| `publishDate`          | Publish or upload date, when available.                                |
| `durationSeconds`      | Video length in seconds.                                               |
| `viewCount`            | View count at read time.                                               |
| `category`             | YouTube category, when available.                                      |
| `keywords`             | Video keyword tags.                                                    |
| `description`          | Video description text.                                                |
| `thumbnailUrl`         | Highest-resolution thumbnail URL.                                      |
| `transcriptLanguage`   | Language code of the transcript used.                                  |
| `transcriptStatus`     | `ok`, `no-captions`, or a short reason.                                |
| `summary`              | 3-6 sentence summary of the video.                                     |
| `keyTakeaways`         | List of concise takeaway points.                                       |
| `actionItems`          | Concrete things a viewer could do; empty for non-instructional videos. |
| `topics`               | Topic tags derived from the transcript.                                |
| `notableQuotes`        | List of `{ quote, approxOffsetSeconds, timestamp }`.                   |
| `chapters`             | Ordered list of `{ title, summary, startOffsetSeconds, timestamp }`.   |
| `tone`                 | The video's tone.                                                      |
| `targetAudience`       | Who the video is aimed at.                                             |
| `transcript`           | The full transcript as one string.                                     |
| `transcriptSegments`   | Per-line `{ text, offsetSeconds, timestamp }`.                         |
| `enrichmentConfidence` | Briefing confidence: high, medium, or low.                             |
| `enrichmentStatus`     | Whether the briefing was produced, and if not, why.                    |
| `scrapedAt`            | ISO timestamp of the run.                                              |

### How to use YouTube Insight Extractor

1. Open the Actor in the Apify Console.
2. In **YouTube videos**, paste one video URL or ID per line.
3. Set **Max videos** and, if needed, a **Preferred transcript language**.
4. Press **Start**.
5. When the run finishes, open the **Dataset** tab and export to CSV, JSON, or Excel, or connect it to your workflow.

![YouTube Insight Extractor input form filled with video URLs](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/youtube-insight-extractor--input.png)

### Input Parameters

| Parameter            | Type            | Required | Default           | Description                                                                                                                               |
| -------------------- | --------------- | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `videoUrls`          | array           | Yes      | one example video | One entry per video: a watch URL, youtu.be link, Shorts link, or bare video ID.                                                           |
| `maxItems`           | integer         | No       | 5                 | Stop after this many video reports.                                                                                                       |
| `language`           | string          | No       | `en`              | Two-letter language code for the transcript. Falls back to the default track if unavailable.                                              |
| `openRouterApiKey`   | string (secret) | No       | —                 | Optional key for the analysis service. Without it, the transcript and metadata are still returned and the briefing fields are left empty. |
| `proxyConfiguration` | object          | Yes      | Apify residential | Proxy settings. A residential proxy is required; the default uses Apify's residential proxy.                                              |

### Output Data

One dataset item per video. Real sample record (transcript trimmed for length):

```json
{
    "videoId": "UF8uR6Z6KLc",
    "url": "https://www.youtube.com/watch?v=UF8uR6Z6KLc",
    "title": "Steve Jobs' 2005 Stanford Commencement Address",
    "channel": "Stanford",
    "channelUrl": "https://www.youtube.com/channel/UC-EnprmCZ3OXyAoG7vjVNCA",
    "publishDate": "2008-03-07",
    "durationSeconds": 904,
    "viewCount": 48969661,
    "category": "Education",
    "keywords": ["apple", "graduation", "stanford", "commencement", "Steve", "Jobs"],
    "description": "Drawing from some of the most pivotal points in his life, Steve Jobs...",
    "thumbnailUrl": "https://i.ytimg.com/vi/UF8uR6Z6KLc/hqdefault.jpg",
    "transcriptLanguage": "en",
    "transcriptStatus": "ok",
    "summary": "Steve Jobs' 2005 Stanford Commencement Address shares three personal stories illustrating the importance of connecting the dots, following one's heart, and embracing death as life's change agent. He emphasizes the significance of loving one's work and staying hungry and foolish.",
    "keyTakeaways": [
        "Trust that the dots will connect in your future, even when you can't see how.",
        "Love what you do, and don't settle until you find it.",
        "Embrace the fact that death is life's change agent and use it as a motivator to live authentically.",
        "Stay hungry and foolish in your pursuits."
    ],
    "actionItems": [
        "Reflect on your life and choices, trusting that they will connect in the future.",
        "Pursue your passions and love what you do."
    ],
    "topics": ["Connecting the dots", "Love and loss", "Death and life", "Following one's heart"],
    "notableQuotes": [
        {
            "quote": "You can't connect the dots looking forward; you can only connect them looking backwards.",
            "approxOffsetSeconds": 120,
            "timestamp": "2:00"
        },
        { "quote": "Stay Hungry. Stay Foolish.", "approxOffsetSeconds": 1080, "timestamp": "18:00" }
    ],
    "chapters": [
        {
            "title": "Connecting the Dots",
            "summary": "Jobs shares how dropping out of Reed College led him to a calligraphy class that later influenced the Macintosh.",
            "startOffsetSeconds": 0,
            "timestamp": "0:00"
        },
        {
            "title": "Love and Loss",
            "summary": "Jobs discusses being fired from Apple and how it led to NeXT and Pixar.",
            "startOffsetSeconds": 300,
            "timestamp": "5:00"
        }
    ],
    "tone": "Inspirational, reflective, and motivational",
    "targetAudience": "Graduates and those seeking inspiration in life and career",
    "transcript": "This program is brought to you by Stanford University... I am honored to be with you today...",
    "transcriptSegments": [
        { "text": "This program is brought to you by Stanford University.", "offsetSeconds": 7, "timestamp": "0:07" }
    ],
    "enrichmentConfidence": "high",
    "enrichmentStatus": "ok",
    "scrapedAt": "2026-09-04T11:11:22.157Z"
}
```

![YouTube Insight Extractor dataset table with summary, takeaways and chapters](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/youtube-insight-extractor--export.png)

![YouTube Insight Extractor field map: one video briefing with every field labelled](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/youtube-insight-extractor--output.png)

### Usage Examples

- **Research digest** - paste 20 talk URLs, run, and read the `summary` and `keyTakeaways` columns.
- **Course notes** - run a tutorial series and keep the `chapters` and `actionItems` for each video.
- **Quote sourcing** - filter `notableQuotes` for a phrase and jump to the `timestamp`.
- **Content repurposing** - use `topics` and `keyTakeaways` as the outline for a blog post or newsletter.

### Tips for Best Results

- Videos need captions (creator-provided or auto-generated). `transcriptStatus` tells you when a video has none.
- Set `language` to match the spoken language for the cleanest transcript.
- Long videos are summarized from the first portion of the transcript when it is very long; the full transcript is always returned in full.
- Provide an analysis service API key for the briefing fields; the transcript and metadata work without one.

### Known Limitations

- A residential proxy is required; video data is not served to datacenter traffic.
- Videos with captions disabled return `transcriptStatus` `no-captions` and empty briefing fields.
- Private, age-restricted, members-only, and region-blocked videos may return a status explaining why instead of a transcript.
- `publishDate` and `category` depend on the video page and can be null.
- Auto-generated captions contain transcription errors that carry into the briefing.
- The briefing quality reflects the default no-cost model and can be terse on very long or highly technical videos.

### Integrations

Connect the dataset to Google Sheets, Airtable, Make, Zapier, or n8n; call the Actor from the Apify API; trigger it with webhooks; or schedule recurring runs from the Apify Console.

### Export Formats

JSON, CSV, Excel, and XML, from the Dataset tab or the Apify API.

### Frequently Asked Questions

#### Do I need an account or login?

No. The Actor reads public video data and never logs in anywhere.

#### Which videos work?

Any public video that has captions - creator-provided or auto-generated. Shorts, youtu.be links, and bare IDs are all accepted.

#### What if a video has no captions?

The row is still written with metadata and `transcriptStatus` set to `no-captions`; the briefing fields are empty.

#### Can I get the transcript in another language?

Set `language` to the two-letter code you want. If that track does not exist, the video's default track is used and `transcriptLanguage` shows which one.

#### Is the full transcript included?

Yes. Every row contains the full `transcript` string and the `transcriptSegments` array with per-line timestamps.

#### Am I charged for failed results?

You are charged for video reports written to the dataset. Videos that fail before a report is written are not charged.

#### How fresh is the data?

Metadata and the transcript are read live at run time. `viewCount` is the value at read time.

#### Can it export to Google Sheets?

Yes. Connect the dataset to the Google Sheets integration or pull it from the API.

#### Does it handle duplicate videos?

Yes. Videos are keyed by ID; a duplicate entry is processed once.

### Support

Questions and bug reports: use the **Issues** tab on the Actor's Console page. Include the input you ran and the run ID.

### Legal / Responsible Use

You are responsible for complying with YouTube's Terms of Service, applicable law, and responsible data-use requirements. Transcripts and video metadata may include personal data; you are responsible for meeting any applicable privacy and data-protection obligations (for example GDPR) for personal data you collect and store, and for respecting the rights of content creators when reusing transcript text.

# Actor input Schema

## `videoUrls` (type: `array`):

One entry per video. Paste a YouTube video URL, a youtu.be link, a Shorts link, or a bare 11-character video ID.

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

Stop after this many video reports have been written to the dataset.

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

Two-letter language code for the transcript, for example "en", "es", "de". If that language is not available the Actor uses the video's default caption track.

## `openRouterApiKey` (type: `string`):

Optional. A key for the service that writes the structured briefing. Without it, the Actor still returns the full transcript and video metadata and leaves the briefing fields empty. Stored securely and never shown in output or logs.

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

A residential proxy is required - video data is not served to datacenter traffic. The default uses Apify's residential proxy.

## Actor input object example

```json
{
  "videoUrls": [
    {
      "url": "https://www.youtube.com/watch?v=aircAruvnKk"
    },
    {
      "url": "https://www.youtube.com/watch?v=8S0FDjFBj8o"
    },
    {
      "url": "https://youtu.be/UF8uR6Z6KLc"
    }
  ],
  "maxItems": 5,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `companies` (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 = {
    "videoUrls": [
        {
            "url": "https://www.youtube.com/watch?v=aircAruvnKk"
        },
        {
            "url": "https://www.youtube.com/watch?v=8S0FDjFBj8o"
        },
        {
            "url": "https://youtu.be/UF8uR6Z6KLc"
        }
    ],
    "maxItems": 5,
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/youtube-insight-extractor").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 = {
    "videoUrls": [
        { "url": "https://www.youtube.com/watch?v=aircAruvnKk" },
        { "url": "https://www.youtube.com/watch?v=8S0FDjFBj8o" },
        { "url": "https://youtu.be/UF8uR6Z6KLc" },
    ],
    "maxItems": 5,
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/youtube-insight-extractor").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 '{
  "videoUrls": [
    {
      "url": "https://www.youtube.com/watch?v=aircAruvnKk"
    },
    {
      "url": "https://www.youtube.com/watch?v=8S0FDjFBj8o"
    },
    {
      "url": "https://youtu.be/UF8uR6Z6KLc"
    }
  ],
  "maxItems": 5,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mrdoe/youtube-insight-extractor --silent --output-dataset

```

## MCP server setup

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

```

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/LWSkyvSmgImHJbOpI/builds/KD1MFDHtOA6UdYLEO/openapi.json
