Youtube Transcript Scraper avatar

Youtube Transcript Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Youtube Transcript Scraper

Youtube Transcript Scraper

YouTube Transcript Scraper extracts video transcripts, captions, timestamps, titles, channel details, and other available metadata from YouTube videos. Automate content research, keyword analysis, video summarization, SEO research, competitor analysis, and large-scale transcript collection.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

Share

YouTube Transcript Scraper — Bulk Video Transcripts with Timestamps or Clean Text

Extract transcripts from YouTube videos in bulk. Paste video URLs and get each transcript back as structured data — either with millisecond timestamps for search and clipping, or as clean plain text ready to feed into an LLM.

Multi-language support, auto-generated caption handling, and results written to the dataset as each video completes.


What is YouTube Transcript Scraper?

Video is the least searchable content format on the internet. A transcript fixes that — it turns an hour of footage into text you can search, quote, summarise, embed or analyse.

This Actor collects transcripts for a list of YouTube videos and returns them in whichever shape your workflow needs:

  • timestamp format gives every caption segment with startMs, endMs, a readable startTime and the text — the right shape for search indexes, clip-finding and subtitle work.
  • text format returns clean plain text — the right shape for LLM prompts, RAG pipelines and summarisation, where timestamps are noise.

Rows are pushed as each video finishes, so a long list starts producing usable data immediately rather than at the end.


What data can you extract?

FieldDescription
idYouTube video ID
urlCanonical video URL
inputThe URL you supplied
transcripts[]One entry per available transcript track

Each entry in transcripts[] contains:

FieldDescription
languageTranscript language
contentThe transcript itself — an array of { startMs, endMs, startTime, text } segments in timestamp format, or plain text in text format

Scope, stated plainly: this Actor returns transcripts. Video titles, view counts and channel statistics are not part of the output — it does one job and does it cheaply. Pair it with a metadata scraper when you need both.


Why teams extract YouTube transcripts

For AI and RAG pipelines

Video is a large, underused knowledge source. Transcripts convert a channel's back catalogue into text chunks you can embed and retrieve — with no speech-to-text cost, because YouTube already produced the captions.

For SEO and content repurposing

A transcript becomes a blog post, a newsletter, a set of social clips and an FAQ. text format is the fastest route from video to draft.

For research and analysis

Interview, lecture and conference content becomes analysable — searchable for terms, codeable for themes, quotable with a timestamp.

For clip finding and subtitle work

timestamp format gives millisecond boundaries per segment, so locating the moment a phrase was said is a text search rather than a scrub through the video.

For competitive intelligence

Reading what competitors actually say in their videos — at scale, in text — is far faster than watching them.

For accessibility auditing

Comparing available transcript languages across a catalogue shows where captioning coverage is missing.


How to extract transcripts step by step

  1. Collect the YouTube video URLs you want.
  2. Paste them into YouTube Video URLs, one per line.
  3. Choose an Output Format: timestamp for time markers, text for clean prose.
  4. Decide whether to include English auto-generated and non-English transcripts.
  5. Click Start — rows appear as each video completes. Export as JSON (recommended) or CSV.

⬇️ Input

Example input

{
"urls": [
"https://www.youtube.com/watch?v=4KbrxIpQgkM",
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"outputFormat": "text",
"includeEnglishAG": true,
"includeNonEnglish": false
}

Input reference

FieldTypeDefaultDescription
urlsarray[] (required)YouTube video links. Each completed video appears in the dataset automatically.
outputFormatstringtexttimestamp — segments with time markers. text — clean plain text.
includeEnglishAGbooleantrueInclude English auto-generated transcripts when available. Most videos only have auto-generated captions, so leaving this on matters.
includeNonEnglishbooleanfalseInclude transcripts in languages other than English.
proxyConfigurationobject{}Optional. Uses Apify Residential proxy by default when needed.

If a run returns empty transcripts, check includeEnglishAG first. Manually written captions are rare; auto-generated ones are the norm, and turning that option off silently removes most results.


⬆️ Output

Example output — timestamp format

{
"id": "4KbrxIpQgkM",
"url": "https://www.youtube.com/watch?v=4KbrxIpQgkM",
"input": "https://www.youtube.com/watch?v=4KbrxIpQgkM",
"transcripts": [
{
"language": "English (auto-generated)",
"content": [
{ "startMs": 120, "endMs": 3600, "startTime": "0:00", "text": "When we started, we had no budget at all." },
{ "startMs": 3600, "endMs": 7620, "startTime": "0:03", "text": "So everything had to be organic." }
]
}
]
}

Example output — text format

{
"id": "4KbrxIpQgkM",
"url": "https://www.youtube.com/watch?v=4KbrxIpQgkM",
"input": "https://www.youtube.com/watch?v=4KbrxIpQgkM",
"transcripts": [
{
"language": "English (auto-generated)",
"content": "When we started, we had no budget at all. So everything had to be organic…"
}
]
}

Illustrative values — a live run returns real transcript data.


Usage recipes

Build a RAG knowledge base

{
"urls": ["…list of video URLs…"],
"outputFormat": "text",
"includeEnglishAG": true
}

Plain text chunks straight into your embedding pipeline — no timestamp stripping required.

Build a searchable clip index

{
"urls": ["…list of video URLs…"],
"outputFormat": "timestamp",
"includeEnglishAG": true
}

Index the text of each segment against its startMs, and a keyword search returns the exact moment.

Multi-language coverage

{
"urls": ["…video URLs…"],
"outputFormat": "text",
"includeEnglishAG": true,
"includeNonEnglish": true
}

Each available language becomes a separate entry in transcripts[].

Repurpose a video into a blog post

Run a single video in text format and feed the transcript to your writing tool. It is the fastest video-to-draft route available.

Audit caption coverage

Run a channel's videos and check which return empty transcripts — those have no captions at all, which matters for accessibility and for discoverability.


How does this compare to YouTube's official API?

The YouTube Data API exposes a captions endpoint, but downloading caption content requires OAuth authorisation as the video owner. You cannot pull transcripts for videos you do not own through the official API — which rules it out for research, competitive analysis and content pipelines.

This Actor reads the publicly available caption tracks that YouTube serves to any viewer, with no API key, no OAuth flow and no quota. If you own the videos and need the sanctioned route, use the Data API.


Integrate and automate

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperforge/youtube-transcript-scraper").call(run_input={
"urls": ["https://www.youtube.com/watch?v=4KbrxIpQgkM"],
"outputFormat": "text",
"includeEnglishAG": True,
})
for v in client.dataset(run["defaultDatasetId"]).iterate_items():
for t in v["transcripts"]:
print(v["id"], "|", t["language"], "|", str(t["content"])[:120])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperforge/youtube-transcript-scraper').call({
urls: ['https://www.youtube.com/watch?v=4KbrxIpQgkM'],
outputFormat: 'text',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

REST API

curl -X POST "https://api.apify.com/v2/acts/scraperforge~youtube-transcript-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urls":["https://www.youtube.com/watch?v=4KbrxIpQgkM"],"outputFormat":"text"}'

n8n, Make, Zapier and AI agents

Call the Actor from n8n, Make, Zapier or an MCP-capable agent — a common pattern is transcript → LLM summary → Notion or Slack.

Schedules and webhooks

Attach a Schedule to transcribe new uploads from a channel list, and use webhooks or the Google Sheets / Airtable / Google Drive integrations to route the text.


Pricing and what you are charged for

Pay-per-event: a small Actor-start charge plus a charge per video row delivered. Multiple language tracks travel inside the same row, so enabling non-English transcripts adds data without adding billed rows.

Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run. Residential proxy traffic, when used, is billed separately by the platform.


Limits, reliability and blocking

  • Only videos that have captions can be transcribed. This Actor reads existing caption tracks; it does not run speech-to-text. A video with captions disabled returns an empty transcripts array.
  • Auto-generated captions are the norm. Keep includeEnglishAG on unless you specifically want human-written captions only.
  • Auto-generated accuracy varies with audio quality, accents and background noise — expect occasional errors, especially with technical terms.
  • Non-English transcripts are off by default. Enable includeNonEnglish to include them.
  • The output is transcripts only — no titles, view counts or channel data.
  • Residential proxy is used when needed, which is what keeps success rates high on larger runs.
  • Private, unlisted and age-restricted videos are generally not accessible.
  • Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for long URL lists.

This Actor reads publicly available caption tracks — the same captions any viewer can turn on while watching. It does not log in, download video files, or bypass age gates or paywalls.

Transcripts are derived from creators' copyrighted work. Using them for research, search, analysis and summarisation is generally reasonable; republishing full transcripts as your own content is not. Credit the source, link to the original video, and comply with YouTube's Terms of Service and applicable copyright law when reusing anything derived from them.


❓ Frequently asked questions

Do I need a YouTube API key?

No. The Actor reads public caption tracks without any credentials.

Why can't I use YouTube's official API for this?

Downloading caption content through the Data API requires OAuth as the video owner, so it does not work for videos you do not control.

Which output format should I choose?

timestamp for search, clipping and subtitle work; text for LLM prompts, summarisation and repurposing.

Why did a video return no transcript?

It has no caption track — captions are disabled, or none were generated. This Actor reads existing captions rather than transcribing audio.

Does it do speech-to-text?

No. If a video has no captions, there is nothing to extract.

How accurate are auto-generated captions?

Usually good for clear speech, less reliable with heavy accents, background noise or specialist terminology.

Can I get transcripts in other languages?

Yes — enable includeNonEnglish. Each available language appears as a separate entry in transcripts[].

Does it return video titles or view counts?

No. This Actor returns transcripts only. Pair it with a YouTube metadata scraper if you need both.

Which export format should I use?

JSON — transcripts is a nested array, and in timestamp mode each entry contains a further array of segments.


Browse the full collection on the ScraperForge profile.


💬 Feedback

Need video metadata alongside transcripts, channel-wide input, or a custom AI pipeline? Open an issue on the Issues tab of this Actor.