Paste a link
A watch link, a youtu.be link, a Shorts link or the 11-character video ID.
Paste a link. Get the captions as text, with timestamps.
A watch link, a youtu.be link, a Shorts link or the 11-character video ID.
Each line comes back with its start time. Auto-generated captions count.
Copy the text, or save it as .txt or .srt for subtitles.
Paste a link and get the text. No signup, no extension, nothing to install.
Each caption keeps its start time, so you can jump back to the moment it was said.
.txt or .srt.Give an agent or a search index the words in a video, with times attached.
Download an .srt file and load it into a video editor or player.
Search a lecture or a talk as text, and cite the time a point was made.
Start a blog post, a summary or show notes from what was actually said.
1curl -G "https://api.socialscrape.dev/v1/youtube/video/transcript" \2 -H "x-api-key: $SOCIALSCRAPE_API_KEY" \3 --data-urlencode "id=dQw4w9WgXcQ" \4 --data-urlencode "language=de"1import os2import requests34params = {5 "id": "dQw4w9WgXcQ",6 "language": "de",7}8res = requests.get(9 "https://api.socialscrape.dev/v1/youtube/video/transcript",10 headers={"x-api-key": os.environ["SOCIALSCRAPE_API_KEY"]},11 params=params,12)13body = res.json()1415if body["ok"]:16 print(body["data"])17else:18 print(body["error"]["code"], body["error"]["message"])1const url = new URL("https://api.socialscrape.dev/v1/youtube/video/transcript");2url.search = new URLSearchParams({3 "id": "dQw4w9WgXcQ",4 "language": "de"5}).toString();6const res = await fetch(url, {7 headers: { "x-api-key": process.env.SOCIALSCRAPE_API_KEY! },8});9const body = await res.json();1011if (body.ok) {12 console.log(body.data);13} else {14 console.error(body.error.code, body.error.message);15}{ "ok": true, "credits_charged": 1, "credits_remaining": 4999, "cached": false, "cached_at": null, "request_id": "req_e45a821caf0eddcb356f1b98", "data": { "object": "transcript", "platform": "youtube", "video_id": "dQw4w9WgXcQ", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "language": "de-DE", "source": "captions", "duration_seconds": 213, "text": "Uns beiden ist die Liebe nicht fremd Du kennst die Regeln genau wie ich Für mich zählst nur du Das kriegst du sonst von keinem hier Ich will dir sagen, wie ich fühle Damit du es auch verstehst Ich geb dich niemals auf Lass dich niemals im S...", "segments": [ { "start": 18.64, "end": 21.880000000000003, "text": "Uns beiden ist die Liebe nicht fremd" }, { "start": 22.64, "end": 26.96, "text": "Du kennst die Regeln genau wie ich" }, { "start": 27.04, "end": 31.04, "text": "Für mich zählst nur du" } ], "available_languages": [ "de-DE", "en", "es-419" ], "extra": { "language_name": "German (Germany)", "tracks": [ { "auto": false, "code": "en", "name": "English" }, { "auto": true, "code": "en", "name": "English (auto-generated)" }, { "auto": false, "code": "de-DE", "name": "German (Germany)" } ] } }, "cursor": null, "has_more": null }
The video has no captions, uploaded or generated, so there is nothing to read. Failed lookups cost nothing in the API.
The video's default track. The result lists the other languages on offer. To pick one in your own code, send the language parameter.
Yes. No account and no card. Each visitor gets a limited number of lookups an hour, so it stays free for everyone.
Send GET /v1/youtube/video/transcript with your key in the x-api-key header. A request costs 1 credit for captions; AI transcription 1 up to 2 minutes, then 5 per started minute of the whole video. A repeat of something fetched recently costs 0 credits, and failed requests are free. See the reference.