YouTube Transcript Scraper
This service extracts YouTube transcripts from public video URLs through a production-grade delivery layer. It is designed for teams that want a simple input, stable output, and a high-availability experience without managing transcript infrastructure themselves.
Every request is routed through a dedicated transcript service where responses are normalized, input validation is enforced, and upstream failures are isolated behind a consistent contract. Only successful transcript results are returned.
Teams use this service for its reliability and clean output. It supports both single URLs and bulk URL arrays in a single run, with a maximum of 20 video URLs per request. The output can be returned as plain text, structured JSON, or both formats, making it suitable for downstream automations and data pipelines.
Common use cases include building AI and LLM training datasets, running content repurposing workflows, performing SEO and keyword analysis, and supporting media or research pipelines.
Extracts clean YouTube video transcripts from direct video URLs and returns them in structured JSON, plain text, or both formats for fast downstream automation and analysis.
Youtube to Transcript - Endpoint Features
| Object | Description |
|---|---|
Request Body |
[Required] Json |
{
"success": true,
"results": [
{
"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"videoId": "dQw4w9WgXcQ",
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"status": "ok",
"language": "en",
"transcript": [
{
"text": "[Music]",
"start": 0.32,
"dur": 14.26,
"lang": "en"
},
{
"text": "We're no strangers to",
"start": 18.8,
"dur": 7.16,
"lang": "en"
},
{
"text": "love. You know the rules and so do",
"start": 21.8,
"dur": 7.32,
"lang": "en"
},
{
"text": "I. I feel commitments from what I'm",
"start": 25.96,
"dur": 4.32,
"lang": "en"
},
{
"text": "thinking",
"start": 29.12,
"dur": 5.24,
"lang": "en"
},
{
"text": "of. You wouldn't get this from any other",
"start": 30.28,
"dur": 9.28,
"lang": "en"
},
{
"text": "guy. I just want to tell you how I'm",
"start": 34.36,
"dur": 8.76,
"lang": "en"
},
{
"text": "feeling. Got to make you understand.",
"start": 39.56,
"dur": 6.28,
"lang": "en"
},
{
"text": "Never going to give you up. I'm going to",
"start": 43.12,
"dur": 6.08,
"lang": "en"
},
{
"text": "let you down. I'm going to run around",
"start": 45.84,
"dur": 7.48,
"lang": "en"
},
{
"text": "and desert you. I'm going to make",
"start": 49.2,
"dur": 7.2,
"lang": "en"
},
{
"text": "you say goodbye.",
"start": 53.32,
"dur": 6.56,
"lang": "en"
},
{
"text": "Tell a lie and hurt",
"start": 56.4,
"dur": 7.64,
"lang": "en"
},
{
"text": "you. We've known each other for so",
"start": 59.88,
"dur": 7.32,
"lang": "en"
},
{
"text": "long. Your heart's been aching, but",
"start": 64.04,
"dur": 6.52,
"lang": "en"
},
{
"text": "you're too shy to say we don't know",
"start": 67.2,
"dur": 5.4,
"lang": "en"
},
{
"text": "what's been going",
"start": 70.56,
"dur": 7.24,
"lang": "en"
},
{
"text": "on. We know the game and we're going to",
"start": 72.6,
"dur": 8.88,
"lang": "en"
},
{
"text": "play. If you ask me how I'm",
"start": 77.8,
"dur": 6.76,
"lang": "en"
},
{
"text": "feeling, don't tell me your truth. to",
"start": 81.48,
"dur": 6.84,
"lang": "en"
},
{
"text": "see. I will give",
"start": 84.56,
"dur": 3.76,
"lang": "en"
},
{
"text": "you",
"start": 89.88,
"dur": 4.84,
"lang": "en"
},
{
"text": "around",
"start": 91.72,
"dur": 3,
"lang": "en"
},
{
"text": "you. I will say",
"start": 95,
"dur": 4.04,
"lang": "en"
},
{
"text": "goodbye and hurt you. I will give",
"start": 99.56,
"dur": 7.2,
"lang": "en"
},
{
"text": "[Music]",
"start": 103.99,
"dur": 4.61,
"lang": "en"
},
{
"text": "you",
"start": 106.76,
"dur": 9.16,
"lang": "en"
},
{
"text": "around you. I will leave you. I will say",
"start": 108.6,
"dur": 7.32,
"lang": "en"
},
{
"text": "goodbye and hurt you.",
"start": 116.44,
"dur": 4.64,
"lang": "en"
},
{
"text": "Never going to give. Never going to",
"start": 128.32,
"dur": 4.24,
"lang": "en"
},
{
"text": "give.",
"start": 129.76,
"dur": 4.24,
"lang": "en"
},
{
"text": "Never going to give. Never going to",
"start": 132.56,
"dur": 4.24,
"lang": "en"
},
{
"text": "give.",
"start": 134,
"dur": 7.04,
"lang": "en"
},
{
"text": "We've known each other for so long.",
"start": 136.8,
"dur": 6.88,
"lang": "en"
},
{
"text": "Your heart's been aching, but you're too",
"start": 141.04,
"dur": 6.48,
"lang": "en"
},
{
"text": "shy to say it. We both know what's been",
"start": 143.68,
"dur": 4.84,
"lang": "en"
},
{
"text": "going",
"start": 147.52,
"dur": 4.72,
"lang": "en"
},
{
"text": "on. We know the game and we're going to",
"start": 148.52,
"dur": 9.28,
"lang": "en"
},
{
"text": "play it. I just want to tell you how I'm",
"start": 152.24,
"dur": 9.12,
"lang": "en"
},
{
"text": "feeling. Got to make you understand.",
"start": 157.8,
"dur": 6.12,
"lang": "en"
},
{
"text": "Never going to give you up. Never going",
"start": 161.36,
"dur": 5.44,
"lang": "en"
},
{
"text": "to let you down. Never going to run",
"start": 163.92,
"dur": 7.36,
"lang": "en"
},
{
"text": "around and desert you. Heat.",
"start": 166.8,
"dur": 4.48,
"lang": "en"
},
{
"text": "[Music]",
"start": 172.33,
"dur": 10.43,
"lang": "en"
},
{
"text": "Heat. Heat. Heat.",
"start": 178.76,
"dur": 4,
"lang": "en"
},
{
"text": "[Music]",
"start": 183.39,
"dur": 11.81,
"lang": "en"
},
{
"text": "Never going to tell a lie and hurt you.",
"start": 191.04,
"dur": 6.72,
"lang": "en"
},
{
"text": "Never going to give you up. Never going",
"start": 195.2,
"dur": 5.44,
"lang": "en"
},
{
"text": "to let you down. Never going to run",
"start": 197.76,
"dur": 6.48,
"lang": "en"
},
{
"text": "around and desert you. Never going to",
"start": 200.64,
"dur": 6.2,
"lang": "en"
},
{
"text": "make you cry. Never going to say",
"start": 204.24,
"dur": 7.64,
"lang": "en"
},
{
"text": "goodbye. Never going to say goodbye.",
"start": 206.84,
"dur": 5.04,
"lang": "en"
}
],
"transcriptText": "[Music] We're no strangers to love. You know the rules and so do I. I feel commitments from what I'm thinking of. You wouldn't get this from any other guy. I just want to tell you how I'm feeling. Got to make you understand. Never going to give you up. I'm going to let you down. I'm going to run around and desert you. I'm going to make you say goodbye. Tell a lie and hurt you. We've known each other for so long. Your heart's been aching, but you're too shy to say we don't know what's been going on. We know the game and we're going to play. If you ask me how I'm feeling, don't tell me your truth. to see. I will give you around you. I will say goodbye and hurt you. I will give [Music] you around you. I will leave you. I will say goodbye and hurt you. Never going to give. Never going to give. Never going to give. Never going to give. We've known each other for so long. Your heart's been aching, but you're too shy to say it. We both know what's been going on. We know the game and we're going to play it. I just want to tell you how I'm feeling. Got to make you understand. Never going to give you up. Never going to let you down. Never going to run around and desert you. Heat. [Music] Heat. Heat. Heat. [Music] Never going to tell a lie and hurt you. Never going to give you up. Never going to let you down. Never going to run around and desert you. Never going to make you cry. Never going to say goodbye. Never going to say goodbye."
}
],
"meta": {
"requested": 1,
"succeeded": 1,
"failed": 0,
"outputFormat": "both",
"concurrency": 10,
"maxVideoUrls": 20
}
}
curl --location --request POST 'https://zylalabs.com/api/12409/youtube+to+transcript+api/23478/youtube+to+transcript' --header 'Authorization: Bearer YOUR_API_KEY'
--data-raw '{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"outputFormat": "both",
"lang": "en"
}'
| Header | Description |
|---|---|
Authorization
|
[Required] Should be Bearer access_key. See "Your API Access Key" above when you are subscribed. |
No long-term commitment. Upgrade, downgrade, or cancel anytime.
The API returns transcriptions of YouTube videos, including text segments with timestamps, language information, and the status of the request. The output can be in plain text, structured JSON, or both formats.
Key fields in the response include `inputUrl`, `videoId`, `videoUrl`, `status`, `language`, and `transcript`, which contains an array of text segments with their respective `text`, `start`, and `dur` (duration) values.
The response data is structured with a top-level `success` boolean, followed by a `results` array. Each result object includes video metadata and a `transcript` array detailing the spoken content with timestamps.
The API provides transcriptions of spoken content from public YouTube videos, including text, timestamps, and language details. It supports both individual URLs and batch requests of up to 20 URLs.
Users can customize requests by providing one or multiple YouTube video URLs in the request body. The API processes these URLs and returns the corresponding transcriptions in the specified format.
Common use cases include creating training datasets for AI models, content repurposing workflows, SEO analysis, keyword research, and supporting media or research pipelines.
The API utilizes a dedicated transcription service that normalizes responses and applies input validation. This ensures that only successful transcriptions are returned, enhancing overall data quality.
Users can leverage the structured JSON format for easy integration into applications, enabling automated analysis, content indexing, or further processing in data pipelines.
To obtain your API key, you first need to sign in to your account and subscribe to the API you want to use. Once subscribed, go to your Profile, open the Subscription section, and select the specific API. Your API key will be available there and can be used to authenticate your requests.
You can’t switch APIs during the free trial. If you subscribe to a different API, your trial will end and the new subscription will start as a paid plan.
If you don’t cancel before the 7th day, your free trial will end automatically and your subscription will switch to a paid plan under the same plan you originally subscribed to, meaning you will be charged and gain access to the API calls included in that plan.
The free trial ends when you reach 50 API requests or after 7 days, whichever comes first.
No, the free trial is available only once, so we recommend using it on the API that interests you the most. Most of our APIs offer a free trial, but some may not include this option.
Yes, we offer a 7-day free trial that allows you to make up to 50 API calls at no cost, so you can test our APIs without any commitment.
Zyla API Hub is like a big store for APIs, where you can find thousands of them all in one place. We also offer dedicated support and real-time monitoring of all APIs. Once you sign up, you can pick and choose which APIs you want to use. Just remember, each API needs its own subscription. But if you subscribe to multiple ones, you'll use the same key for all of them, making things easier for you.
Service Level:
100%
Response Time:
1,827ms
Service Level:
100%
Response Time:
1,360ms
Service Level:
100%
Response Time:
20,003ms
Service Level:
100%
Response Time:
657ms
Service Level:
100%
Response Time:
12,198ms
Service Level:
100%
Response Time:
11,754ms
Service Level:
100%
Response Time:
2,985ms
Service Level:
100%
Response Time:
4,831ms
Service Level:
100%
Response Time:
88ms
Service Level:
100%
Response Time:
1,099ms