youtube-transcript-api errors
NoTranscriptFound in youtube-transcript-api
Why youtube-transcript-api finds no transcript in your language, how to list the transcripts a video has, and how to fetch or translate one.
Running this on a server? TranscriptFetch returns the same transcript from any IP, no proxies. Try it free →
The video has transcripts, just not in the languages you asked for. fetch() asks for English only unless you tell it otherwise.
The error
The message lists what the video does have. A real example, a video with French and Spanish captions:
youtube_transcript_api._errors.NoTranscriptFound:
Could not retrieve a transcript for the video https://www.youtube.com/watch?v=VIDEO_ID! This is most likely caused by:
No transcripts were found for any of the requested language codes: ('en',)
For this video (VIDEO_ID) transcripts are available in the following languages:
(MANUALLY CREATED)
- fr ("French")[TRANSLATABLE]
- es ("Spanish")[TRANSLATABLE]
(GENERATED)
- es ("Spanish (auto-generated)")[TRANSLATABLE]
(TRANSLATION LANGUAGES)
- en ("English")
...What triggers it
fetch(video_id) is a shortcut for list(video_id).find_transcript(languages).fetch(), and languages defaults to ("en",). find_transcript checks the codes in order, uploaded captions before auto-generated ones, and raises NoTranscriptFound when none of them exists.
Codes must match exactly: a track coded en-GB or en-US is not found by en.
Fixes
1. See what the video has
from youtube_transcript_api import YouTubeTranscriptApi
for t in YouTubeTranscriptApi().list(video_id):
print(t.language_code, t.language, "auto" if t.is_generated else "uploaded")2. Ask for every code you accept, in order
transcript = YouTubeTranscriptApi().fetch(video_id, languages=["en", "en-US", "en-GB", "es"])The first code that exists wins. Read transcript.language_code to see which one you got.
3. Choose uploaded or auto-generated captions explicitly
transcripts = YouTubeTranscriptApi().list(video_id)
uploaded = transcripts.find_manually_created_transcript(["en"])
automatic = transcripts.find_generated_transcript(["en"])4. Translate an existing transcript
transcripts = YouTubeTranscriptApi().list(video_id)
english = transcripts.find_transcript(["es"]).translate("en").fetch()Translation goes through a separate YouTube request, and it can be blocked when the original is not: in our test on 2026-10-19 translate("en") raised IpBlocked from a home connection while fetching the Spanish original worked. Catch it and fall back to the original language.
5. Take the transcript in whatever language it is
TranscriptFetch (our product) has no language list to get wrong: it returns the video's captions in their own language, says which in language, and transcribes the audio with AI when there are no captions at all. It does not translate.
# pip install transcriptfetch-sdk
from transcriptfetch import TranscriptFetch
tf = TranscriptFetch(api_key="tf_live_...")
t = tf.transcripts.video("https://www.youtube.com/watch?v=VIDEO_ID", timestamps=False)
print(t.language, t.text[:200])FAQ
The video shows English captions on YouTube, so why NoTranscriptFound?
Usually one of three things: the track is coded en-US or en-GB rather than en, YouTube is showing an automatic translation rather than a real English track, or the captions are burned into the picture, which makes them part of the image rather than a caption track.
Does NoTranscriptFound mean the video has no captions?
No. That is TranscriptsDisabled. NoTranscriptFound means there are captions, in other languages.
Which is better, uploaded or auto-generated captions?
Uploaded captions are usually more accurate, and find_transcript already prefers them when both exist in a language you asked for.
Need transcripts that work from a server?
TranscriptFetch fetches YouTube, TikTok and Instagram transcripts from its own network, with AI transcription when a video has no captions. Free credits every month, no card.