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.
{
"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, first sign in to your account and navigate to the API you want to use. From the API's Pricing section, choose a plan and complete the subscription process. Once subscribed, return to the API page and you will see your API Access Key displayed at the top of the documentation page. You can use this key 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.
The free trial lasts for 7 days and allows you to make up to 50 API requests.
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. If the API offers a free trial, you will see a "Free 7-Day Trial" option in its Pricing section. The trial lasts for 7 days and allows up to 50 API requests, enabling you to evaluate the API before subscribing to a paid plan.
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.
You can monitor your API usage through the response headers included with every request:
x-zyla-api-calls-monthly-used: Shows the total number of API requests you have used during the current billing period.
x-zyla-api-calls-monthly-remaining: Shows the number of API requests you have remaining for the current billing period.
Yes, you can cancel your subscription at any time. Simply go to the Pricing section of the API you're subscribed to and click the "Unsubscribe" button.
Please note that upgrades, downgrades, and cancellations take effect immediately. Once your subscription is canceled, access to the service will end immediately, regardless of any remaining API calls in your quota.
Please have a look at our Refund Policy: https://zylalabs.com/terms#refund
Service Level:
100%
Response Time:
210ms
Service Level:
100%
Response Time:
237ms
Service Level:
100%
Response Time:
152ms
Service Level:
100%
Response Time:
152ms
Service Level:
100%
Response Time:
122ms
Service Level:
100%
Response Time:
812ms
Service Level:
100%
Response Time:
364ms
Service Level:
100%
Response Time:
283ms
Service Level:
100%
Response Time:
261ms
Service Level:
100%
Response Time:
264ms