YouTube Transcript Scraper: Captions + AI Speech-to-Text
Pricing
from $0.50 / 1,000 transcriptions
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
Maintained by CommunityActor stats
2
Bookmarked
54
Total users
9
Monthly active users
9 days ago
Last modified
Categories
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
automode 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_onlymode never uses AI at all. - Speaker labels and timestamps. AI transcripts come with utterances,
startandendtimes 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,frorde. - 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?
| Goal | How |
|---|---|
| Build LLM, RAG and AI agent datasets | Collect transcript text for many videos, then chunk and embed it. |
| Summarize videos, lectures and talks | Send transcript (captions) or transcription.full_transcript (AI) to your summarizer. |
| Repurpose videos into written content | Turn transcripts into blog posts, show notes, newsletters or social posts. |
| Transcribe podcasts and interviews | Use ai_only with Speaker diarization to get a speaker label on every utterance. |
| Translate content for new audiences | Turn on Translation and list the target languages. |
| Find quotes and research claims | Search the text, then use utterance start times to jump to the exact moment in the video. |
| Monitor channels and competitors | Schedule a task with new video URLs and send every transcript to Google Sheets. |
How it compares
| What you need | YouTube Transcript Scraper | Caption-only transcript scrapers | Copying from YouTube's transcript panel |
|---|---|---|---|
| Videos with captions | Yes, English captions | Yes | Yes, one video at a time |
| Videos without captions | AI speech-to-text fallback | Empty result or error | Not possible |
| Speaker labels | Yes, AI mode | No | No |
| Word-level timestamps | Yes, AI mode | Sometimes, per caption line | Per line, by hand |
| Translation | Yes, AI mode | Usually no | No |
| Bulk input, export and API | Yes | Yes | No |
Quick start
- Click Try for free and sign in to Apify.
- Paste one or more video links into YouTube video URLs.
- Leave Transcription mode on Auto, or pick Captions Only if you never want AI transcription.
- Click Start. A video with captions takes well under a minute.
- Open the Output tab to read the transcripts, or export them.
{"urlList": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],"transcriptionMode": "auto"}
Transcription modes
| Mode | What happens | Best for |
|---|---|---|
auto | Uses YouTube captions. If a video has none, transcribes the audio with AI. | Mixed lists where you want a transcript for every video |
captions_only | Uses YouTube captions only. Videos without captions return source: "none". | Large, low-cost runs and scheduled monitoring |
ai_only | Always 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.
source | Meaning |
|---|---|
captions | Plain-text transcript from YouTube's English captions. |
ai_transcription | AI speech-to-text from the video's audio. |
none | captions_only mode and the video has no English captions. |
error | The video couldn't be processed. error says why. |
Pricing
You pay per event, with Apify platform usage included:
- Every transcript you get is one
transcriptionevent: $0.80 per 1,000 on the Free plan, down to $0.50 per 1,000 on Gold. Errors and videos without captions incaptions_onlymode are free. - AI transcription adds a charge per second of audio, only for videos that are transcribed with AI:
| Apify plan | Per second | Per minute of audio | 10-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 ApifyClientclient = 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
| Field | Type | Default | Effect |
|---|---|---|---|
urlList | Array of strings | Required | YouTube video URLs (youtube.com/watch?v=…, youtu.be/…, Shorts). One result per URL. |
transcriptionMode | String | "auto" | "auto" (captions, then AI), "captions_only" or "ai_only". |
diarization | Boolean | false | AI only. Adds a speaker label to every utterance. |
translationEnabled | Boolean | false | AI only. Translates the transcript. |
translationLanguages | Array of strings | Empty | Target language codes such as es, fr, de. Used only when translation is on. |
Collect transcripts on a schedule
- Set your video URLs and options, then click Save as a new task.
- In Apify Console, go to Schedules, click Create new, pick a time (for example daily at 06:00) and add the task. See Schedules.
- 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.
Is it legal to scrape YouTube transcripts?
The Actor reads publicly available videos. You are responsible for following YouTube's terms and the copyright rules for the content you use.
Related Actors
- YouTube Comments Scraper: comments and replies from YouTube videos.
- YouTube Thumbnail Downloader: download video thumbnails.
- YouTube Thumbnail Search Scraper: collect thumbnails from YouTube searches.
- Webpage to Markdown: turn web pages into clean Markdown for LLM pipelines.
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.