# Video Transcript Scraper: TikTok, Instagram, YouTube & X (`scrape-lads/video-transcript-scraper`) Actor

Get transcripts from TikTok, Instagram Reels, YouTube videos and Shorts, and X videos. Native subtitles first, Whisper speech-to-text when a video has none. Timestamped segments, language, author, caption and stats. Pay only for transcripts.

- **URL**: https://apify.com/scrape-lads/video-transcript-scraper.md
- **Developed by:** [Scrape Lads](https://apify.com/scrape-lads) (community)
- **Categories:** Videos, Social media, AI
- **Features:** Limited permissions
- **Stats:** 38 total users, 17 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 transcript from subtitles

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?

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

### What does Video Transcript Scraper do?

**Video Transcript Scraper turns TikTok, Instagram Reels, YouTube videos and Shorts, and X (Twitter) videos into clean text transcripts with timestamps.** Paste video links, or a creator's profile to get their latest videos, and get one row per video. Each row has the full transcript, timestamped segments, the detected language, the author, caption, duration and engagement stats.

It reads the platform's **own subtitles first** (TikTok's captions and YouTube's captions), which are fast and cheap. When a video has none (every Instagram Reel, X videos, and TikToks without captions), it **transcribes the audio with Whisper speech-to-text**. Every row says which method was used.

Run it in Apify Console, call it from the **API**, **schedule** it, or connect it to Make, Zapier, n8n, Google Sheets or your own code. Apify takes care of proxies, retries and monitoring.

### What data can you extract from a video?

| 📝 Full transcript | ⏱️ Timestamped segments | 🗣️ Language |
|---|---|---|
| 📱 Platform | 👤 Author | 📰 Title and caption |
| ⏳ Duration | 🔢 Word count | 🎙️ Captions or speech-to-text |
| 👀 Views | ❤️ Likes | 💬 Comments |
| 🔁 Shares | 📅 Published at | 🖼️ Thumbnail |

### Why use this video transcript scraper?

- **One actor for four platforms.** You get a TikTok transcript, an Instagram transcript, a YouTube transcript and an X video transcript in the same format, with no extra tools.
- **Reels transcript without subtitles.** Instagram doesn't publish captions, so most tools give up. This one transcribes the speech.
- **Cheap when subtitles exist.** Native subtitles cost less than speech-to-text, and you only pay for speech-to-text when it is actually needed.
- **Pay only for transcripts.** Private, deleted or silent videos are free.

Common uses:

- **AI and RAG:** feed creator videos into a knowledge base or a GPT, or summarize them.
- **Content research:** see what top creators actually say in their hooks, scripts and calls to action.
- **Repurposing:** turn short videos into blog posts, newsletters and captions.
- **Brand and ad monitoring:** search spoken mentions of products, competitors or claims.
- **Accessibility and translation:** start subtitles or translations from an accurate transcript.

#### TikTok transcript, Instagram transcript, YouTube transcript and X video transcript

All four platforms come back in the same row format. TikTok and YouTube use their own captions when they exist. An Instagram Reels transcript and an X video transcript always come from speech-to-text, because those platforms publish no subtitles.

### How to get transcripts from TikTok, Instagram, YouTube and X

1. Click **Try for free** and open the **Input** tab.
2. Paste video URLs into **Video URLs**, or creators into **Profiles or channels**, and set how many of the latest videos to take.
3. Leave **Speech-to-text** on "Fallback" (recommended), pick "Replace automatic captions" for the most exact wording (billed as speech-to-text for those videos), or "Never" for subtitles only.
4. Click **Start**. A few videos take seconds.
5. Download the results as **JSON, CSV, Excel or HTML**, or read them through the API.

### Input

Everything is set on the **Input** tab. Example:

```json
{
    "urls": [
        "https://www.tiktok.com/@garyvee/video/7696603359335288078",
        "https://www.instagram.com/reel/Dd-VQPnRz0t/",
        "https://www.youtube.com/shorts/aNI2jv7lBPQ",
        "https://x.com/elonmusk/status/1585341984679469056"
    ],
    "profiles": ["https://www.tiktok.com/@garyvee", "https://www.youtube.com/@MrBeast/shorts"],
    "maxVideosPerProfile": 10,
    "speechToText": "fallback",
    "language": "",
    "includeSegments": true
}
```

| Field | What it does |
| --- | --- |
| `urls` | Video links. Accepted: TikTok videos and short links, Instagram Reels and video posts, YouTube videos, Shorts and youtu.be links, and X/Twitter posts with a video. Direct links to audio or video files (`.mp3`, `.m4a`, `.wav`, `.mp4`, `.mov`, `.webm`, `.ogg`) work too. |
| `profiles` | Creators whose latest videos you want: `tiktok.com/@name`, `instagram.com/name`, `youtube.com/@channel` (add `/shorts` for the Shorts tab). |
| `maxVideosPerProfile` | How many of the newest videos to take per profile (Instagram serves at most 12 without a login). |
| `speechToText` | `fallback` (subtitles first, speech-to-text when there are none), `replaceAutoCaptions` (also use speech-to-text instead of automatic captions, billed as speech-to-text for those videos), `always`, or `never`. |
| `language` | Optional two-letter code. Picks the matching subtitle track and tells Whisper which language is spoken. |
| `includeSegments` | Include the timestamped segments (on by default). |
| `maxSpeechToTextSec` | Longest video sent to speech-to-text (default 1,800 s). |
| `datasetId`, `maxDatasetItems` | Transcribe the videos listed in another run's dataset (pick it from your storage). Rows with a `url`, `postUrl`, `webVideoUrl`, `permalink`, `link` or `shortCode` that points to a supported video are used. Up to `maxDatasetItems` videos (default 100). |
| `outputFormats` | `["srt"]`, `["vtt"]` or both: adds ready-to-use subtitle text to each row. No extra charge. |
| `postedWithinDays`, `minViews` | Profile videos only: skip older or less-viewed videos, for free. |
| `onlyNew`, `watchlistName`, `resetWatchlist` | `onlyNew: true` skips videos this Actor already returned to you in an earlier run: no row and no charge. Failed videos are tried again. `watchlistName` keeps a separate list per name (one per scheduled task); `resetWatchlist: true` forgets the list before the run. |
| `maxAiMinutes` | Stop speech-to-text once this many minutes of audio are transcribed in the run. After that, videos with subtitles still get them at the subtitle price, and videos without come back free with the reason `budget_reached`. |

#### Chain it after another Actor

Run any scraper that returns video links (a profile, hashtag or search scraper), then start this Actor with that run's dataset in `datasetId`. You get one transcript row per video without copying links by hand.

#### Audio and video file links

Paste a direct link to an audio or video file, such as a podcast episode's `.mp3` or a recording's `.mp4`, and it is transcribed with speech-to-text like any video without subtitles, at the same price. The link must be public and point at the file itself, not at a page with a player. The row has `platform: "file"`, the file name as `title`, and no author or stats.

Not charged: a link that is a web page (`invalid_url`), a file that is missing or refused by its server (`not_found`, `blocked`), a file over 400 MB or longer than `maxSpeechToTextSec` (`too_long`), and a file without speech (`no_speech`).

### Output

One row per video. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "url": "https://www.instagram.com/reel/Dd-VQPnRz0t/",
    "platform": "instagram",
    "status": "success",
    "author": "feelgoodfoodie",
    "caption": "As soon is fall rolls around, I love to start roasting spaghetti squash...",
    "durationSec": 30,
    "language": "en",
    "transcript": "If you want an easier way to cut spaghetti squash, microwave it first for three minutes. Then it's so much easier to cut in half...",
    "segments": [
        { "start": 0, "end": 2.5, "text": "If you want an easier way to cut spaghetti squash," },
        { "start": 2.5, "end": 4.4, "text": "microwave it first for three minutes." }
    ],
    "wordCount": 100,
    "transcriptSource": "speech-to-text",
    "subtitleKind": null,
    "stats": { "views": 171362, "likes": 2831, "comments": 357, "shares": null },
    "fromProfile": null,
    "errorCode": null,
    "charged": true
}
```

The Output tab has three views: **Transcripts**, **Videos and stats**, and **Status per URL**.

### Data fields

| Field | Description |
| --- | --- |
| `url`, `platform`, `videoId` | The video and where it lives (`tiktok`, `instagram`, `youtube`, `x`, `facebook`, or `file` for a direct file link, where `videoId` is a short hash of the link). |
| `author`, `authorName`, `authorUrl` | Creator handle, display name and profile link. |
| `title`, `caption` | YouTube title, or the post caption or description. |
| `durationSec`, `publishedAt`, `thumbnailUrl` | Video length, publish date (when available), cover image. |
| `transcript` | Full transcript as one text. |
| `segments` | `{ start, end, text }` with times in seconds. |
| `srt`, `vtt` | The transcript as SubRip or WebVTT subtitle text, when asked for in `outputFormats`. |
| `language` | Two-letter language of the transcript. |
| `transcriptSource` | `subtitles` (platform captions) or `speech-to-text` (Whisper). |
| `subtitleKind` | `creator` (written by the creator) or `auto` (platform speech recognition). |
| `stats` | Views, likes, comments and shares, when the platform shows them. YouTube gives views only. |
| `wordCount`, `fromProfile` | Transcript length; the profile the video came from. |
| `status`, `errorCode`, `message` | `success`, `no_transcript` or `failed`, with a reason such as `private_or_removed`, `no_speech` or `too_long`. |
| `charged` | Whether this row was billed. |

### How much does it cost to get video transcripts?

Pay per result, with no subscription:

- **$2 per 1,000 subtitle transcripts** (TikTok and YouTube videos that have captions).
- **$5 per 1,000 speech-to-text transcripts** (Instagram Reels, X videos, and videos without captions), covering the first minute of audio. Longer videos add $0.0025 per extra started minute (a 3-minute video costs $0.01).
- A small $0.005 start fee per run.

**Failed, private, removed and silent videos are free.** Example: 1,000 TikTok transcripts plus 1,000 Instagram Reels under a minute cost about $7. The free Apify plan's monthly credit covers hundreds of transcripts.

**Which price applies depends on the Speech-to-text setting.** Every row's `transcriptSource` says how it was made and billed (`subtitles` or `speech-to-text`):

| Speech-to-text setting | Videos with captions | Videos without captions |
| --- | --- | --- |
| Fallback (default) | $2 per 1,000 | $5 per 1,000 |
| Replace automatic captions | $2 per 1,000 if the creator wrote the captions, **$5 per 1,000 if they are automatic** | $5 per 1,000 |
| Always | $5 per 1,000 | $5 per 1,000 |
| Never | $2 per 1,000 | free (skipped) |

Example: 1,000 TikToks with automatic captions cost $2 on Fallback and $5 on Replace automatic captions.

#### Automatic captions or speech-to-text?

TikTok and YouTube make most captions automatically. In our test of 500 recent TikTok and YouTube videos (November 2026), automatic captions missed about 1 meaningful word in 120 compared with speech-to-text. 62% of videos lost no meaningful word, but 7% lost 5% or more of their words (10% on TikTok), and YouTube's automatic captions censor swearing. Speech-to-text makes mistakes too, so neither is perfect. **Replace automatic captions** is for when exact wording matters (quotes, research, subtitles), at the speech-to-text price for those videos.

### Tips

- Use **Fallback** mode for the lowest price. TikTok and YouTube captions are the cheapest source, and speech-to-text fills the gaps.
- Choose **Replace automatic captions** when exact wording matters more than price. Captions written by the creator are still used, at the subtitle price.
- Choose **Never** to get subtitles only. Videos without them come back free with `no_subtitles`.
- Set **Language** when you need a specific subtitle track (for example `es`), or to help Whisper with a less common language.
- Turn off **Include timestamped segments** if you only need the plain text.
- Lower **Longest video for speech-to-text** to stop long uploads from adding extra-minute charges.

### Video Transcript Scraper API: use it in your app or SaaS

Add this data to your own product without building or maintaining a scraper, for example in AI note-takers, content repurposing tools, social listening dashboards or a RAG pipeline. Your backend calls the Apify API, the Actor does the scraping, proxies and retries, and you get clean JSON back. You pay per result, so your cost grows with your usage and you can price your own plans on top. It also covers what the official APIs don't: TikTok, Instagram and X have no public transcript API, and YouTube only gives captions to the video owner.

#### One request, results back

For small jobs, the synchronous endpoint runs the Actor and returns the dataset rows in the same HTTP response (it waits up to 5 minutes):

```bash
curl -X POST "https://api.apify.com/v2/acts/scrape-lads~video-transcript-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://www.tiktok.com/@garyvee/video/7696603359335288078","https://www.youtube.com/shorts/aNI2jv7lBPQ"],"includeSegments":false}'
```

Get your token under **Settings > API & Integrations** in Apify Console, and keep it on your server, never in a browser or mobile app.

#### Python and JavaScript

With the official `apify-client` package (`pip install apify-client` or `npm install apify-client`):

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("scrape-lads/video-transcript-scraper").call(run_input={
    "urls": [
        "https://www.tiktok.com/@garyvee/video/7696603359335288078",
        "https://www.youtube.com/shorts/aNI2jv7lBPQ"
    ],
    "includeSegments": False
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["transcript"])
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrape-lads/video-transcript-scraper').call({
    "urls": [
        "https://www.tiktok.com/@garyvee/video/7696603359335288078",
        "https://www.youtube.com/shorts/aNI2jv7lBPQ"
    ],
    "includeSegments": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(item.transcript));
```

The **API** tab on this page has the same snippets for other languages, with your token filled in.

#### Long jobs: start a run and get a webhook

For bigger batches, start the run with `POST https://api.apify.com/v2/acts/scrape-lads~video-transcript-scraper/runs` and return right away. Add a [webhook](https://docs.apify.com/platform/integrations/webhooks) for `ACTOR.RUN.SUCCEEDED` so Apify calls your server when the run ends, then read the rows from `https://api.apify.com/v2/datasets/<defaultDatasetId>/items`. Add `?format=csv` (or `xlsx`, `jsonl`) to get another format.

#### Handling results and failures in your code

Every video link you send comes back as exactly one row (a profile adds one row per video), so you can match results to your own records by `url`. Check `status` on each row: `success`, `no_transcript` or `failed`. Rows that are not `success` carry an `errorCode` (`invalid_url`, `private_or_removed`, `no_subtitles`, `no_speech`, `too_long`, `budget_reached`) and a readable `message` you can show your user. They are free (`charged: false`), so a bad link from your user costs you nothing.

#### Cost at volume

$2 per 1,000 subtitle transcripts and $5 per 1,000 speech-to-text transcripts (first minute of audio; each extra started minute adds $0.0025), plus a $0.005 start fee per run. Send many links in one run rather than one run per link: you pay the start fee once and the run reads them in parallel (5 at a time by default, up to 20 with `maxConcurrency`). To cap what one run can spend, pass `maxTotalChargeUsd` when you start it (for example `?maxTotalChargeUsd=5`); the run stops cleanly at that amount. Your Apify plan sets how many runs can go at once.

### Run it on a schedule

Save your input as a task, then open **Schedules** in Apify Console and pick how often it runs. Daily on a creator's profile picks up each new video's transcript. Turn on **Only new videos** (`onlyNew`) and each run skips the videos it already gave you, with no row and no charge, so a video is never billed twice. Give each task its own **Watchlist name** to keep separate lists.

To send results somewhere automatically, use the **Integrations** tab: Google Sheets, Slack, Make, Zapier, n8n and webhooks are built in. AI agents such as Claude or ChatGPT can run it as a tool through the [Apify MCP server](https://mcp.apify.com?tools=scrape-lads/video-transcript-scraper).

### Use it with Claude, ChatGPT or Cursor (MCP)

Add this Actor as a tool in Claude, ChatGPT, Cursor, VS Code or any other MCP client. Use this server URL:

```
https://mcp.apify.com?tools=scrape-lads/video-transcript-scraper
```

Sign in with your Apify account when asked. Then ask your agent in plain words, for example:

> Get the transcripts of these TikTok, YouTube and Instagram videos: <video links>

The agent runs this Actor and reads the results for you. Runs are billed to your Apify account at this Actor's prices.

In Claude Code, add it with one command:

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

### Related actors

| Actor | What it does |
| --- | --- |
| [Recipe Extractor](https://apify.com/scrape-lads/recipe-extractor) | Turns cooking videos and recipe pages into structured recipe JSON. |
| [TikTok Scraper Pro](https://apify.com/scrape-lads/tiktok-scraper-pro) | TikTok hashtags, profiles, keyword search, comments and followers. |
| [YouTube Shorts Scraper & Channel Email Finder](https://apify.com/scrape-lads/youtube-scraper) | YouTube Shorts, channel videos and creator contact emails. |
| [Instagram Scraper](https://apify.com/apify/instagram-scraper) | Instagram posts, profiles, hashtags and comments. |
| [Reddit Scraper](https://apify.com/scrape-lads/reddit-scraper) | Reddit posts, comments, search results and users. |

### FAQ, limits and support

**Is it legal to scrape video transcripts?** The actor only reads public videos that anyone can watch without logging in. You are responsible for how you use the data: respect copyright, platform terms and privacy laws such as the GDPR, and don't republish creators' content without permission.

**Which videos can't be transcribed?** Private or deleted videos, age-restricted posts, and Instagram posts with embedding turned off. Music-only videos come back as `no_speech` and are free.

**How accurate is speech-to-text?** It uses Whisper large-v3 turbo, which handles 90+ languages and is very accurate on clear speech. Background music and heavy slang lower accuracy.

**Facebook and Douyin videos?** Public Facebook video links are read here too and billed like any other video. Douyin links need a connection this actor does not have, so use the Douyin Transcript Scraper for those. The Facebook Video Transcript Scraper is the focused version for Facebook.

Found a problem or need a field? Open an **Issue** on the actor page. We fix things fast. For a custom pipeline, such as transcripts sent straight into your database or an AI summary per video, get in touch through the Issues tab.

**Does TikTok, Instagram, YouTube or X have an official API? Why use this instead?** YouTube's Data API only lets video owners download captions, and TikTok, Instagram and X have no public transcript API at all. This Actor reads public subtitles where they exist and transcribes the speech when they do not, for all four platforms in one format.

**What are the alternatives to this Actor?** You can use a browser extension one video at a time, upload files to a paid transcription service, or download and transcribe videos yourself. None of these takes a list of links across platforms. This Actor does, and you pay per transcript.

### Privacy

To see which searches are useful, this Actor sends anonymous run inputs (such as keywords, hashtags and usernames) and a hashed account ID to the developer. Tokens, cookies and proxy settings are never sent. Nothing from your results is collected.

# Actor input Schema

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

TikTok videos, Instagram Reels and video posts, YouTube videos and Shorts, and X (Twitter) posts with a video. Short links (vm.tiktok.com, youtu.be) work too. Direct links to audio or video files (mp3, m4a, wav, mp4, mov, webm, ogg) are transcribed too. One transcript row per video. Provide video URLs, profiles below, or both.

## `profiles` (type: `array`):

Get transcripts for the latest videos of a creator: tiktok.com/@name, instagram.com/name, youtube.com/@channel (add /shorts for the Shorts tab). Instagram serves at most the 12 newest posts without a login.

## `maxVideosPerProfile` (type: `integer`):

How many of the newest videos to transcribe from each profile or channel.

## `datasetId` (type: `string`):

Transcribe the videos listed in another run's dataset, for example the output of a TikTok, Instagram or YouTube scraper. Rows with a url, postUrl, webVideoUrl, permalink, link or shortCode field that points to a supported video are used; other rows are skipped.

## `maxDatasetItems` (type: `integer`):

How many videos to read from that dataset.

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

When to transcribe the audio with Whisper. Subtitle transcripts cost $2 per 1,000 and speech-to-text transcripts $5 per 1,000 (first minute of audio included, then $0.0025 per started minute), at list price.<br><br><b>Fallback</b> (default):the platform's own subtitles when a video has them (TikTok, YouTube), speech-to-text otherwise (always for Instagram and X).<br><b>Replace automatic captions</b>: like Fallback, but videos whose captions are machine-made are transcribed with speech-to-text and billed at the speech-to-text price. In our test of 500 videos, automatic captions missed about 1 meaningful word in 120, and 5% or more of the words in 7% of videos; YouTube's also censor swearing. Captions written by the creator are kept. If speech-to-text fails, you get the captions at the subtitle price.<br><b>Always</b>: speech-to-text for every video, at the speech-to-text price.<br><b>Never</b>: subtitles only; videos without them are skipped for free.

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

Two-letter language code such as en, es or fr. Picks the subtitle track in that language when a video has several, and tells speech-to-text which language is spoken. Leave empty to detect it automatically.

## `includeSegments` (type: `boolean`):

Add the transcript split into segments with start and end times in seconds. Turn off to get the plain text only.

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

Also add the transcript as ready-to-use subtitle text in the srt and/or vtt field of each row, for video editors and players. No extra charge.

## `postedWithinDays` (type: `integer`):

Profile videos only: skip videos older than this many days, for free. Empty or 0 = no limit.

## `minViews` (type: `integer`):

Profile videos only: skip videos with fewer views, for free. Empty or 0 = no minimum.

## `onlyNew` (type: `boolean`):

Skip videos this actor already returned to you in an earlier run, for free: no row and no charge. Turn it on in a scheduled task to get only the new videos each time. Videos that failed are tried again.

## `watchlistName` (type: `string`):

Keeps a separate list of delivered videos under this name, so two scheduled tasks do not skip each other's videos. Empty = one list for your account.

## `resetWatchlist` (type: `boolean`):

Forget the delivered videos of this watchlist before the run, so every video counts as new again.

## `maxAiMinutes` (type: `integer`):

Stop sending videos to speech-to-text once this many minutes of audio have been transcribed in the run. After that, videos that have subtitles still get them at the subtitle price, and videos without come back free with the reason budget_reached. Empty or 0 = no cap.

## `maxSpeechToTextSec` (type: `integer`):

Videos longer than this are not sent to speech-to-text (they still get subtitles when they have them). Protects you from paying for a 3 hour livestream by mistake.

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

How many videos are processed at the same time.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.instagram.com/reel/Dd-VQPnRz0t/"
  ],
  "maxVideosPerProfile": 10,
  "maxDatasetItems": 100,
  "speechToText": "fallback",
  "includeSegments": true,
  "outputFormats": [],
  "onlyNew": false,
  "resetWatchlist": false,
  "maxSpeechToTextSec": 1800,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `transcripts` (type: `string`):

No description

## `fullResults` (type: `string`):

No description

## `runSummary` (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 = {
    "urls": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw",
        "https://www.instagram.com/reel/Dd-VQPnRz0t/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrape-lads/video-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 = { "urls": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw",
        "https://www.instagram.com/reel/Dd-VQPnRz0t/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrape-lads/video-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 '{
  "urls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.instagram.com/reel/Dd-VQPnRz0t/"
  ]
}' |
apify call scrape-lads/video-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrape-lads/video-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/8cadcXefwZDJFQHe3/builds/Yvf9ebNRezAgozl7B/openapi.json
