YouTube Transcript Scraper – Text & Timestamps avatar

YouTube Transcript Scraper – Text & Timestamps

Pricing

from $1.00 / 1,000 results

Go to Apify Store
YouTube Transcript Scraper – Text & Timestamps

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

ScrapingMonkey

Maintained by Community

Actor 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 glanceDetails
πŸ“₯ InputFull YouTube video URLs, with an optional caption language
πŸ“€ OutputFull text, timed segments, selected language, caption tracks, and video context
πŸ” Login requiredNo YouTube credentials or cookies
⚑ ProcessingUp to 5 requests concurrently with automatic retries
πŸ’Ύ DeliveryOne 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 πŸš€

  1. Add one or more full video URLs to inputList.
  2. Leave language empty for automatic selection, or enter a code such as en.
  3. Start the Actor and review transcript and failed rows.
  4. 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 groupIncluded data
Video contextID, URL, title, author, channel ID, and views
TranscriptFull text, availability flag, and segment count
TimingText, start, duration, end, and timestamp for each segment
LanguageRequested and selected language, track name, generated and translated flags
Track optionsAvailable 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 βš™οΈ

ParameterTypeDefaultRules
inputListarray of stringsRequiredAt least one full YouTube video URL. Bare video IDs are not accepted.
languagestring""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.

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.