YouTube Transcript Scraper β Text & Timestamps
Pricing
from $1.00 / 1,000 results
YouTube Transcript Scraper β Text & Timestamps
Extract existing YouTube captions from video URLs. Get full transcript text, timed segments, language details, caption tracks, and video context in one row.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
ScrapingMonkey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract the captions already available for public YouTube videos, with readable text and segment timing. YouTube Transcript Scraper keeps the full transcript, language information, caption-track details, and video context in one row per input.
Use it to index spoken content, prepare research notes, or connect passages to their position in a video. It retrieves existing captions; it does not generate speech-to-text from videos that have none.
| At a glance | Details |
|---|---|
| π₯ Input | Full YouTube video URLs, with an optional caption language |
| π€ Output | Full text, timed segments, selected language, caption tracks, and video context |
| π Login required | No YouTube credentials or cookies |
| β‘ Processing | Up to 5 requests concurrently with automatic retries |
| πΎ Delivery | One transcript row per processed input; segments stay in that row |
What the YouTube transcript scraper extracts π
The Actor selects one caption track for each input and collects the text YouTube makes available from that track.
- Full transcript text and number of nonempty segments
- Segment text, start, duration, end, and a readable timestamp
- Selected language code, source-track name, and requested language
- Automatic-caption and translation indicators
- Available caption tracks and translation-language options
- Video ID, source URL, title, channel ID, author, and available view count
How to scrape YouTube video transcripts π
- Add one or more full video URLs to
inputList. - Leave
languageempty for automatic selection, or enter a code such asen. - Start the Actor and review transcript and failed rows.
- Export full text or the aligned segment columns for your workflow.
{"inputList": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"]}
YouTube transcript data fields and output π¦
| Field group | Included data |
|---|---|
| Video context | ID, URL, title, author, channel ID, and views |
| Transcript | Full text, availability flag, and segment count |
| Timing | Text, start, duration, end, and timestamp for each segment |
| Language | Requested and selected language, track name, generated and translated flags |
| Track options | Available caption tracks and translation languages |
Complete illustrative success item. The content and values below are fictional examples, not a live result:
{"input": "https://www.youtube.com/watch?v=TrailWalk01x","status": "success","video.id": "TrailWalk01x","video.url": "https://www.youtube.com/watch?v=TrailWalk01x","video.title": "A forest walk in three stops","video.channel_id": "UCaaaaaaaaaaaaaaaaaaaaaa","video.author": "Trail Journal","video.views": 12400,"requested_language": null,"language": "en","language_name": "English","is_generated": false,"is_translated": false,"transcript_available": true,"full_text": "Welcome to the forest trail. We will stop at the viewpoint and follow the river back.","segments.text": ["Welcome to the forest trail.","We will stop at the viewpoint and follow the river back."],"segments.start_seconds": [0.0,3.0],"segments.duration_seconds": [2.5,4.0],"segments.end_seconds": [2.5,7.0],"segments.timestamp": ["0:00.000","0:03.000"],"segments_count": 2,"tracks.name": ["English"],"tracks.language_code": ["en"],"tracks.vss_id": [".en"],"tracks.url": ["https://www.youtube.com/api/timedtext?v=TrailWalk01x&lang=en"],"tracks.is_auto_generated": [false],"tracks.is_translatable": [true],"translation_languages.language_code": ["es"],"translation_languages.name": ["Spanish"]}
One video transcript stays in one table row. JSON uses the same literal dotted keys as the columns. Entries in segments.text, segments.start_seconds, and the other segment columns align by position. Times are in seconds; gaps and overlapping captions can reflect the source track.
Missing optional fields can be null, empty strings, or empty lists. Some flags default to false when no signal is present. A failed row retains input, sets status to failed, and leaves the result-data fields null.
Input requirements and coverage βοΈ
| Parameter | Type | Default | Rules |
|---|---|---|---|
inputList | array of strings | Required | At least one full YouTube video URL. Bare video IDs are not accepted. |
language | string | "" | Optional language code, such as en or es. Empty prefers English, then the first available track. |
Accepted video forms include watch URLs, youtu.be links, and supported /shorts/, /live/, /embed/, or /v/ URLs. Bare IDs and channel links are not accepted.
Language selection first looks for the requested code, then a track in the same base language. With no match, it prefers English or the first track and requests translation only if YouTube exposes that language and the source track permits translation. An unsupported language or a video without usable caption text produces a failed result. language_name describes the selected source track; for translated text, use language to identify the output language.
Repeated input entries are processed separately, even when they refer to the same target. Remove duplicate entries before the run if you want to avoid repeated results.
YouTube transcript use cases π―
Searchable video libraries
Index full transcript text with the video URL so a search can return both the passage and its source.
Research and quotations
Locate passages with segment start times, then check the original video before quoting or interpreting them.
Caption-based language workflows
Collect an available language track or supported translation and retain flags that identify its origin.
Accessibility review
Inspect the text and timing supplied with videos you manage to find captions that need manual review.
Pricing and billable transcript rows π°
Check the Actor's Pricing tab for the current charging model and rate.
Under dataset-item pricing, each saved success or failed row can be billable. Automatic retries do not independently create extra rows. Repeated input entries can produce repeated billable results.
A transcript with many segments remains one dataset item. Missing captions or an unavailable requested language can result in a saved failed row.
YouTube Video Transcript Scraper API and integrations π
Use the Actor ID from the API tab as $ACTOR_ID and your Apify token as $APIFY_TOKEN.
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"inputList":["https://www.youtube.com/watch?v=jNQXAC9IVRw"]}'
This request starts a run. Retrieve the default dataset after completion, or use schedules and webhooks to connect it to a recurring workflow. Export JSON, CSV, or Excel, or send selected fields to Google Sheets, Make, Zapier, or your own application.
Reliability and limits β οΈ
Temporary request failures are retried. Invalid or unavailable targets produce failed rows while other inputs can continue. If a required collection step cannot be completed, the target can fail even when some public information is visible in a browser.
Caption availability can differ by video, language, region, or access state. Automatic captions and YouTube translations can contain errors; the output preserves their text rather than correcting it. Empty caption responses and inaccessible tracks can fail. Caption URLs may expire.
Frequently asked questions β
Can it transcribe a video with no captions?
No. It retrieves existing caption tracks and does not run speech recognition.
Which language is selected by default?
English is preferred when available; otherwise the first available track is used.
Can I request a translated transcript?
Yes, when the selected track is translatable and YouTube lists the requested translation language. Unsupported requests fail.
Does each segment become a row?
No. Full text and all timed segments stay in one transcript row.
Are generated captions identified?
Yes. is_generated identifies an automatic source track, while is_translated identifies a requested translation.
Are timestamps exact word timings?
They describe caption segments supplied by YouTube, not separate timing for every word.
Support, responsible use, and related actors π
For a reproducible issue, share the run ID, a safe public input, and the field or behavior you expected through the Actor's support channel. Keep tokens and other credentials out of support messages.
Use public content in accordance with applicable privacy, copyright, contractual, and platform requirements.