Multilingual Captions
Add a language parameter and fetch clean captions in Spanish, Portuguese, French, or any other language.
Extract YouTube transcript from any video or shorts in any language at scale without worrying about getting blocked. This API manages proxies and all corner cases for hassle-free transcript data.
{
"transcripts": [
{
"text": "[Music]",
"start": 2.43,
"duration": 5.76
},
{
"text": "the alarm strong gene cernan have both",
"start": 12.63,
"duration": 3.37
},
{
"text": "testified against commercial spaceflight",
"start": 16,
"duration": 2.699
}
]
}import requests
api_key = "5eaa61a6e562fc52fe763tr516e4653"
url = "https://api.scrapingdog.com/youtube/transcripts"
params = {
"api_key": api_key,
"v": "bheHjqvkaaI",
"language": "en"
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
print(data)
else:
print(f"Request failed with status code: {response.status_code}")import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
String apiKey = "5eaa61a6e562fc52fe763tr516e4653";
String videoId = "bheHjqvkaaI";
String language = "en";
String apiUrl = "https://api.scrapingdog.com/youtube/transcripts?api_key=" + apiKey
+ "&v=" + videoId
+ "&language=" + language;
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
System.out.println(response.toString());
} else {
System.out.println("HTTP request failed with response code: " + responseCode);
}
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}<?php
$api_key = '5eaa61a6e562fc52fe763tr516e4653';
$video_id = 'bheHjqvkaaI';
$language = 'en';
$url = 'https://api.scrapingdog.com/youtube/transcripts?api_key=' . $api_key . '&v=' . $video_id . '&language=' . $language;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
echo 'cURL error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);require 'net/http'
require 'uri'
api_key = '5eaa61a6e562fc52fe763tr516e4653'
video_id = 'bheHjqvkaaI'
language = 'en'
url = URI.parse("https://api.scrapingdog.com/youtube/transcripts?api_key=#{api_key}&v=#{video_id}&language=#{language}")
request = Net::HTTP::Get.new(url)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
response = http.request(request)
if response.is_a?(Net::HTTPSuccess)
puts response.body
else
puts "HTTP request failed with code: #{response.code}, message: #{response.message}"
endconst axios = require('axios');
const api_key = '5eaa61a6e562fc52fe763tr516e4653';
const url = 'https://api.scrapingdog.com/youtube/transcripts';
const params = {
api_key: api_key,
v: 'bheHjqvkaaI',
language: 'en',
};
axios
.get(url, { params: params })
.then(function (response) {
if (response.status === 200) {
const data = response.data;
console.log(data);
} else {
console.log('Request failed with status code: ' + response.status);
}
})
.catch(function (error) {
console.error('Error making the request: ' + error.message);
});transcriptstextstartdurationtexttranscriptsstartdurationvapi_keylanguagecountryBy hand you wrestle with OAuth quotas, undocumented caption endpoints, and timedtext payloads that change without warning.
YouTube's official Data API gates captions behind OAuth, units-based quotas, and per-day limits that throttle any real volume.
Caption data hides behind signed timedtext URLs and XML/JSON3 cue formats you must reverse-engineer and re-parse on every change.
Picking the right track means juggling ASR auto-captions, creator uploads, and translated tracks per language code by hand.
Fetching transcripts for a whole channel or playlist trips rate limits and IP bans long before your dataset is complete.
With Scrapingdog, one API call handles proxies, quotas, parsing, and scaling, so you focus on your data.
Need transcripts for an entire playlist? Fire off hundreds of calls in parallel and our high-concurrency backend keeps pace.
Forget OAuth screens and daily caps. Just pass the video ID of any video or short and Scrapingdog handles the heavy lifting.
We keep pace with every change YouTube makes, handling captchas, layout tweaks, and rate-limits behind the curtain.
Whether you need the transcript for 1 video or 1M videos, your data pipeline keeps delivering without breaking.
Add a language parameter and fetch clean captions in Spanish, Portuguese, French, or any other language.
Get structured text, start-time, and duration fields that drop straight into your database or analytics pipeline.
Most calls return the full transcript in just a few seconds, even on long videos.
Each caption line carries its own start and duration, so you can deep-link to the exact moment spoken.
A rotating proxy pool plus automatic captcha handling pulls captions without OAuth, quotas, or IP bans.
Our infrastructure auto-selects the right caption track and adapts to YouTube changes to return a usable transcript.
Feed transcripts into an LLM to read the main points and chapter notes instead of watching the full video.
Pull real phrases from top clips and feed them straight into your titles, tags, and ad copy.
See every time your company or product comes up in video dialogue across creators and competitors.
Scan the transcript text for restricted or prohibited words so campaigns stay within the rules.
Tie each line to its timestamp and let users jump to the exact spot in the video they need.
Collect transcripts on a topic to spot rising themes and talking points before the market catches on.
Sign up and get free credits to start testing the YouTube Transcript API.
Access your unique API key from the dashboard and use it to extract transcript data.
Pass a YouTube video ID like v=bheHjqvkaaI plus an optional language code.
Get a transcripts array where every line carries text, start, and duration.
Start your web scraping journey with 200 free credits. Test our service and upgrade to one of the plans below. Cancel anytime.

I got the free trial and in less than a minute I already integrated with their API.
United States
I love how you can use it to scrape data from Google.
Oslo, Norway
Scrapingdog is an awesome service. I use it with my Local Leads Sniper system.
Mexico
Reliable, and simple to use! Itβs also inexpensive and has packaged solutions for every need (Google, LinkedIn). Highly recommend.
France
Yes, the API has a rate limit depending on your chosen subscription plan. For detailed information on request limits and how to manage them efficiently, please refer to the documentation or message us on live chat.
We have different APIs for different data. Along with the YouTube Transcript API, you can also extract YouTube Search, YouTube Comments & YouTube Channel data via API.
Our development team continuously monitors changes to the YouTube layout and updates our systems accordingly to ensure consistent and reliable data extraction, so that your data pipeline keeps going without breaking.
Each API request consumes a certain number of credits based on the dedicated API you're using. For example the Google Search API costs 5 credits per request. The number of credits required per request can vary depending on the specific API you're using.
Get 200 free credits to spin the API. No credit card required!