YouTube Transcript & Subtitle Scraper API — Captions + Metadata avatar

YouTube Transcript & Subtitle Scraper API — Captions + Metadata

Pricing

from $8.00 / 1,000 transcripts

Go to Apify Store
YouTube Transcript & Subtitle Scraper API — Captions + Metadata

YouTube Transcript & Subtitle Scraper API — Captions + Metadata

Extract YouTube transcripts, subtitles, and captions with timestamps plus video metadata (title, channel, views, duration). For RAG, analysis, and content workflows. No official API key needed.

Pricing

from $8.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Scraper — Captions, Subtitles & Metadata

YouTube Transcript Scraper is an Apify actor that extracts the full transcript (captions/subtitles) — with per-line timestamps — from any public YouTube video, plus the video's metadata (title, channel, view count, duration, publish date, description, thumbnail) and every caption language available for it. No official API key required.

Use it to feed transcripts into a RAG pipeline or LLM summarizer, build searchable video archives, generate subtitles/blog posts from spoken content, monitor a channel's talking points, or bulk-export captions for research — exported to JSON, CSV, or Excel.

Table of contents

What the YouTube Transcript Scraper does

  • 📝 Full transcript with timestamps — every caption line as {text, start, duration}, plus a transcript_text string (one caption per line) ready for an LLM prompt.
  • 🌐 Language selection — pick a caption language code (en, es, ja, …) and prefer human-made captions over auto-generated ones when both exist.
  • 🎬 Video metadata included — title, channel name/ID, duration, publish date, view count, description, and thumbnail URL, in the same row as the transcript.
  • 🗣️ Available-languages list — every caption track YouTube offers for the video (code, name, human vs. auto-generated), so you know what else you could pull.
  • HTTP-only, no anti-bot browser tier — no login, no CAPTCHA solving; the actor replicates the same InnerTube requests the YouTube web/app player itself makes.

How to scrape YouTube transcripts

  1. Click Try for free and open the actor.
  2. Add one or more video_urls — full watch URLs, youtu.be links, Shorts/embed links, or bare 11-character video IDs, in any mix.
  3. Optionally set language (e.g. en) — leave empty to use the video's default caption track.
  4. Toggle prefer_manual (default on) to prefer human-made captions over auto-generated ones when a video has both for your chosen language.
  5. Click Start and watch rows stream into the dataset — one row per video.
  6. Export as JSON, CSV, or Excel, or pull from the Apify API.

Single video, default (English track if present, human captions preferred):

{
"video_urls": ["dQw4w9WgXcQ"]
}

Multiple videos, explicit language:

{
"video_urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/9bZkp7q19f0"
],
"language": "en"
}

Prefer auto-generated captions over manual ones, capped to 5 videos this run:

{
"video_urls": ["dQw4w9WgXcQ", "9bZkp7q19f0", "kJQP7kiw5Fk"],
"prefer_manual": false,
"max_records": 5
}

YouTube Transcript Scraper input

FieldTypeDefaultDescription
video_urlsstring[]YouTube video URLs or 11-character IDs. Accepts watch?v=…, youtu.be/…, /shorts/…, /embed/…, or a bare ID. Required — at least one valid video.
languagestring"" (video default)Preferred caption language code, e.g. en, es, ja.
prefer_manualbooleantrueWhen both human and auto-generated captions exist for the chosen language, pick the human ones.
max_recordsintegerCap the number of videos processed this run.
proxyobjectApify Proxy configuration. Residential recommended at volume — see Recommended proxies.

What data you get

One row per requested video. Sample from a real local run (dQw4w9WgXcQ, trimmed for length):

{
"video_id": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"scraped_at": "2026-07-18T09:03:17.597050+00:00",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channel_name": "Rick Astley",
"duration_seconds": 213,
"published_at": "2009-10-24T23:57:33-07:00",
"view_count": 1793953812,
"description": "The official video for “Never Gonna Give You Up” by Rick Astley. ...",
"thumbnail_url": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/sddefault.webp",
"language": "en",
"is_generated": false,
"transcript_text": "[♪♪♪]\n♪ We're no strangers to love ♪\n♪ You know the rules and so do I ♪\n...",
"transcript_segments": "[{\"text\": \"[♪♪♪]\", \"start\": 1.36, \"duration\": 1.68}, {\"text\": \"♪ We're no strangers to love ♪\", \"start\": 18.64, \"duration\": 3.24}, ...]",
"available_languages": "[{\"code\": \"en\", \"name\": \"English\", \"is_generated\": false}, {\"code\": \"en\", \"name\": \"English (auto-generated)\", \"is_generated\": true}, {\"code\": \"de-DE\", \"name\": \"German (Germany)\", \"is_generated\": false}, {\"code\": \"ja\", \"name\": \"Japanese\", \"is_generated\": false}, {\"code\": \"pt-BR\", \"name\": \"Portuguese (Brazil)\", \"is_generated\": false}, {\"code\": \"es-419\", \"name\": \"Spanish (Latin America)\", \"is_generated\": false}]",
"error": null
}
FieldDescription
video_id / urlThe normalized 11-character video ID and its canonical watch URL.
title / channel_id / channel_nameVideo title and uploading channel's ID/name.
duration_seconds / published_at / view_countVideo length, publish timestamp, and view count at scrape time.
description / thumbnail_urlFull video description and a thumbnail image URL.
language / is_generatedThe caption track actually delivered — its language code and whether it's auto-generated (true) or human-made (false). Note: transcript_text is machine-generated when is_generated is true — expect the usual auto-caption quirks (missing punctuation, mis-heard words).
transcript_textThe full transcript as one string, one caption per line (newline-separated) — ready to paste into an LLM prompt.
transcript_segmentsJSON array of {text, start, duration} per caption line, for timestamp-accurate use (e.g. jump-to-timestamp links, subtitle files).
available_languagesJSON array of every caption track YouTube offers for the video (code, name, is_generated), whether or not you requested it.
errornull on success; otherwise a reason the row has no transcript (blocked fetch, no captions, no track for the requested language, etc.) — the row is still delivered, just unbilled (see Pricing).
scraped_atCapture timestamp (UTC ISO 8601).

Pricing

This actor uses pay-per-event pricing — you pay for delivered transcripts, not for time. Pricing below is provisional until Console monetization is finalized (see the Monetization tab for current live pricing).

EventUSDPer 1,000
Actor start (per run)$0.001
Transcript scraped (transcript)$0.008$8
Typical runCost
1 video~$0.009
10 videos~$0.081
100 videos~$0.801

A "transcript" event is charged only for a video that actually yields a transcript. Videos that fail (blocked, no captions available, no track for the requested language) are still delivered as rows — flagged via error — but are never charged.

YouTube rate-limits and can throttle datacenter IPs once you scrape at volume. Apify Proxy (residential) works out of the box under Proxy configuration in the input.

If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for scale, we use DataImpulse — pay-as-you-go IPs with per-country targeting and no monthly minimum — recommended for your own scrapers too:

👉 Get DataImpulse proxies (referral link)

Why this YouTube Transcript Scraper

  • Transcript + metadata + language list in one call — no chaining a separate metadata scraper and a separate captions tool.
  • No anti-bot browser tax — HTTP-only, no browser, no CAPTCHA solving, so runs are fast and cheap as long as requests stay unblocked.
  • No official API key needed — the actor replicates the same InnerTube requests the YouTube web/app player itself makes; there's no public "get me a transcript" API to authenticate against.
  • Validated output — every row is Pydantic-validated before it's pushed; failed videos are flagged via error, never silently dropped or shipped with garbage fields.
  • Only successful transcripts are billed — a blocked or caption-less video still shows up in your dataset, but you don't pay for it.
  • Open source — the underlying youtube-transcript-scraper Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

FAQ

Is this the official YouTube API? No — YouTube/Google do not offer a public API for fetching caption text. This actor calls the same InnerTube endpoints (/youtubei/v1/player, /api/timedtext) that the youtube.com web player and YouTube apps call when a human plays the video and captions render.

Do I need a proxy? Not for occasional single-video use. At volume, YouTube can start throttling or blocking a shared datacenter IP — a residential proxy (Apify Proxy or your own, see Recommended proxies) keeps larger runs reliable.

Why did some videos come back with no transcript? Common reasons, all surfaced in the error field: the video has no captions at all, no track exists for your requested language, or the request was rate-limited/blocked (retry, or add a proxy).

Can I get auto-generated captions specifically? Yes — set prefer_manual to false. If a video has no human captions at all, auto-generated ones are used regardless of this setting whenever they're the only track available.

What is transcript_segments for? It's the same transcript as transcript_text, but split into {text, start, duration} objects with second-accurate timestamps — useful for jump-to-timestamp links, building .srt/.vtt subtitle files, or aligning quotes to video time.

Is scraping YouTube transcripts legal? This actor collects only publicly available caption text and metadata that YouTube itself displays to any viewer — no private data, no login required. You are responsible for complying with YouTube's Terms of Service and applicable law for your use case (e.g. attribution, fair use, copyright of the underlying spoken content).

Rate this actor ⭐

If the YouTube Transcript Scraper saved you time, please leave a review on its Apify Store page — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's Issues tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

Building a content-intelligence or research pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.