Video Transcript Scraper

Extract normalized transcripts, timestamped segments, and public metadata from mixed YouTube, TikTok, Instagram, and Facebook video URLs.

Data fields

FieldTypeDescription
inputUrlstringValue exported as inputUrl.
canonicalUrlstring | nullValue exported as canonicalUrl.
platformstringValue exported as platform.
videoIdstring | nullValue exported as videoId.
titlestring | nullValue exported as title.
authorNamestring | nullValue exported as authorName.
languagestring | nullValue exported as language.
transcriptTextstring | nullValue exported as transcriptText.

Input preview

videoUrlsPublic video URLs *
preferredLanguagePreferred language
includeTimestampsInclude timestamped segments
includeMetadataInclude public video metadata
maxVideosMaximum videos
maxRetriesMaximum retries

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract transcripts from public YouTube, TikTok, Instagram, and Facebook videos in one run. Send a mixed list of video URLs and receive normalized transcript text, timestamped segments, language, video metadata, and clear per-video status rows.

What you can export

  • Full transcript text for public videos with accessible captions or speech
  • Timestamped transcript segments
  • Platform, canonical URL, video ID, title, author, duration, thumbnail, and caption when public
  • Stable success/failure status and error details
  • Original platform-specific fields in sourceData

Input example

{
  "videoUrls": [
    { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
    { "url": "https://www.tiktok.com/@scout2015/video/6718335390845095173" }
  ],
  "preferredLanguage": "en",
  "includeTimestamps": true,
  "includeMetadata": true,
  "maxVideos": 2
}

Output example

{
  "inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "canonicalUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "platform": "youtube",
  "videoId": "dQw4w9WgXcQ",
  "title": "Video title",
  "authorName": "Channel name",
  "language": "en",
  "transcriptText": "Transcript text...",
  "segments": [{ "text": "Transcript text", "startSeconds": 0, "endSeconds": 2.4, "durationSeconds": 2.4 }],
  "durationSeconds": 213,
  "thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
  "caption": null,
  "status": "succeeded",
  "errorMessage": null,
  "scrapedAt": "2026-09-06T00:00:00.000Z",
  "sourceData": {}
}

Input settings

Field Description
videoUrls Public YouTube, TikTok, Instagram Reel/video, or Facebook Reel/video URLs.
preferredLanguage Preferred caption or speech language code.
includeTimestamps Include segment timing when available.
includeMetadata Include public title, author, duration, thumbnail, and caption.
maxVideos Maximum unique URLs to process (1–5) within the shared run deadline.
maxRetries Maximum retries (0–5) for transient timeout, connection, rate-limit, and 5xx failures.
proxyConfiguration Optional Apify Proxy settings.

Who is it for?

  • AI and data teams building RAG, semantic search, or media-monitoring pipelines
  • Researchers comparing video narratives across social platforms
  • Content teams creating summaries, subtitles, topic indexes, and editorial briefs
  • Developers who need one stable schema instead of platform-specific integrations

Use cases

  • Feed mixed social-video transcripts into RAG or search pipelines
  • Monitor creators across several platforms
  • Create subtitles, summaries, topic indexes, and content briefs
  • Export timestamped quotes for research and editorial review

Tips and limits

  • Use direct public video URLs, not profile or channel pages.
  • Private, deleted, age-restricted, geo-restricted, or silent videos may return failed rows.
  • Metadata and timestamp availability varies by platform and public source.
  • Keep the first run small, then increase maxVideos after confirming the source URLs work.

API usage

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~video-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videoUrls":[{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}],"maxVideos":1}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/video-transcript-scraper').call({
  videoUrls: [{ url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' }],
  maxVideos: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/video-transcript-scraper').call(run_input={
    'videoUrls': [{'url': 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'}],
    'maxVideos': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

MCP and AI agents

Connect through Apify MCP and expose fetch_cat/video-transcript-scraper to your agent.

claude mcp add apify --transport http "https://mcp.apify.com/?tools=fetch_cat/video-transcript-scraper"
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/video-transcript-scraper"
    }
  }
}

Example prompts:

  • “Extract timestamped transcripts from these three public video URLs.”
  • “Summarize the main themes and cite the source URL for each transcript.”

Support

Open an issue from the Actor's Apify Store page with a public example URL, expected result, and run ID. Do not include private videos, credentials, cookies, or personal data.

Common questions

Questions and answers reused from the canonical actor README.

Does it translate transcripts?

No. preferredLanguage selects an available caption or speech-language route; it does not translate text.

Are failed videos charged as transcripts?

No. The per-transcript event is charged only when transcript text is returned.

Can one run contain different platforms?

Yes. Mixed URL batches are the main purpose of this Actor.