YouTube Transcript Scraper | Subtitles, Timestamps & Metadata avatar

YouTube Transcript Scraper | Subtitles, Timestamps & Metadata

Pricing

from $6.00 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper | Subtitles, Timestamps & Metadata

YouTube Transcript Scraper | Subtitles, Timestamps & Metadata

Transcripts for any list of YouTube videos or the top videos of a keyword: plain text + timestamped segments, language (human or auto), all available languages, plus title, channel, views, length. $6 per 1,000; no captions = not charged. No API key, no login. For creators, marketers & AI/RAG.

Pricing

from $6.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

Mr Zack

Mr Zack

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

YouTube Transcript Scraper — Subtitles, Timestamps & Video Metadata

Transcripts for any list of YouTube videos — or for the top videos of a keyword — in one run, $6 per 1,000. Paste URLs, Shorts links, youtu.be links or IDs and get the full transcript as plain text plus timestamped segments (start, duration, text), the language used, whether it is human or auto-generated, every other language available, and the video's title, channel, length, views, keywords and thumbnail. Type a search query instead and the Actor finds the videos for you (searchQuery + maxVideos).

Videos without captions, private/removed videos, duplicates and search-listing rows are never charged. No YouTube API key, no login, no cookies, no browser.

Who uses this

  • Content creators & agencies repurposing videos into blog posts, newsletters, shorts scripts and SEO pages.
  • Marketers & researchers mining competitor channels, reviews and interviews at scale.
  • AI / RAG builders feeding LLMs with clean, segmented transcripts (works directly from the Apify MCP server).
  • Educators, journalists, analysts who need quotable, timestamped text instead of re-watching hours of video.

Input

FieldDefaultNotes
videoUrls2 demo videosOne per line: watch / shorts / embed / youtu.be URLs or bare IDs.
searchQueryTranscribe the top videos for a keyword instead of (or in addition to) URLs.
channelUrlsNew in 0.0.3. Whole channels: @handle, /channel/UC…, /c/…, /user/… — newest videos first.
playlistUrlsNew in 0.0.3. Every video of a playlist (URL with list= or a bare PL…/UU… id).
maxVideos20Cap per keyword search / channel / playlist (max 500).
languages["en"]Preference order; prefix match (enen-GB). Use ["all"] to get every caption track.
oneRowPerLanguagefalseNew in 0.0.3. One transcript row for each listed language that exists (e.g. ["en","es","id"] → up to 3 rows per video). Automatically on with ["all"].
outputFormats[]New in 0.0.3. Add ready-to-save subtitle files as text fields: srt and/or vtt.
preferManualtrueHuman captions over auto-generated when both exist.
fallbackToAnyLanguagetrueIf no preferred language, take the first available track.
includeSegmentstruesegments[] with start, duration (seconds), text.
includeSearchRowsfalseAlso output the ranked search listing (free rows, type: search-result).

Output — one row per video

FieldExample
videoId, url, title, channel, channelId, channelUrlkJQP7kiw5Fk, Luis Fonsi - Despacito ft. Daddy Yankee, LuisFonsiVEVO
lengthSeconds, viewCount, publishDate, category, keywords[], thumbnailUrl282, 9116018813, …
statusok | no-captions | failed (only ok rows are charged)
language, languageName, isAutoGenerateden, English - en, false
availableLanguages[]["en","en-US","ja","es","es-ES","ko (auto)"]
transcriptfull plain text
segments[]{ "start": 0.433, "duration": 27.1, "text": "…" }
wordCount, charCount, segmentCount, source, scrapedAt653, 2990, 90, direct
srt, vtt (only with outputFormats)1\n00:00:00,433 --> 00:00:27,533\n… / WEBVTT\n\n00:00:00.433 --> …

Example output (real row, 6 Sep 2026)

{
"videoId": "Ks-_Mh1QhMc",
"url": "https://www.youtube.com/watch?v=Ks-_Mh1QhMc",
"title": "Your Body Language May Shape Who You Are | Amy Cuddy | TED",
"channel": "TED", "lengthSeconds": 1263, "viewCount": 29037137,
"status": "ok", "language": "en", "isAutoGenerated": false,
"availableLanguages": ["sq", "ar", "hy", "az", "bg", "my", "…53 total"],
"transcript": "So I want to start by offering you a free no-tech life hack…",
"segments": [{ "start": 12.9, "duration": 3.1, "text": "So I want to start by offering you" }],
"wordCount": 3210, "segmentCount": 428
}

Default input (2 videos) costs $0.013 and finishes in ~3 seconds; 100 videos ≈ $0.60 in under a minute.

Pricing

EventPrice
Transcript$0.006 ($6 / 1,000 videos)
Actor start$0.001

One row = one transcript = one charge, so languages: ["all"] on a video with 26 caption tracks bills 26 transcripts — use oneRowPerLanguage with an explicit list when you only need a few. Platform usage included. Not charged: videos without captions, unavailable/private videos, duplicates, videos where none of your languages exist (with fallbackToAnyLanguage: false), and search-result rows.

Reliability

YouTube throttles datacenter IPs in waves. This Actor uses YouTube's own mobile player endpoint (the one the Android app uses) and, when YouTube still blocks a request, transparently retries through a residential fallback path — so runs keep succeeding instead of returning empty datasets. If every request is blocked and the fallback is down, the run fails loudly with nothing charged beyond the start fee.

Schedule & integrate

Track a channel or topic: set searchQuery, schedule the Actor daily (Console → Schedules) and push new transcripts to Google Sheets, Notion, Slack or your vector DB via Integrations.

API & AI agents (MCP)

curl -X POST "https://api.apify.com/v2/acts/tactful_anvil~youtube-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videoUrls":["https://www.youtube.com/watch?v=Ks-_Mh1QhMc"],"languages":["en"],"includeSegments":false}'

Add it to Claude, Cursor or ChatGPT through the Apify MCP server (https://mcp.apify.com) and ask "summarize the last 10 videos about airbnb investing" — the agent gets clean transcripts back. Python: ApifyClient(token).actor("tactful_anvil/youtube-transcript-scraper").call(run_input={...}).

Found this useful? Bookmark & review

A bookmark or a short review helps other creators find this Actor — and tells me what to add next (channel mode, SRT/VTT export, translation tracks?). Issues tab is open; I answer within 24 h.

Changelog

  • 0.0.4 (8 Sep 2026) — billing hardening: a charging hiccup can no longer abort a run that already returned transcripts (rows are delivered either way).
  • 0.0.3 (8 Sep 2026)channel mode (channelUrls, newest maxVideos videos per channel) and playlist mode (playlistUrls); one row per language (oneRowPerLanguage, or languages: ["all"] for every track — 26 languages on a MrBeast video in one run); SRT / VTT output fields (outputFormats); Google "sorry"/429 pages are now detected as blocks (never charged, relay retry) instead of being parsed as a 1-line transcript. No existing field changed.
  • 0.1 (6 Sep 2026) — launch: URL/ID + search mode, language preference with manual-first, timestamped segments, video metadata, residential fallback.