YouTube Transcript Scraper – Clean Text & JSON
Pricing
from $5.00 / 1,000 youtube transcript results
YouTube Transcript Scraper – Clean Text & JSON
Extract clean, timestamped transcripts from public YouTube videos and Shorts. Batch up to 1,000 URLs, choose caption languages, and export text or structured segments for AI, research, SEO, and automation. Pay only for successful transcripts.
Pricing
from $5.00 / 1,000 youtube transcript results
Rating
0.0
(0)
Developer
Chronometrica
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
YouTube Transcript Scraper
🚀 What does YouTube Transcript Scraper do?
Paste YouTube video URLs. Get clean transcript text and timestamped segments that are ready for AI, research, spreadsheets, and automated workflows.
The Actor extracts existing public captions from videos and Shorts. It also returns video context, selected language details, and clear result states. No YouTube API key, account, or cookies are required from you.
🎯 What can you use it for?
- 🤖 Send clean transcript text into ChatGPT, Claude, AI agents, RAG pipelines, embeddings, and LLM prompts.
- ✂️ Pull out key points, summaries, quotes, clips, and content ideas without watching every video first.
- 🔎 SEO, competitive content analysis, media monitoring, and creator research.
- 🎓 Academic, market, podcast, lecture, interview, and training-data workflows.
- ♿ Accessibility review and subtitle/caption export.
- 📊 Load stable rows into warehouses, Google Sheets, no-code automations, and repeatable batch jobs.
The Actor is built for direct video objects. Each successful YouTube video or
Short becomes one billable transcript row. Failed inputs stay non-billable and
are counted in the run OUTPUT record.
✨ Why use this Actor?
- ✅ Clean output without formatting fluff: timestamped
segmentsplus one joinedtextfield. - 🔗 Easy to integrate: use stable dataset rows with the Apify API, webhooks, schedules, Make, Zapier, n8n, or your own code.
- 📺 Video and channel context: title, publish date, duration, channel, and thumbnail when YouTube exposes them.
- 📈 Transcript quality signals: word count, character count, segment count, timing coverage, and coverage ratio.
- 🌍 Language clarity: requested languages, selected language, available language codes, auto-generated/manual flag, and match reason.
- 🩳 Shorts and long videos: works with normal videos, Shorts, and long public videos when captions are available.
- 🔑 No API key required from you: use direct video URLs, Shorts URLs,
youtu.be, embed URLs, or raw video IDs. - 💸 Non-billable failures: invalid, unsupported, unavailable, age-restricted,
login-required, and no-transcript outcomes are reported in
OUTPUT, not written as charged dataset rows. - 🧾 Clear billing unit: one successful transcript equals one dataset row and one billable event. A failed lookup costs no result event.
- 🆕 Fresh on every run: each public run fetches the current public caption track instead of reusing an older transcript result.
⚙️ Can I use this Actor through an API?
Yes. You can run YouTube Transcript Scraper manually in Apify Console or use it through:
- Apify API
- Python SDK
- Node.js SDK
- Webhooks
- Scheduled runs
- Apify integrations
This makes it useful for AI pipelines, research tools, spreadsheets, data warehouses, and no-code automations.
🚀 How do I use YouTube Transcript Scraper?
Paste one or more direct YouTube video URLs, Shorts URLs, youtu.be links,
embed URLs, or raw video IDs into startUrls.
{"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}
That is enough for most jobs:
- Open YouTube Transcript Scraper in Apify Console.
- Paste one or more YouTube video URLs or IDs.
- Leave the default language and output settings for your first run.
- Click Start.
- Open Output to inspect the transcript rows and run summary.
- Download the dataset or send it to another tool through an integration.
🧩 Input
| Option | What it controls |
|---|---|
startUrls | One to 1,000 direct video, Shorts, live, embed, youtu.be, or raw video ID inputs. Duplicate videos run once. |
preferredLanguages | Optional language codes in priority order. Empty means best available. A filled list is strict. |
outputFormats | One or more of json, text, srt, vtt, and llm. Defaults to json and text. |
includeFailedInputDetails | Include safe per-input failure details in OUTPUT. Defaults to true. Failures are never dataset rows. |
When preferredLanguages is set and no requested language exists, the Actor
records a typed non-billable LANGUAGE_UNAVAILABLE failure in OUTPUT. It
does not silently return another language.
📦 Output
Each default-dataset row represents one successful unique YouTube video or Short. The fields are ordered for clean loading into spreadsheets, APIs, and warehouses.
| Group | Fields |
|---|---|
| Input | platform, inputIndex, inputUrl |
| Video | videoUrl, videoId, title, publishedAt, videoDurationSeconds, thumbnailUrl |
| Channel | channelId, channelName, channelUrl |
| Language | requestedLanguageCodes, transcriptLanguageCode, transcriptLanguageName, availableLanguageCodes, languageMatch, isAutoGenerated |
| Transcript | segments, text, optional srt, optional vtt, optional llmText |
| Quality | segmentCount, wordCount, characterCount, firstSegmentStartSeconds, lastSegmentEndSeconds, transcriptSpanSeconds, videoCoverageRatio |
| Result | status, statusReason, errorCategory, errorCode, isRetryable, scrapedAt |
✅ Successful row sample
{"platform": "youtube","inputIndex": 0,"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoId": "dQw4w9WgXcQ","title": "Example video title","publishedAt": "2024-04-30","videoDurationSeconds": 212,"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg","channelId": "UCexample123","channelName": "Example Channel","channelUrl": "https://www.youtube.com/@example","requestedLanguageCodes": ["en"],"transcriptLanguageCode": "en","transcriptLanguageName": "English","availableLanguageCodes": ["en", "es"],"languageMatch": "exact","isAutoGenerated": false,"segments": [{"startSeconds": 0,"endSeconds": 2.4,"durationSeconds": 2.4,"text": "Example transcript text"}],"text": "Example transcript text","srt": null,"vtt": null,"llmText": null,"segmentCount": 61,"wordCount": 534,"characterCount": 3180,"firstSegmentStartSeconds": 0,"lastSegmentEndSeconds": 210.4,"transcriptSpanSeconds": 210.4,"videoCoverageRatio": 0.9925,"status": "succeeded","statusReason": "Transcript parsed from public YouTube caption tracks.","errorCategory": null,"errorCode": null,"isRetryable": false,"scrapedAt": "2026-07-08T21:43:38.000Z"}
⚠️ Failed input detail
When enabled, OUTPUT.failedInputDetails preserves safe input and canonical
identity details without creating a billable dataset row.
{"inputIndex": 1,"inputUrl": "https://www.youtube.com/watch?v=example1234","videoUrl": "https://www.youtube.com/watch?v=example1234","videoId": "example1234","status": "failed","statusReason": "No public transcript was available.","errorCategory": "no_transcript","errorCode": "TRANSCRIPT_NOT_FOUND","isRetryable": false}
Common failure codes:
TRANSCRIPT_NOT_FOUND: public video resolved, but no public caption track was available.VIDEO_UNAVAILABLE: the video was unavailable.AGE_RESTRICTED: YouTube required age-confirmed access.LOGIN_REQUIRED: YouTube required login for the lookup.LANGUAGE_UNAVAILABLE: none of the requested transcript languages were available.INVALID_INPUTandUNSUPPORTED_INPUT: the input was not a supported direct video object.ACCESS_BLOCKED,TEMPORARY_FAILURE, andTRANSCRIPT_PARSE_FAILED: the public lookup could not produce a transcript and may succeed later whenisRetryableis true.
🧾 Run summary
The OUTPUT record shows:
- inputs received;
- unique videos processed;
- successful transcript rows;
- duplicate videos skipped;
- unavailable or unsupported inputs;
- error-code counts;
- optional safe details for inputs that did not produce a transcript.
Use this summary to check the whole run before loading the dataset.
💵 Pricing Event
The Actor is designed for Pay Per Event pricing. One billable event is one successful transcript row written to the dataset. Failed, invalid, unsupported, age-restricted, unavailable, language-unavailable, and no-transcript rows are non-billable. Public runs always fetch a fresh caption result.
🚫 What this Actor is not
- It does not generate AI speech-to-text when YouTube has no public captions.
- It does not download video or audio files.
- It does not use your YouTube account, cookies, OAuth, or private session.
- It does not access private, deleted, members-only, or account-only videos.
- It does not expand playlists, channels, search keywords, recommendations, or comments. Use a discovery Actor first, then pass direct video URLs here.
- It does not guarantee every public video has captions. When captions are unavailable, the row explains the outcome and stays non-billable.
🏆 Best practices
- 🎯 Pass direct video or Shorts URLs whenever possible.
- 🧠 Keep
outputFormatsto["json", "text"]for most AI and data workflows. - 📝 Add
srtorvttonly when you need subtitle files. - 🌐 Leave
preferredLanguagesempty for the best available track. Add language codes in priority order when the result must use one of those languages. - 🔗 For channel, playlist, or keyword workflows, run discovery first and send the resulting direct video URLs into this Actor.
🔗 Related social media scrapers
Combine this Actor with our other social media scrapers for discovery, performance tracking, comment research, and transcript collection.
YouTube
- YouTube Search Scraper — find public videos, Shorts, channels, and metrics by keyword.
- YouTube Metrics Scraper — collect public video, Short, channel, and engagement metrics.
- YouTube Comments Scraper — collect public comments, replies, authors, likes, pins, and creator hearts.
- Facebook Metrics Scraper — collect public post, Reel, video, and profile/page metrics.
- Facebook Comments Scraper — collect public comments, replies, authors, dates, and reactions from known Facebook content.
- Instagram Metrics Scraper — collect public post, Reel, carousel, profile, and collaboration metrics.
- Instagram Comments Scraper — collect public comments, authors, dates, likes, and reply counts from posts and Reels.
TikTok
- TikTok Search Scraper — find public TikTok videos, creators, and metrics by keyword.
- TikTok Metrics Scraper — collect public video, profile, engagement, hashtag, and music data.
- TikTok Comments Scraper — collect public comments, replies, authors, likes, and thread links.
- TikTok Transcript Scraper — extract public caption text and timestamped segments from TikTok videos.