# Video Transcript Scraper (`muhammetakkurtt/video-transcript-scraper`) Actor

Transcribe TikTok, YouTube, Instagram, Facebook and X videos into timestamped, word-level text. No login. Export to JSON, CSV or Excel for subtitles, content repurposing, AI and SEO.

- **URL**: https://apify.com/muhammetakkurtt/video-transcript-scraper.md
- **Developed by:** [Muhammet Akkurt](https://apify.com/muhammetakkurtt) (community)
- **Categories:** Videos, Social media, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.00 / 1,000 video transcribeds

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

## Video Transcript Scraper — TikTok, YouTube, Instagram, Facebook & X to Text (Word-Level Timestamps)

**Turn any public video into clean, timestamped text.** Video Transcript Scraper is a fast, no-login **video-to-text** tool that generates accurate transcripts from **TikTok, YouTube (videos & Shorts), Instagram (Reels & video posts), Facebook and X/Twitter** — with **word-level timestamps**, timed segments and the detected language. Export to JSON, CSV or Excel and plug straight into subtitles, content repurposing, SEO and AI/LLM pipelines.

No account, no cookies, no API keys, no browser extensions. Paste URLs, click **Run**, get transcripts.

### Why use this video transcript generator?

- **Multi-platform in one Actor** — one tool for TikTok transcripts, YouTube transcripts, Instagram Reel transcripts, Facebook and X/Twitter video transcripts.
- **Word-level timestamps** — every word has its own start/end time (not just per-line), ideal for precise clipping, karaoke-style captions and AI alignment.
- **Full text + timed segments** — get both a ready-to-read transcript and a structured array of timed segments.
- **Rich video metadata** — title, author, duration, thumbnail, view & like counts and publish time where available.
- **No login, no cookies** — works on public videos out of the box.

### Supported platforms

| Platform | What it transcribes | Example URL |
|---|---|---|
| **TikTok** | Video speech → text | `https://www.tiktok.com/@username/video/0000000000000000000` |
| **YouTube** | Videos and **Shorts** | `https://www.youtube.com/watch?v=XXXXXXXXXXX`, `youtu.be/…`, `/shorts/…` |
| **Instagram** | **Reels** and video posts | `https://www.instagram.com/reel/XXXXXXXXXXX/` |
| **Facebook** | Public video posts & reels | `https://www.facebook.com/…/videos/…` |
| **X / Twitter** | Video tweets | `https://x.com/user/status/…` |

Many other video sites work too — if the page has a public video with audio, paste it.

### How to generate a transcript (step by step)

1. Open **Video Transcript Scraper** and click **Try for free**.
2. Paste one or more **video URLs** (one per line).
3. (Optional) Set **Max segments per video** — leave `0` for the full transcript.
4. Press **Start**.
5. Export from the **Dataset** tab as JSON, CSV, Excel or XML.

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `videoUrls` | array | Yes | — | Video URLs to transcribe, one per line. TikTok, YouTube, Instagram, Facebook, X/Twitter and more. |
| `maxSegments` | integer | No | `0` | Maximum transcript segments per video. `0` returns the full transcript. |

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@username/video/0000000000000000000",
    "https://www.youtube.com/watch?v=XXXXXXXXXXX",
    "https://www.instagram.com/reel/XXXXXXXXXXX/"
  ],
  "maxSegments": 0
}
```

### Output — detailed example

One dataset record per video. Every segment carries word-level timings, so you can rebuild captions to the millisecond:

```json
{
  "videoUrl": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
  "platform": "youtube",
  "videoId": "youtube_XXXXXXXXXXX",
  "title": "Example video title",
  "author": "Example channel",
  "durationMs": 213040,
  "thumbnail": "https://.../thumb.jpg",
  "viewCount": 1600000000,
  "likeCount": 18000000,
  "publishedAt": 1255789200,
  "language": "en",
  "segmentCount": 46,
  "text": "We're no strangers to love. You know the rules, and so do I ...",
  "segments": [
    {
      "text": "We're no strangers to love.",
      "start": 18760,
      "end": 22719,
      "language": "en",
      "words": [
        { "text": "We're", "start": 18760, "end": 19020, "space": true },
        { "text": "no",    "start": 19020, "end": 19210, "space": true },
        { "text": "strangers", "start": 19210, "end": 19980, "space": true },
        { "text": "to",    "start": 19980, "end": 20120, "space": true },
        { "text": "love.",  "start": 20120, "end": 22719, "space": false }
      ]
    },
    {
      "text": "You know the rules, and so do I.",
      "start": 22720,
      "end": 26999,
      "language": "en",
      "words": [
        { "text": "You", "start": 22720, "end": 22900, "space": true },
        { "text": "know", "start": 22900, "end": 23180, "space": true }
      ]
    }
  ]
}
```

#### Output fields

| Field | Type | Description |
|---|---|---|
| `videoUrl` | string | The video that was transcribed. |
| `platform` | string | `tiktok`, `youtube`, `instagram`, `facebook` or `twitter`. |
| `videoId` | string | Platform-prefixed video id, e.g. `youtube_XXXXXXXXXXX`. |
| `title` / `author` | string | Video title and author/channel, where available. |
| `durationMs` | number | Video duration in milliseconds. |
| `thumbnail` | string | Thumbnail image URL, where available. |
| `viewCount` / `likeCount` | number | Engagement counts, where available. |
| `publishedAt` | number | Publish time (unix seconds), where available. |
| `language` | string | Detected spoken language (e.g. `en`, `es`), where available. |
| `segmentCount` | number | Number of transcript segments. |
| `text` | string | The full transcript as one string. |
| `segments` | array | Timed segments; each has `text`, `start`, `end` (ms) and `words`. |
| `segments[].words` | array | Word-level timings: `{ text, start, end, space }` (`space` = trailing space follows). |

All start/end times are in **milliseconds**. A video with no detectable speech returns `segmentCount: 0`; a video that can't be processed is reported with an `error` field so the rest of the run continues.

### Use cases

- **Subtitles & captions** — build precise, word-timed SRT/caption workflows and accessible video.
- **Content repurposing** — turn videos into blog posts, newsletters, X threads, show notes and quotes.
- **AI & LLM pipelines** — feed clean transcripts into summarization, RAG, search and analytics.
- **SEO** — make video content indexable and discoverable as text.
- **Social listening & research** — analyze what creators and brands actually say, at scale.

### Free plan limits

Free Apify plan users can try the Actor with trial limits: up to **10 videos per run** and **5 runs per 24 hours** (1 automated/scheduled run per 24 hours). When a limit is reached the run finishes gracefully with a clear message. Paid Apify plans are not affected.

### Integrations

Run on a schedule, trigger from the **Apify API**, or wire the output into **Make, Zapier, Google Sheets, Slack** and **n8n**. Every run's dataset exports as JSON, CSV, Excel or XML.

### Frequently asked questions

#### How do I get a TikTok transcript?

Set `videoUrls` to one or more TikTok video URLs and run. You get the spoken text with word-level timestamps — no TikTok login needed.

#### How do I get a YouTube transcript?

Paste YouTube video or Shorts URLs. Videos with captions return instantly; videos without captions are transcribed from the audio.

#### Does it work for Instagram Reels, Facebook and X/Twitter?

Yes. Paste Reel, Facebook video or X/Twitter video URLs the same way.

#### Does it provide timestamps?

Yes — both segment-level and **word-level** timestamps, in milliseconds.

#### Which languages are supported?

Transcripts are produced in the video's spoken language; the detected language is returned where available.

#### Do I need an account, cookies or API keys?

No. The Actor transcribes public videos with no login.

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

It returns `segmentCount: 0`. Unprocessable videos are flagged with an `error` field and the run continues.

#### How do I export the transcript?

From the run's **Dataset** tab, or via the Apify API, as JSON, CSV, Excel or XML.

#### Are there free plan limits?

Free Apify plan users can transcribe up to 10 videos per run and 5 runs per 24 hours. Paid plans have no limit.

#### Is this allowed?

Transcribe only public videos you have a lawful basis to process, and use the output in line with each platform's terms and applicable copyright and data-protection laws. See **Responsible use**.

### Responsible use

This Actor transcribes public video audio for legitimate uses such as accessibility, content repurposing, SEO and research. Respect creators' rights and do not use transcripts to infringe copyright; comply with each platform's terms and the laws that apply to you.

***

**Video Transcript Scraper** is the all-in-one **video-to-text** and **transcript generator** for **TikTok, YouTube, Instagram, Facebook and X** — accurate, **word-level timestamped** transcripts for subtitles, content repurposing, AI and SEO, with no login required.

# Actor input Schema

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

Video URLs to transcribe, one per line. Supports TikTok, YouTube, Instagram, Facebook, X/Twitter and many other sites (post, reel, watch or short links).

## `maxSegments` (type: `integer`):

Maximum number of transcript segments to collect per video. Use 0 for the full transcript.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "maxSegments": 0
}
```

# Actor output Schema

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

Transcribed videos with metadata and timed, word-level segments.

# 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": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammetakkurtt/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 = { "videoUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"] }

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

```

## MCP server setup

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