YouTube Transcript Scraper — Captions, Subtitles & SRT/VTT avatar

YouTube Transcript Scraper — Captions, Subtitles & SRT/VTT

Pricing

from $2.50 / 1,000 results

Go to Apify Store
YouTube Transcript Scraper — Captions, Subtitles & SRT/VTT

YouTube Transcript Scraper — Captions, Subtitles & SRT/VTT

YouTube transcript scraper: captions/subtitles as text, SRT or VTT. No login/API key. Some videos may be blocked by YouTube bot checks — those are not charged. Open Input → leave defaults → Start (1 YouTube URL): https://console.apify.com/actors/CAjnvsDVaGpflK9ae/input

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

naoki anzai

naoki anzai

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Bulk API

What you get: one row per YouTube video with the caption language, whether captions are auto-generated, timed segments, the joined fullText, and an optional SRT/VTT/text copy.

Sample output from a real run (2026-10-18, the JSON below: 1 video):

videoTitlestatuslanguageisAutoGeneratedsegmentCountfullText (start)
Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)okenfalse61"[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ …"

That run cost $0.00255 (actor start $0.00005 + 1 row $0.0025). When YouTube returns no caption track for a video, its row comes back with status: "error" and an errorCode (for example captions_not_found) instead of a transcript.

Known limitation: YouTube bot checks. YouTube sometimes answers requests from cloud servers, including Apify, with a bot check ("Sign in to confirm you're not a bot"). When that happens, no transcript can be fetched for the affected videos. On some days this hits most or all videos in a run, including the default example. Videos without a transcript are not charged: they are not written to the dataset, they are listed in the key-value store record UNCHARGED_ROWS, and the run status message says how many there were. Apart from the $0.00005 Actor start, you pay only for rows that contain a transcript.

CTA: Open Input (link below) → leave defaults (1 video URL) → Start. First paid proof ≈ USD 0.003. Open Input (leave defaults → Start) Paid first run ≈ USD 0.003 total (1 video URL): Actor Start USD 0.00005 + 1×USD 0.0025. Open Console Input (deep link above) and run this JSON.

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"language": "en",
"includeAutoGenerated": true,
"outputFormat": "json",
"maxVideos": 1,
"timeoutMs": 15000,
"dedupeVideos": true,
"dryRun": false
}

After this run

Turn this Actor's output into a capped paid report with YouTube Channel Transcript RAG Intelligence. Use it when AI builders, content teams, and knowledge-base owners need to decide whether a YouTube corpus is clean enough for RAG before building embeddings or a chatbot.

  • First report: $9 / corpus_snapshot_report; set maxChargeUsd to $9.
  • Deeper report: $29 / rag_readiness_report; use only when the first result needs competitor or action-depth.
  • This is an internal Apify flow aid. It is not revenue proof until accounted paid usage appears.

Next report-style Actors

If you already have data from this Actor, these follow-on Actors turn public or user-provided inputs into decision-ready reports. They are optional, capped by maxChargeUsd, and do not make business outcome claims.

Store Quickstart

Low-cost transcript input

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"language": "en",
"includeAutoGenerated": true,
"outputFormat": "json",
"maxVideos": 1,
"timeoutMs": 15000,
"dedupeVideos": true,
"dryRun": false
}

Use with Apify MCP

Exact actor: taroyamada/youtube-transcript-bulk-api

Sample input JSON:

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"language": "en",
"includeAutoGenerated": true,
"outputFormat": "json",
"maxVideos": 1,
"timeoutMs": 15000,
"dedupeVideos": true,
"dryRun": false
}

Extract transcripts from public YouTube videos in bulk. The actor is built for AI pipelines, RAG ingestion, content repurposing, subtitle export, research, and searchable video archives.

What It Does

You provide YouTube video URLs, video IDs, playlist URLs, or channel URLs. The actor resolves visible video IDs, fetches public caption tracks, selects the best matching language, downloads the timed transcript XML, and returns one dataset row per video.

The implementation is HTTP-first and does not use browser automation. That keeps Apify hosting cost low and makes the pricing predictable.

Input

  • videoUrls: YouTube watch, Shorts, embed, live, or youtu.be URLs.
  • videoIds: Direct 11-character YouTube video IDs.
  • playlistUrls: Public playlist pages to expand into video IDs.
  • channelUrls: Public channel pages to expand into visible video IDs.
  • dedupeVideos: Remove duplicate video IDs after combining direct, playlist, and channel sources.
  • language: Preferred caption language such as en or ja.
  • includeAutoGenerated: Allows auto-generated captions when manual captions are not available.
  • translationLanguage: Optional YouTube transcript translation target.
  • outputFormat: json, text, srt, or vtt.
  • delivery / webhookUrl: Write to dataset only, or also send the final payload to a webhook.
  • maxVideos: Maximum videos to process.
  • dryRun: Validate input and emit preview rows without fetching YouTube.

Output

Each video produces one row with transcript data and billing audit fields:

  • videoId, videoUrl, videoTitle, channelTitle, sourceType
  • status, chargedEvent, sourceUrls, errors
  • language, sourceLanguage, isAutoGenerated, captionTrackName
  • segmentCount, fullText, segments, formattedTranscript
  • errorCode, errorMessage, scrapedAt

Unavailable captions, deleted videos, private videos, and request failures do not fail the full run and are not charged: those videos are not written to the dataset (every dataset row is billed); they are saved, with their error codes, in the run's key-value store record UNCHARGED_ROWS, and the run status message tells you how many there were.

Pricing Events

Recommended PPE launch target:

  • apify-actor-start: keep Apify default $0.00005.
  • transcript_extracted: $0.0025 for successful transcript rows.
  • transcript_partial: $0.001 for useful partial transcript rows if enabled later.
  • dry_run, error, and unavailable-caption videos are no-charge: they are not written to the dataset (see record UNCHARGED_ROWS in the run's key-value store).

The current cost model assumes HTTP requests, no browser, and no residential proxy. Publication should remain blocked if live cost probes show that residential proxy is required.

Limits

  • Only public videos with public caption tracks are supported.
  • Age-restricted, private, deleted, or captionless videos are not charged and are listed in the UNCHARGED_ROWS record instead of the dataset.
  • YouTube may answer Apify servers with a bot check, so transcripts can be unavailable for some or all videos in a run. Those videos are not charged.
  • Playlist and channel expansion uses public page HTML and only discovers visible video IDs.
  • YouTube may change its watch page payload shape. The canary should run daily against a known captioned video.

Local Run

npm test
npm start

The default input.json uses dryRun: true so local startup does not depend on live YouTube access.

Premium Report Pack

Use these premium report actors when a raw dataset is ready to become a buyer-facing audit, watch summary, or agency deliverable. All three keep sourceDatasetId as advanced-only; first runs should use pasted input, URLs, demo mode, and reportTier.

Recommended flow from this actor: run the current extraction/check first, export the useful dataset or copy the relevant URLs, then choose entry, premium, or bundle in the report actor with maxChargeUsd as the safety cap.

Turn Transcripts Into A Corpus Audit

After bulk transcript extraction, use YouTube Transcript Corpus Audit & RAG Readiness when the next question is not ?can I get text?? but ?is this corpus ready for RAG?? Start with reportTier="corpus_snapshot"; use rag_readiness only when the snapshot has enough caption coverage.

Use these follow-on Actors when you want a capped, decision-ready report instead of more raw rows. They use public or user-provided inputs, respect maxChargeUsd, and do not promise rankings, revenue, conversion lifts, or sales outcomes.

If this Actor gave you raw rows or source context, these follow-on report Actors are designed for a small capped paid run. They help make a decision, not just collect more data.

  • YouTube Channel Transcript RAG Intelligence - decide whether a YouTube corpus is clean enough for RAG before building embeddings or a chatbot. Entry $9 / corpus_snapshot_report; premium $29 / rag_readiness_report.

Keep maxChargeUsd equal to the selected tier. Internal links are traffic aids only; real proof requires accounted paid usage.