# Video Transcripts + AI Summaries: YouTube, TikTok, Reels, X (`rs-automation-labs/video-transcripts-ai-summaries`) Actor

Get transcripts from YouTube, TikTok, Instagram Reels, X/Twitter videos and podcasts in one run: plain text, timestamped segments, SRT and VTT. Native captions first, AI speech-to-text fallback, optional AI summary, key points and chapters. Failed URLs are free.

- **URL**: https://apify.com/rs-automation-labs/video-transcripts-ai-summaries.md
- **Developed by:** [RS Automation Labs](https://apify.com/rs-automation-labs) (community)
- **Categories:** AI, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Video Transcripts + AI Summaries: YouTube, TikTok, Instagram Reels, X & Podcasts

Get **transcripts from YouTube, TikTok, Instagram Reels, X (Twitter) videos and podcasts** in one run, as **plain text, timestamped segments, SRT or VTT subtitles**. The Actor uses the platform's **native captions first**, which is fast, exact and cheap. When a video has no captions, it falls back to **AI speech-to-text**. You can also add an **AI summary, key points and timestamped chapters** for every video.

**No API keys needed.** Speech-to-text and summaries run through Apify's official OpenRouter proxy and are billed at cost to your Apify account. **Failed URLs are free:** every URL gets its own row, and a broken link becomes a clear error row instead of failing the run.

### What does Video Transcripts + AI Summaries do?

- **One Actor for every platform:** YouTube videos, Shorts, playlists and channels, TikTok videos, Instagram Reels and video posts, X/Twitter video posts, podcast RSS feeds, Apple Podcasts links, and direct audio or video files (MP3, M4A, MP4, WAV, FLAC and more).
- **Captions first, speech-to-text second:** it reads YouTube manual and auto-generated captions, TikTok/X subtitles and Podcasting 2.0 `<podcast:transcript>` files. Audio is only transcribed when no captions exist, so you only pay for speech-to-text when it is really needed.
- **Any language:** choose a preferred language. YouTube captions can be machine-translated into it when that track is missing, and AI summaries can be written in any language.
- **Every output format:** `text`, timestamped `segments` (`start`, `end`, `text`), `srt` and `vtt`. Optionally the Actor also saves `.srt`, `.vtt` and `.txt` files with download links.
- **AI summaries (optional):** a summary, key points, chapters with timestamps, notable quotes and topics. You can pick any OpenRouter model.
- **Built for reliability:** it rotates YouTube player clients, falls back to residential proxy automatically when a platform blocks a request, retries and switches models when the speech-to-text model is busy, and resumes after platform migrations. Errors come with a code and a plain-English hint.

### Who is it for?

- **Content and SEO teams:** turn videos and podcasts into blog posts, show notes, captions and quotes.
- **Researchers and analysts:** collect what creators, brands or competitors actually *say* across YouTube, TikTok, Reels and X.
- **AI and RAG builders:** clean, timestamped transcripts in JSON for embeddings, search and chatbots.
- **Social media managers:** subtitles (SRT/VTT) for reposting, and summaries for reporting.
- **Developers:** one API call, or a Make / Zapier / n8n step, for any video URL.

### Why this Actor?

- **Multi-platform in one run.** Most transcript Actors on the Store handle a single platform. Here you can paste a mixed list and get one consistent output schema.
- **Reliable by design.** Captions are fetched with lightweight API calls and residential proxy fallback. In our cloud tests every YouTube, TikTok, Instagram and X video that contained speech was transcribed (see [Tested success rates](#tested-success-rates)).
- **Cheap where it can be.** A YouTube video with captions costs a single transcript event. Speech-to-text minutes are only charged for videos with no captions.
- **Honest errors.** Deleted, private, music-only or DRM-protected content is reported with a reason (`NOT_FOUND`, `LOGIN_REQUIRED`, `NO_SPEECH`, `DRM_PROTECTED`, …), and those rows are free.

### How to use it

1. Paste one or more URLs into **Video, reel, post or podcast URLs**, one per line.
2. Optional: set a **preferred language** such as `en`, `es` or `hi`.
3. Optional: choose **output formats** (text and segments by default, plus SRT and VTT).
4. Optional: switch on **Add AI summary** and choose the outputs you want.
5. Click **Start**. Each URL becomes one row in the dataset. Export it as JSON, CSV, Excel or HTML, or fetch it via the API.

### Input example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=arj7oStGLkU",
    "https://www.youtube.com/@TED/shorts",
    "https://www.tiktok.com/@spacedotcom/video/7629097281974848782",
    "https://www.instagram.com/reel/DAbM6HKiEY0/",
    "https://x.com/SpaceX/status/2112502543947325773",
    "https://podcasts.apple.com/us/podcast/the-daily/id1200361736",
    "https://feeds.npr.org/500005/podcast.xml"
  ],
  "language": "en",
  "outputFormats": ["text", "segments", "srt"],
  "speechToText": "auto",
  "aiSummary": true,
  "aiOutputs": ["summary", "keyPoints", "chapters"],
  "maxVideosPerChannel": 5,
  "maxEpisodesPerFeed": 1
}
```

#### Supported URLs

| Platform | Supported URLs | How the transcript is made |
|---|---|---|
| YouTube | `watch?v=`, `youtu.be/`, `/shorts/`, `/live/`, `m.youtube.com`, playlists, channels (`/@name`, `/@name/videos`, `/@name/shorts`) | Manual captions → auto-captions → translated captions → speech-to-text |
| TikTok | `tiktok.com/@user/video/…`, `vm.tiktok.com` short links | Speech-to-text from the video's audio. TikTok's own subtitles are used when they are offered. |
| Instagram | `/reel/…`, `/p/…` (video posts), `/tv/…` | Speech-to-text from the audio |
| X / Twitter | `x.com/…/status/…`, `twitter.com/…/status/…` | Subtitles if present, otherwise speech-to-text |
| Podcasts | RSS feeds, Apple Podcasts show or episode links | Published transcript (`<podcast:transcript>`) → speech-to-text of the episode audio |
| Files | Direct links to MP3, M4A, AAC, WAV, OGG, OPUS, FLAC, MP4, MOV, WEBM | Speech-to-text |

Spotify episodes are DRM-protected and cannot be transcribed. Paste the show's RSS feed or Apple Podcasts link instead (you will get a clear `DRM_PROTECTED` row). Profile pages, hashtag pages and private or login-only content are not supported.

### Output example

One row per URL (shortened):

```json
{
  "url": "https://www.youtube.com/watch?v=arj7oStGLkU",
  "platform": "youtube",
  "status": "ok",
  "id": "arj7oStGLkU",
  "title": "Inside the Mind of a Master Procrastinator | Tim Urban | TED",
  "author": "TED",
  "durationSeconds": 844,
  "viewCount": 62099590,
  "transcriptSource": "captions",
  "language": "en",
  "captionLanguagesAvailable": ["ar", "bg", "en", "es", "hi", "..."],
  "wordCount": 2377,
  "segmentCount": 315,
  "text": "So in college, I was a government major, which means I had to write a lot of papers...",
  "segments": [
    { "start": 12.64, "end": 14.02, "text": "So in college," },
    { "start": 15.35, "end": 16.91, "text": "I was a government major," }
  ],
  "srt": "1\n00:00:12,645 --> 00:00:14,015\nSo in college,\n\n2\n00:00:15,349 --> 00:00:16,913\nI was a government major,\n...",
  "summary": "Tim Urban, a self-proclaimed procrastinator, explains the internal struggle of procrastination through a humorous analogy involving three characters: the Rational Decision-Maker, the Instant Gratification Monkey and the Panic Monster...",
  "keyPoints": ["...", "..."],
  "chapters": [
    { "start": 12, "timestamp": "0:12", "title": "Normal vs. Procrastinator Workflows" },
    { "start": 44, "timestamp": "0:44", "title": "The 90-Page Thesis Disaster" },
    { "start": 235, "timestamp": "3:55", "title": "The Instant Gratification Monkey" }
  ],
  "aiModel": "google/gemini-2.5-flash-lite",
  "proxyUsed": "residential",
  "chargedEvents": { "transcript": 1, "ai-summary": 1 },
  "processedAt": "2026-10-22T12:53:51Z"
}
```

An error row is free and looks like this:

```json
{
  "url": "https://www.instagram.com/reel/AAAAAAAAAAA/",
  "platform": "instagram",
  "status": "error",
  "errorCode": "LOGIN_REQUIRED",
  "errorMessage": "Instagram sent an empty media response",
  "errorHint": "The content is private, age-restricted or needs a logged-in account, which this Actor does not use."
}
```

#### Main fields

| Field | Description |
|---|---|
| `status` | `ok`, `error` or `skipped` |
| `platform` | `youtube`, `tiktok`, `instagram`, `x`, `podcast`, `media-file` |
| `transcriptSource` | `captions`, `auto-captions`, `translated-captions`, `podcast-transcript` or `speech-to-text` |
| `text`, `segments`, `srt`, `vtt` | The transcript in the formats you selected |
| `subtitleFiles` | Download links for saved `.srt` / `.vtt` / `.txt` files (when enabled) |
| `title`, `author`, `publishedAt`, `durationSeconds`, `viewCount`, `likeCount`, `thumbnailUrl` | Video or episode metadata where the platform provides it |
| `podcastTitle`, `episodeUrl`, `audioUrl` | Podcast metadata |
| `summary`, `keyPoints`, `chapters`, `quotes`, `topics` | AI outputs (when enabled) |
| `audioMinutes`, `sttModel`, `sttCostUsd` | Speech-to-text usage for items without captions |
| `aiModel`, `aiCostUsd` | AI summary model and its cost at OpenRouter prices |
| `errorCode`, `errorMessage`, `errorHint` | Why an item failed and what to do |
| `chargedEvents` | What this row was charged |

#### Dataset views and files

- **Overview**: status, platform, title, source, words and summary for each URL.
- **AI summaries**: summary, key points and chapters.
- **Errors**: only the failed URLs, with reasons.
- The key-value store holds the saved subtitle files and an `OUTPUT` run summary: success rate by platform, error counts, audio minutes and charges.

#### Error codes

| Code | Meaning |
|---|---|
| `NOT_FOUND` | Removed, private or wrong URL |
| `LOGIN_REQUIRED` / `AGE_RESTRICTED` | Needs a logged-in account (not supported) |
| `BLOCKED` | The platform blocked every proxy we tried. TikTok also returns this for deleted or region-locked posts. |
| `NO_CAPTIONS` | No captions, and speech-to-text is off |
| `NO_AUDIO` / `NO_SPEECH` | No audio track (for example a text or image post), or audio without speech (music only) |
| `TOO_LONG` | Longer than **Max audio minutes per item** |
| `DRM_PROTECTED` | Spotify and other DRM audio |
| `UNSUPPORTED_URL` / `INVALID_URL` | Profile, hashtag or unknown page |
| `STT_FAILED` / `STT_CREDITS` | The speech-to-text service failed, or your account is out of credit. Retry later. |
| `FEED_ERROR` | The podcast feed could not be read |
| `BUDGET_LIMIT` | Your **Maximum cost per run** was reached |

### How much does it cost?

This Actor uses **pay-per-event** pricing. You only pay for successful results:

| Event | Price | When |
|---|---|---|
| **Transcript** | **$0.004** | Each URL successfully transcribed, by captions or by speech-to-text |
| **Audio minute** | **$0.006** | Each started minute of audio transcribed with speech-to-text. Not charged when captions exist. |
| **AI summary** | **$0.003** | Each AI summary / key points / chapters block, only when you turn it on |

Failed, skipped and empty URLs are **free**. There is no start fee.

**AI model usage** (speech-to-text and summaries) is billed separately to your Apify account at OpenRouter prices through Apify's OpenRouter proxy. On the Apify **FREE plan, Apify bills proxy model usage at 10×**. Add your own OpenRouter API key to pay OpenRouter directly at 1×.

| Example | Actor events | Model usage (paid plans) | Total |
|---|---|---|---|
| 1,000 YouTube videos with captions | 1,000 × $0.004 | $0 | **$4.00** |
| 1,000 YouTube videos with captions + AI summary | $4 + $3 | ≈ $0.30–0.70 | **≈ $7.50** |
| 100 TikToks / Reels (≈ 1 min each, speech-to-text) | $0.40 + $0.60 | ≈ $0.10 | **≈ $1.10** |
| One 30-minute podcast episode (no published transcript) | $0.004 + $0.18 | ≈ $0.02–0.04 | **≈ $0.21** |

Measured model cost with the default model `google/gemini-2.5-flash-lite`: about **$0.0007–0.0012 per audio minute** for speech-to-text and **$0.0001–0.003 per AI summary**, depending on length and language (paid plans; ×10 on FREE). You can cap the total cost with **Maximum cost per run** in the run options. The Actor stops starting new items before the limit is reached.

### Using your own OpenRouter API key (optional)

Paste an OpenRouter key into **Your OpenRouter API key** (it is stored as a secret). It gives you three things:

- model usage is billed by OpenRouter directly, with no Apify FREE-plan multiplier;
- **Whisper models** (`openai/whisper-large-v3-turbo`, `whisper-large-v3`, `gpt-4o-mini-transcribe`) unlock; they give precise segment timestamps;
- your own rate limits.

### FAQ

**Does it work without captions?**
Yes. With **Speech-to-text fallback** set to `auto` (the default), any video without captions is transcribed from its audio. Set it to `off` to use captions only (cheapest), or to `always` to ignore captions.

**How accurate is speech-to-text?**
The default Gemini 2.5 Flash Lite model is very good on clear speech in major languages. Timestamps are accurate to about one to two seconds. For the most precise timestamps, use a Whisper model with your own OpenRouter key, or `gemini-2.5-flash` for harder audio.

**Can I get transcripts in another language?**
Set **Preferred language**. For YouTube, a matching caption track is used if it exists. Otherwise the captions are machine-translated (turn this off with **Translate YouTube captions**). Speech-to-text keeps the spoken language. **Summary language** lets you write the AI summary in any language.

**Can I transcribe a whole YouTube channel or playlist?**
Yes. Paste the playlist or channel URL (for example `https://www.youtube.com/@TED/videos`). Up to **Max videos per YouTube playlist / channel** of the newest videos are processed.

**Can I transcribe Spotify podcasts?**
No. Spotify audio is DRM-protected. Paste the podcast's RSS feed or Apple Podcasts link instead; almost every podcast has one.

**Is it legal?**
The Actor reads only public content, never logs in, and uses captions and audio that the platforms serve to anyone. You are responsible for how you use transcripts of other people's content. Respect copyright and each platform's terms, especially for republishing.

**Why did an Instagram Reel or X video return `NO_SPEECH`?**
Many reels and clips are music-only or use on-screen text with no voice. Those rows are free.

**Can I use it through the API, Make, Zapier or n8n?**
Yes. Like every Apify Actor, it has a REST API, client libraries for JavaScript and Python, and integrations with Make, Zapier, n8n, Google Sheets, Slack and webhooks.

### Tested success rates

Cloud runs on Apify, October 2026, with real speech-to-text (default settings):

| Platform | URLs tested | Transcribed | Correctly reported as no speech/audio | Expected errors (fake/unsupported URLs) | Success on videos with speech |
|---|---|---|---|---|---|
| YouTube (captions + speech-to-text, incl. Shorts, Korean auto-captions, Hindi) | 19 | 16 | 1 (music-only Short) | 2 fake IDs → `NOT_FOUND` | **16 / 16** |
| TikTok | 10 | 8 | 0 | 1 deleted post → `BLOCKED`, 1 profile → `UNSUPPORTED_URL` | **8 / 8** |
| Instagram Reels | 10 | 6 | 2 (music-only reels) | 1 fake reel → `LOGIN_REQUIRED`, 1 profile → `UNSUPPORTED_URL` | **6 / 6** |
| X / Twitter | 11 | 6 | 2 no speech, 1 video without an audio track | 1 text-only post, 1 nonexistent post → `NO_AUDIO` | **6 / 6** |
| Podcasts: published transcripts and feed/Apple resolution | 12 | all feeds and Apple links resolved | — | Spotify → `DRM_PROTECTED`, fake feed → `FEED_ERROR`, over-limit episodes → `TOO_LONG` | **100 %** |
| Podcasts: speech-to-text of long episodes (beta) | 16 attempts | 5 | — | — | **31 %, see Limitations** |

### Limitations

- **Beta: long-audio speech-to-text (podcasts, long videos without captions) is not yet reliable.** In our tests, Apify's OpenRouter proxy often returned HTTP 500 ("socket hang up") on multi-chunk episodes, so 11 of 16 long-episode attempts failed with `STT_FAILED` (free, not charged). Short clips were unaffected. A retry or your own OpenRouter key usually helps.
- Private, login-only, age-restricted and DRM content is not supported. No cookies or accounts are used.
- Speech-to-text needs this Actor to run on the Apify platform (for the OpenRouter proxy) or your own OpenRouter key.
- Timestamps from Gemini speech-to-text are approximate (about 1–2 s). Whisper (own key) is more precise.
- `NO_SPEECH` detection depends on the model, and a clip with very quiet speech under loud music may be reported as no speech.
- YouTube often blocks datacenter IPs. The Actor then uses residential proxy automatically, which is slower.
- Default limits: 180 audio minutes per item and 5,000 URLs per run.

### Support

Found a URL that should work but doesn't? Open an issue in the **Issues** tab with the URL and the run ID, and we will look at it quickly.

# Changelog

This Actor's version history is a separate document: https://apify.com/rs-automation-labs/video-transcripts-ai-summaries/changelog.md

# Actor input Schema

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

One URL per line, any mix of platforms: YouTube videos/Shorts (or a playlist/channel), TikTok videos, Instagram Reels/video posts, X/Twitter posts with video, podcast RSS feeds, Apple Podcasts show or episode links, and direct audio/video files (MP3, M4A, MP4, WAV...). Bare YouTube video IDs work too.

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

ISO code such as en, es, de, hi or pt-BR. Picks the caption track in this language and hints the speech-to-text model. Leave empty to use the spoken language.

## `translateCaptions` (type: `boolean`):

If a YouTube video has no captions in your preferred language, return YouTube's own machine translation (marked translated-captions). Only applies when a preferred language is set.

## `outputFormats` (type: `array`):

What to include in each dataset row. Plain text is best for AI/LLM pipelines, timestamped segments for search and clipping, SRT/VTT for subtitles.

## `saveSubtitleFiles` (type: `boolean`):

Store downloadable subtitle and text files in the run's key-value store and add their links to each row.

## `speechToText` (type: `string`):

Auto: use captions/published transcripts when they exist, otherwise transcribe the audio (TikTok, Reels, X and most podcasts need this). Off: captions only, items without captions fail for free. Always: ignore captions and transcribe the audio.

## `sttModel` (type: `string`):

Model used only for items without captions. The default, Gemini 2.5 Flash Lite, works through Apify's OpenRouter proxy with no key. It costs about $0.0007–0.0012 per audio minute at OpenRouter prices, billed to your Apify account; Apify bills proxy model usage at 10× on the FREE plan. Whisper models give the most precise timestamps but need your own OpenRouter API key, because Apify's proxy has no transcription endpoint. Without a key they fall back to the default.

## `maxAudioMinutes` (type: `integer`):

Longer items are skipped (free) instead of transcribed. Caps your cost for long podcasts. Does not limit caption-based transcripts.

## `aiSummary` (type: `boolean`):

Generate a summary, key points and timestamped chapters for every transcript. Charged per summary, plus the model cost at OpenRouter prices (usually under $0.001 per video on paid Apify plans; 10× on the FREE plan unless you add your own OpenRouter key).

## `aiOutputs` (type: `array`):

Which AI fields to generate. Chapters use the transcript timestamps (YouTube-style 0:00 stamps).

## `aiModel` (type: `string`):

Any OpenRouter chat model ID. Default google/gemini-2.5-flash-lite is cheap with a 1M-token context (long podcasts fit). Alternatives: google/gemini-2.5-flash, openai/gpt-4.1-mini, anthropic/claude-haiku-4.5.

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

ISO code (en, es, hi...) for the AI output. Empty = same language as the transcript.

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

When you paste a playlist or channel URL, the newest N videos are transcribed.

## `maxEpisodesPerFeed` (type: `integer`):

When you paste a podcast RSS feed or Apple Podcasts show link, the newest N episodes are transcribed.

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

Leave empty to use Apify's OpenRouter proxy (model cost billed to your Apify account). With your own key, speech-to-text and AI are paid to OpenRouter directly.

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

Apify Proxy (datacenter) is used first; blocked requests are retried through residential proxy automatically. You don't need to change this.

## `residentialFallback` (type: `boolean`):

Recommended. Platforms like YouTube and Instagram sometimes block datacenter IPs; this retries them through residential IPs at no extra charge to you.

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

How many URLs are processed at the same time.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=arj7oStGLkU",
    "https://www.tiktok.com/@spacedotcom/video/7629097281974848782",
    "https://x.com/SpaceX/status/2112502543947325773"
  ],
  "translateCaptions": true,
  "outputFormats": [
    "text",
    "segments"
  ],
  "saveSubtitleFiles": false,
  "speechToText": "auto",
  "sttModel": "google/gemini-2.5-flash-lite",
  "maxAudioMinutes": 180,
  "aiSummary": false,
  "aiOutputs": [
    "summary",
    "keyPoints",
    "chapters"
  ],
  "aiModel": "google/gemini-2.5-flash-lite",
  "maxVideosPerChannel": 10,
  "maxEpisodesPerFeed": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true,
  "maxConcurrency": 4
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per URL: status, title, source, words, summary.

## `data` (type: `string`):

Every field: text, segments, SRT/VTT, AI fields, metadata.

## `ai` (type: `string`):

Summary, key points and chapters.

## `errors` (type: `string`):

Failed or skipped URLs with the reason.

## `files` (type: `string`):

Saved .srt / .vtt / .txt files and the OUTPUT run summary.

## `summary` (type: `string`):

Success rate by platform, error counts, audio minutes and charges.

# 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/watch?v=arj7oStGLkU",
        "https://www.tiktok.com/@spacedotcom/video/7629097281974848782",
        "https://x.com/SpaceX/status/2112502543947325773"
    ],
    "outputFormats": [
        "text",
        "segments"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rs-automation-labs/video-transcripts-ai-summaries").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/watch?v=arj7oStGLkU",
        "https://www.tiktok.com/@spacedotcom/video/7629097281974848782",
        "https://x.com/SpaceX/status/2112502543947325773",
    ],
    "outputFormats": [
        "text",
        "segments",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rs-automation-labs/video-transcripts-ai-summaries").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/watch?v=arj7oStGLkU",
    "https://www.tiktok.com/@spacedotcom/video/7629097281974848782",
    "https://x.com/SpaceX/status/2112502543947325773"
  ],
  "outputFormats": [
    "text",
    "segments"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rs-automation-labs/video-transcripts-ai-summaries --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rs-automation-labs/video-transcripts-ai-summaries"
        }
    }
}
```

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/AsrOOunVYN6fDBV8v/builds/Mb9Hd6bKjlggITffy/openapi.json
