YouTube Transcript Scraper: Captions + AI Speech-to-Text avatar

YouTube Transcript Scraper: Captions + AI Speech-to-Text

Pricing

from $0.50 / 1,000 transcriptions

Go to Apify Store
YouTube Transcript Scraper: Captions + AI Speech-to-Text

YouTube Transcript Scraper: Captions + AI Speech-to-Text

Get the transcript of any YouTube video, even ones without captions. Reads English captions first and falls back to AI speech-to-text, with optional speaker labels, word timestamps and translation. No login or API key. Export to JSON, CSV or Excel.

Pricing

from $0.50 / 1,000 transcriptions

Rating

5.0

(1)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

2

Bookmarked

54

Total users

9

Monthly active users

9 days ago

Last modified

Share

YouTube Transcript Scraper: transcripts from captions, or AI speech-to-text when there are none

YouTube Transcript Scraper turns YouTube video links into clean text transcripts. It reads the video's English captions when they exist, and when they don't, it transcribes the audio with AI speech-to-text, with optional speaker labels, word-level timestamps and translation. Paste a list of URLs, click Start, and export the text to JSON, CSV, Excel or Google Sheets, or pull it straight into an LLM pipeline through the API.

  • Works on videos without captions. Most transcript scrapers return an empty result when a video has no captions. In the default auto mode this Actor falls back to AI transcription, so you still get the words.
  • Captions first, so you only pay for AI when you need it. Manual and auto-generated English captions are used whenever they exist. captions_only mode never uses AI at all.
  • Speaker labels and timestamps. AI transcripts come with utterances, start and end times and word-level timings. Turn on Speaker diarization to label who said what in podcasts and interviews.
  • Translation. Translate AI transcripts into any languages you list, for example es, fr or de.
  • No login, no API key. No YouTube account, Google API key or proxy setup. Bulk input, and every output format Apify supports.

Scope: This Actor returns transcripts. For video comments use YouTube Comments Scraper. For thumbnails use YouTube Thumbnail Downloader or YouTube Thumbnail Search Scraper.

What can you do with it?

GoalHow
Build LLM, RAG and AI agent datasetsCollect transcript text for many videos, then chunk and embed it.
Summarize videos, lectures and talksSend transcript (captions) or transcription.full_transcript (AI) to your summarizer.
Repurpose videos into written contentTurn transcripts into blog posts, show notes, newsletters or social posts.
Transcribe podcasts and interviewsUse ai_only with Speaker diarization to get a speaker label on every utterance.
Translate content for new audiencesTurn on Translation and list the target languages.
Find quotes and research claimsSearch the text, then use utterance start times to jump to the exact moment in the video.
Monitor channels and competitorsSchedule a task with new video URLs and send every transcript to Google Sheets.

How it compares

What you needYouTube Transcript ScraperCaption-only transcript scrapersCopying from YouTube's transcript panel
Videos with captionsYes, English captionsYesYes, one video at a time
Videos without captionsAI speech-to-text fallbackEmpty result or errorNot possible
Speaker labelsYes, AI modeNoNo
Word-level timestampsYes, AI modeSometimes, per caption linePer line, by hand
TranslationYes, AI modeUsually noNo
Bulk input, export and APIYesYesNo

Quick start

  1. Click Try for free and sign in to Apify.
  2. Paste one or more video links into YouTube video URLs.
  3. Leave Transcription mode on Auto, or pick Captions Only if you never want AI transcription.
  4. Click Start. A video with captions takes well under a minute.
  5. Open the Output tab to read the transcripts, or export them.
{
"urlList": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],
"transcriptionMode": "auto"
}

Transcription modes

ModeWhat happensBest for
autoUses YouTube captions. If a video has none, transcribes the audio with AI.Mixed lists where you want a transcript for every video
captions_onlyUses YouTube captions only. Videos without captions return source: "none".Large, low-cost runs and scheduled monitoring
ai_onlyAlways transcribes the audio with AI, even when captions exist.Speaker labels, timestamps, translation, or captions you don't trust

Speaker diarization and translation apply to AI transcripts only. To get them for a video that has captions, use ai_only.

Output

Each URL produces one dataset item. The source field tells you how the transcript was made.

From captions:

{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"source": "captions",
"transcript": "♪ We're no strangers to love ♪\n♪ You know the rules and so do I ♪\n♪ A full commitment's what I'm thinking of ♪"
}

Caption transcripts are plain text, one caption line per line, with timestamps and formatting removed.

From AI transcription (shortened). The item is the full speech-to-text result plus url and source:

{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"source": "ai_transcription",
"metadata": { "audio_duration": 19.008, "billing_time": 19.008 },
"transcription": {
"full_transcript": "All right, so here we are in front of the elephants...",
"languages": ["en"],
"utterances": [
{
"text": "All right,",
"language": "en",
"start": 1.257,
"end": 1.517,
"speaker": 0,
"words": [{ "word": "All", "start": 1.257, "end": 1.377 }]
}
]
},
"translation": {
"results": [{ "languages": ["es"], "full_transcript": "Muy bien, aquí estamos frente a los elefantes..." }]
}
}

speaker appears when diarization is on, and translation when translation is on: one entry in translation.results per target language, each with its own full_transcript and timed utterances. Times are in seconds.

sourceMeaning
captionsPlain-text transcript from YouTube's English captions.
ai_transcriptionAI speech-to-text from the video's audio.
nonecaptions_only mode and the video has no English captions.
errorThe video couldn't be processed. error says why.

Pricing

You pay per event, with Apify platform usage included:

  • Every transcript you get is one transcription event: $0.80 per 1,000 on the Free plan, down to $0.50 per 1,000 on Gold. Errors and videos without captions in captions_only mode are free.
  • AI transcription adds a charge per second of audio, only for videos that are transcribed with AI:
Apify planPer secondPer minute of audio10-minute video
Free$0.002$0.12$1.20
Bronze$0.0008$0.048$0.48
Silver$0.00075$0.045$0.45
Gold$0.0007$0.042$0.42

Before transcribing, the Actor checks the video's length against what's left of your Maximum cost per run. If the video would cost more, that URL returns an error, the run log tells you the limit you need, and nothing is charged for it. You are charged for the seconds of audio actually transcribed. Results are saved as soon as each video is done, so a run that hits its limit or timeout keeps everything finished so far.

To keep costs predictable, use captions_only for big lists, then re-run only the URLs that returned none with auto or ai_only.

Use it from code

Run the Actor and get the transcripts in one call:

curl -X POST "https://api.apify.com/v2/acts/epicscrapers~youtube-transcript-scraper/run-sync-get-dataset-items?maxTotalChargeUsd=2" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urlList": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"], "transcriptionMode": "auto"}'

Python, with the Apify API client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("epicscrapers/youtube-transcript-scraper").call(
run_input={"urlList": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"], "transcriptionMode": "auto"},
max_total_charge_usd=2,
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
text = item.get("transcript") or item.get("transcription", {}).get("full_transcript")
print(item["url"], item["source"], (text or item.get("error", ""))[:200])

It also works with the JavaScript client, Make, Zapier, n8n and as a tool for AI agents through the Apify MCP server.

Input reference

FieldTypeDefaultEffect
urlListArray of stringsRequiredYouTube video URLs (youtube.com/watch?v=…, youtu.be/…, Shorts). One result per URL.
transcriptionModeString"auto""auto" (captions, then AI), "captions_only" or "ai_only".
diarizationBooleanfalseAI only. Adds a speaker label to every utterance.
translationEnabledBooleanfalseAI only. Translates the transcript.
translationLanguagesArray of stringsEmptyTarget language codes such as es, fr, de. Used only when translation is on.

Collect transcripts on a schedule

  1. Set your video URLs and options, then click Save as a new task.
  2. In Apify Console, go to Schedules, click Create new, pick a time (for example daily at 06:00) and add the task. See Schedules.
  3. Connect Google in the task's Integrations tab to save every run to Google Sheets or Google Drive, or use Make, Zapier or n8n.

Watch how to schedule an Actor:

Every row has url and source, so runs are easy to join: keep URLs you haven't seen before, and re-run URLs that returned none or error later, since YouTube often adds auto-generated captions some hours after upload.

FAQ

Do I need captions on the video?

No. In auto and ai_only modes the Actor transcribes the audio with AI when captions are missing.

Which languages are supported?

Caption extraction reads English captions (manual or auto-generated). AI transcription detects the spoken language automatically and can translate the transcript into the languages you list.

Does the caption transcript include timestamps?

No, caption transcripts are plain text. For timestamps per utterance and per word, use ai_only.

How do I avoid AI charges?

Use captions_only. Videos without captions then return source: "none" and aren't charged.

How long can videos be?

There's no fixed limit. AI transcription is billed per second, so set your Maximum cost per run high enough for long videos. A one-hour video on the Bronze plan costs about $2.88.

Why did a URL return an error?

Common causes: the video is private, deleted, age-restricted or members-only, the audio download failed, or your maximum cost per run is too low for an AI transcription. The error field has the reason.

Do I need a YouTube API key or account?

No.

The Actor reads publicly available videos. You are responsible for following YouTube's terms and the copyright rules for the content you use.

Support

Found a problem? Open an issue in the Issues tab with the run ID and your input.

This Actor is not affiliated with, endorsed by or sponsored by YouTube or Google. YouTube is a trademark of Google LLC.