# Video Transcript Scraper: Youtube, X, Facebook, Tiktok, etc. (`invideoiq/video-transcript-scraper`) Actor

Scrapes transcripts from online video/audio content on multiple plateforms (Youtube, X, ..) in any available language. It delivers outputs in both JSON and LLM-ready formats, making it ideal for analytics, and AI-based applications. Perfect for research and building intelligent conversational agents

- **URL**: https://apify.com/invideoiq/video-transcript-scraper.md
- **Developed by:** [InVideoIQ](https://apify.com/invideoiq) (community)
- **Categories:** AI, Automation, Social media
- **Stats:** 1,546 total users, 11 monthly users, 100.0% runs succeeded, 119 bookmarks
- **User rating**: 4.39 out of 5 stars

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#rental-actors

## 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

### 🎬 Video Transcript Scraper: Extract Subtitles and Captions From Any Video

Extract clean, AI-ready transcripts and captions from videos across **YouTube, X (Twitter), TikTok, Facebook, Dailymotion, Vimeo, Loom**, and more. **Video Transcript Scraper** pulls existing subtitle tracks — both manually added and auto-generated — and returns timestamped transcripts with rich video metadata.

Just paste a video URL and get structured data back. No coding required.

**💰 $19.99/month rental · 🌍 Multi-language · ⚡ Fast batch processing**

***

### ✨ What is Video Transcript Scraper?

**Video Transcript Scraper** extracts subtitles and captions from online videos, giving you clean transcripts ready for AI applications, data analytics, and content workflows.

- **Multi-platform support** — YouTube, X (Twitter), TikTok, Facebook, Dailymotion, Vimeo, Loom, and more
- **Timestamped transcripts** — Every word with precise start/end times, ideal for indexing and AI models
- **Full video metadata** — Titles, descriptions, thumbnails, duration, views, likes, channel info, and publish dates
- **LLM-ready output** — Pre-cleaned data ready for RAG pipelines, NLP, sentiment analysis, or any ML workflow
- **Multi-language support** — Specify a language code or let the actor return the default transcript language
- **Batch processing** — Process multiple videos from different platforms in a single run

> **Note**: This actor extracts existing subtitle tracks. Some videos do not provide subtitles/captions. For those cases, use our speech-to-text companion actor: [Video Transcriber](https://apify.com/invideoiq/video-transcriber).

***

### 📊 What Data Can You Extract From Video Transcripts?

| Field | Description |
|-------|-------------|
| **title** | Video title |
| **description** | Video description |
| **duration** | Video length |
| **thumbnail** | Thumbnail image URL |
| **like\_count** | Number of likes (YouTube only) |
| **view\_count** | Number of views |
| **published\_date** | Publish date |
| **channel** | Channel name (YouTube only) |
| **channel\_url** | Channel URL (YouTube only) |
| **available\_languages** | List of available transcript languages (YouTube only) |
| **selected\_language** | Language of the returned transcript (YouTube only) |
| **text** | Full transcript as a single plain string |
| **transcript** | Timestamped segments with start/end times |

You can download the dataset extracted by Video Transcript Scraper in various formats such as **JSON, CSV, Excel, or HTML** directly from the Apify dashboard.

***

### 🔗 Supported Video Platforms

| Platform | Notes |
|----------|-------|
| **YouTube** | Long-form videos, Shorts, auto-generated and manual captions |
| **X (Twitter)** | Paste the tweet URL containing the video |
| **TikTok** | Public videos with available captions |
| **Facebook** | Public videos |
| **Dailymotion** | Full support |
| **Vimeo** | Full support |
| **Loom** | Full support |
| **Rumble** | Full support |

**Important**: Instagram is not supported in this actor. To transcribe Instagram videos, use [Video Transcriber](https://apify.com/invideoiq/video-transcriber).

The tool may also work on other platforms not listed here, like media websites, though they have not been as thoroughly tested.

***

### 🛠️ How To Extract Video Transcripts Using Video Transcript Scraper

1. Go to [Video Transcript Scraper](https://apify.com/invideoiq/video-transcript-scraper) on Apify
2. Click **"Try for free"**
3. Paste one or more video URLs into the `video_urls` field — you can mix platforms in a single run
4. *(Optional)* Set a `language` code (e.g. `"en"`, `"fr"`) to request a specific transcript language
5. Click **"Start"** and wait for the run to finish
6. Download your transcripts in **JSON, CSV, Excel, or HTML** from the dataset tab

#### Run it your way

Because this is an Apify Actor, you also get:

- **API access**: Call it programmatically from any language — check the [API tab](https://apify.com/invideoiq/video-transcript-scraper/api) for ready-made code examples
- **Scheduling**: Set up recurring runs to monitor new video content automatically
- **Integrations**: Connect to Zapier, Make, Google Sheets, webhooks, and more
- **Monitoring**: Track run history, costs, and results from the Apify dashboard

***

### 📥 Input

| Parameter | Required | Description |
|-----------|----------|-------------|
| `video_urls` | Yes | Array of video URLs. Mix platforms freely in a single run |
| `language` | No | Language code (`"en"`, `"fr"`) to request a specific transcript language. Leave blank for default |

#### Advanced YouTube settings (rarely needed)

| Parameter | Description |
|-----------|-------------|
| `proxy_country` | Two-letter country code for YouTube proxy (default: `US`). Auto-falls back to US if unavailable |
| `get_yt_original_metadata` | Fetch original (non-localized) title and description via YouTube Data API |
| `youtube_api_key` | Your own YouTube Data API v3 key. Optional — a shared default key is provided. See Google's [guide to registering an application](https://developers.google.com/youtube/registering_an_application) |

#### Input Example

```json
{
  "video_urls": ["https://www.youtube.com/watch?v=example1"],
  "language": "en"
}
```

***

### 📤 Output Example

```json
[
  {
    "title": "Video Title 1",
    "description": "Video Description 1",
    "duration": "180",
    "thumbnail": "https://example.com/thumbnail.jpg",
    "like_count": 200,
    "view_count": 1000,
    "published_date": "2025-08-10",
    "channel": "Example",
    "channel_url": "https://example.com/video-id=example",
    "channel_id": "A123456789",
    "available_languages": ["English", "French"],
    "selected_language": "English",
    "text": "Hello, world! Welcome to our channel.",
    "transcript": [
      { "text": "Hello, world!", "start": 0.0, "end": 1.5 },
      { "text": "Welcome to our channel.", "start": 1.5, "end": 3.0 }
    ]
  }
]
```

> **Note**: The fields `like_count`, `channel`, `channel_url`, `available_languages`, and `selected_language` are only available for YouTube videos.

***

### 🚀 Quick Start Code Examples

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/invideoiq~video-transcript-scraper/run-sync?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"video_urls": ["https://www.youtube.com/watch?v=vl6jn-DdafM", "https://www.youtube.com/watch?v=4czjS9h4Fpg"]}'
```

#### Python

```python
import requests
import json

url = "https://api.apify.com/v2/acts/invideoiq~video-transcript-scraper/run-sync?token=YOUR_TOKEN"
data = {"video_urls": ["https://www.youtube.com/watch?v=vl6jn-DdafM", "https://www.youtube.com/watch?v=4czjS9h4Fpg"]}
response = requests.post(url, json=data, headers={"Content-Type": "application/json"})
print(json.dumps(response.json(), indent=4, ensure_ascii=False))
```

#### JavaScript

```javascript
const data = {
  video_urls: [
    "https://www.youtube.com/watch?v=vl6jn-DdafM",
    "https://www.youtube.com/watch?v=4czjS9h4Fpg"
  ]
};

fetch("https://apify.com/service/https://api.apify.com/v2/acts/invideoiq~video-transcript-scraper/run-sync?token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.error("Error:", error));
```

***

### 💰 How Much Does Video Transcript Scraper Cost?

**$19.99/month rental** + Apify platform usage. The monthly rental fee is subtracted from your prepaid usage. You also pay for platform compute, which gets cheaper on higher Apify subscription plans.

[Learn more about rental pricing](https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors)

On the **Apify free plan**, you get **$5 of platform usage credits per month** — enough to test the actor and explore its capabilities before committing to a subscription.

***

### 📈 Use Cases for Video Transcript Extraction

- **RAG pipelines and AI agents** — Feed video transcripts into retrieval-augmented generation systems for LLM-powered search and Q\&A
- **Content repurposing** — Turn YouTube videos, tweets, and TikToks into blog posts, newsletters, or social media threads
- **Market research** — Monitor what competitors, influencers, or thought leaders say across video platforms at scale
- **Accessibility and compliance** — Generate text versions of video content for accessibility requirements
- **Media monitoring** — Track brand mentions across video platforms
- **Dataset building** — Build training datasets from video content across multiple platforms
- **Sentiment analysis** — Process transcripts through NLP pipelines for opinion mining and brand perception tracking

***

### ❓ FAQ

#### Is it legal to extract video transcripts?

This actor extracts publicly available subtitle tracks and does not access private user data such as email addresses, gender, or location — only information that users and platforms have chosen to share publicly. However, results may contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not extract personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

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

This actor relies on embedded subtitle tracks (manual or auto-generated). If no subtitles exist, the transcript cannot be extracted. For videos without captions, use our speech-to-text companion actor: [Video Transcriber](https://apify.com/invideoiq/video-transcriber).

#### Can I specify a transcript language?

Yes. Pass a language code like `"en"` or `"fr"` in the `language` field. If that language isn't available for a given video, you'll get a clear message. When in doubt, leave it empty and the actor returns the default language. For YouTube, check the `available_languages` field in the output.

#### Why is my URL returning an error?

Make sure the video URL is complete and valid — the actor supports only direct links from YouTube, X (tweets), TikTok, Facebook, Vimeo, Dailymotion, and Loom. Shortened, embedded, or private URLs are not supported.

#### What is the difference between Video Transcript Scraper and Video Transcript Extractor?

Both extract caption-based transcripts with the same output format. **Video Transcript Scraper** uses a rental pricing model ($19.99/month), while **Video Transcript Extractor** uses pay-per-result pricing ($10/1,000 results). Choose whichever model fits your usage pattern.

***

### 🔗 Related Actors

Need a different pricing model or workflow? Check the rest of the suite:

- [Video Transcript Extractor](https://apify.com/invideoiq/video-transcript-extractor) — Pay per result, **$10/1,000 results**. Best if you want transcript retrieval plus rich metadata without a rental plan.
- [Video Transcriber](https://apify.com/invideoiq/video-transcriber) — Speech-to-text for videos that do not already have captions or subtitles.
- [AI Video Data Extractor](https://apify.com/invideoiq/ai-video-data-extractor) — AI-powered structured data extraction. Define a JSON schema and get back custom structured data from any video.

***

### 💬 Support

Found a bug or have a feature request? [Open an issue](https://apify.com/invideoiq/video-transcript-scraper/issues) and we'll get back to you.

Need a custom workflow or integration? Reach out through the [Issues tab](https://apify.com/invideoiq/video-transcript-scraper/issues) — we're happy to help tailor the actor to your use case.

# Actor input Schema

## `video_urls` (type: `array`):

Array of video URLs (YouTube, X/Twitter, Dailymotion, etc.). If provided, overrides video\_url.

## `video_url` (type: `string`):

Deprecated: Use video\_urls (array) instead. Single URL for backwards compatibility.

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

Languages of the subtitles to download, e.g. "en", "fr", etc. Leave blank to get the default language.

## `best_effort` (type: `boolean`):

If true, the actor will get the metadata even if transcript is unavailable

## `proxy_country` (type: `string`):

Select the proxy country

## `get_yt_original_metadata` (type: `boolean`):

Youtube depending on the location translates some metadata like title and description. If this parameter is enabled, the actor will get the original metadata of the video

## `youtube_api_key` (type: `string`):

Getting original metadata from Youtube requires a YouTube Data API Key. If you don't have one, we provide one for you in the Actor's code, however, Youtube limits an API key to 10000 requests a day and therefore it's first come first serve. So we encourage you to get your own API Key. You can get one for free: https://developers.google.com/youtube/registering\_an\_application

## Actor input object example

```json
{
  "video_urls": [
    "https://www.youtube.com/watch?v=vl6jn-DdafM"
  ],
  "video_url": "https://www.youtube.com/watch?v=vl6jn-DdafM",
  "best_effort": false,
  "proxy_country": "US",
  "get_yt_original_metadata": false
}
```

# 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 = {
    "video_urls": [
        "https://www.youtube.com/watch?v=vl6jn-DdafM"
    ],
    "video_url": "https://www.youtube.com/watch?v=vl6jn-DdafM",
    "language": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("invideoiq/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 = {
    "video_urls": ["https://www.youtube.com/watch?v=vl6jn-DdafM"],
    "video_url": "https://www.youtube.com/watch?v=vl6jn-DdafM",
    "language": "",
}

# Run the Actor and wait for it to finish
run = client.actor("invideoiq/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 '{
  "video_urls": [
    "https://www.youtube.com/watch?v=vl6jn-DdafM"
  ],
  "video_url": "https://www.youtube.com/watch?v=vl6jn-DdafM",
  "language": ""
}' |
apify call invideoiq/video-transcript-scraper --silent --output-dataset

```

## MCP server setup

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