Skip to content

Turn YouTube Transcript
into structured data

Get the transcript of any public YouTube video as JSON, SRT, VTT, or plain text: the captions YouTube already has, in the language you pick, with timestamps. No YouTube Data API key and no quota.

01-Integration

Integrate YouTube Transcript API your way

Connect to Scrape.ly using Python, JavaScript, HTTP, cURL, OpenAPI, or MCP and start extracting YouTube Transcript data in minutes.

from scrapely_client import ScrapelyClient
client = ScrapelyClient('YOUR_TOKEN', api_url='https://api.scrape.ly')
run = client.actor('echofield/youtube-scraper').call(
run_input={
'startUrls': [{'url': 'https://www.youtube.com/watch?v=jNQXAC9IVRw'}],
'maxResults': 1,
'transcriptionAndSubtitle': 'ALWAYS_SUBTITLES',
'subtitlesLanguage': 'en',
'subtitlesFormat': 'srt',
}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item)
02-Input & Output

Send a video URL, get the transcript with timestamps

Pass video URLs, channel URLs, playlists, and search terms into Scrape.ly. Get structured outputs with full transcript text with timestamps, SRT, VTT, XML, or plain-text format, manual or auto-generated captions, the list of caption languages on each video, and video title, channel, duration, and views, and more.

Input
1 2 3 4 5 6 7 8 9 10 11
{
 "startUrls": [
  {
   "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  }
 ],
 "maxResults": 1,
 "transcriptionAndSubtitle": "ALWAYS_SUBTITLES",
 "subtitlesLanguage": "en",
 "subtitlesFormat": "srt"
}
Output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
{
 "title": "Me at the zoo",
 "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
 "channelName": "jawed",
 "duration": "00:00:19",
 "subtitles": [
  {
   "type": "user_generated",
   "language": "en",
   "srt": "1\n00:00:01,200 --> 00:00:03,360\nAll right, so here we are, in front of the elephants\n\n2\n00:00:05,318 --> 00:00:07,974\nthe cool thing about these guys is that they have really..."
  }
 ],
 "subtitleLanguages": [
  {
   "language": "en",
   "name": "English",
   "isAutoGenerated": false
  },
  {
   "language": "de",
   "name": "German",
   "isAutoGenerated": false
  }
 ]
}
Reference

YouTube Transcript API reference

One request returns each video with its transcript in the subtitles field. Send video URLs (or a channel, playlist or search, to get the transcripts of many videos at once) and turn subtitles on; the transcript costs nothing on top of the video row.

Endpoint

POST https://api.scrape.ly/v2/actors/echofield~youtube-scraper/run-sync-get-dataset-items

Starts a run, waits up to 90 seconds and returns the dataset items. Add ?format=csv for CSV. For longer jobs, start the run with POST /v2/actors/{actorId}/runs and read the dataset when it finishes. From $2.04 per 1,000 videos, transcript included.

curl -X POST "https://api.scrape.ly/v2/actors/echofield~youtube-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $SCRAPELY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw"}],"maxResults":1,"transcriptionAndSubtitle":"ALWAYS_SUBTITLES","subtitlesLanguage":"en","subtitlesFormat":"srt"}'

Body parameters

NameTypeDescription
startUrlsobject[]YouTube video, channel, playlist, hashtag or search URLs, each as { "url": "…" }. A channel handle such as @NASA works too.
searchQueriesstring[]Search terms, used when no URLs are given.
maxResultsintegerVideos per search term or channel (default 10).
transcriptionAndSubtitleenumSet ALWAYS_SUBTITLES to download the captions that are already on each video. NONE (default) skips them.
subtitlesLanguageenumen (default), de, es, fr, it, ja, ko, nl, pt, ru, or any.
subtitlesFormatenumsrt (default), vtt, xml, or plaintext.
preferAutoGeneratedSubtitlesbooleanUse YouTube's auto-generated captions when a video has both kinds.
saveSubsToKVSbooleanAlso save each subtitle file to the run's key-value store and link it from the video.

subtitles holds one track per video: type (user_generated or auto_generated), language and the text in the format you chose. subtitleLanguages lists every caption track the video has.

A video without captions comes back with no subtitles. For those, the Audio & Video Transcriber (querystone/audio-transcriber) transcribes the audio itself, billed per audio minute.

Response fields

  • title
  • id
  • url
  • channelName
  • duration
  • date
  • viewCount
  • subtitles
  • subtitleLanguages
  • chapters
  • text

Status codes

StatusTypeMeaning
200—The run succeeded. The body is the dataset items, a JSON array.
400run-failedThe run ended in a status other than SUCCEEDED.
401token-not-provided / token-not-validNo Authorization: Bearer header, or an unknown, expired or revoked token.
402payment-requiredThe run cannot reserve enough credits.
408run-timeout-exceededThe run did not finish within 90 seconds. It keeps going: wait with GET /v2/actor-runs/{runId}?waitForFinish=60 instead of starting another.
429rate-limit-exceeded / concurrency-limit-exceededToo many requests or concurrent runs. Retry with exponential backoff.

Full details in the Actors API docs.

03-How it works

Start extracting YouTube Transcript data in four simple steps

Scrape.ly keeps the setup simple so you can move from signup to live YouTube Transcript data without wasting time on scraping infrastructure.

Step 1

Create your Scrape.ly account

Create your account and get access to ready-made APIs, scrapers, and automation tools.

Step 2

Get your Scrape.ly API token

Copy your API token from the Scrape.ly dashboard and use it to authenticate your requests.

Step 3

Connect YouTube Transcript API

Choose Python, JavaScript, HTTP, or MCP and connect Scrape.ly to your app or workflow.

Step 4

Fetch YouTube Transcript data

Send your video URLs, channel URLs, playlists, and search terms, then receive clean structured data ready for analysis.

04-Why Scrape.ly

Everything you need to extract data reliably

Scrape.ly gives you ready-made APIs, proxy support, monitoring, exports, integrations, and scalable infrastructure in one platform.

Never Get Blocked

Use built-in proxy support to reduce blocks, rate limits, and failed requests.

Export Any Format

Get results in JSON, CSV, Excel, XML, HTML table, RSS, or other workflow-friendly formats.

Monitor Every Run

Track scraper status, performance, failures, retries, and outputs from one dashboard.

Built-In Integrations

Connect with webhooks, APIs, automation tools, cloud apps, and internal systems.

Scalable Infrastructure

Run small tests or high-volume extraction jobs without rebuilding your scraping stack.

Developer-Friendly

Use clean APIs, SDKs, docs, examples, and structured outputs built for real workflows.

05-AI-Ready Data

FeedYouTube Transcriptdata into your tools instantly

Connect Scrape.ly with your apps, dashboards, sheets, agents, and automation workflows to turn YouTube Transcript data into action.

06-Explore APIs

More YouTube Transcript APIs on Scrape.ly

Browse ready-made YouTube Transcript scrapers and APIs available inside Scrape.ly and choose the one that fits your workflow.

//07-FAQ\\

Common questions about YouTube Transcript API

Quick answers about using Scrape.ly's YouTube Transcript API, available data, setup, and legal usage.

Got more questions?Reach out to us


Not for other people's videos. The YouTube Data API's captions.download method needs OAuth authorization and "requires the user to have permission to edit the video", and each call costs 200 quota units. It is built for channel owners managing their own captions. Scrape.ly's YouTube Transcript API reads the captions shown on any public video and returns them as JSON, with no Google Cloud project or API key.

//From the blog\\

Latest articles

All articles

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.