I am trying to use pytube (v15.0.0) to fetch the titles of YouTube videos. However, for every video I try, my script fails with the same error: HTTP Error 400: Bad Request.
I have already updated pytube to the latest version by running pip install --upgrade pytube, but the problem persists.
Minimal, Reproducible Example
Here is the smallest possible script that demonstrates this problem. It only uses pytube and has no other dependencies. Anyone can copy and run this code to see the error.
import loggingfrom pytube import YouTube# Configure logging to see the error clearlylogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def fetch_video_title(video_id):""" Attempts to fetch a single video title using pytube. This function consistently fails.""" video_url = f"https://www.youtube.com/watch?v={video_id}" logging.info(f"Attempting to fetch title for: {video_url}") try: # Create a YouTube object yt = YouTube(video_url) # Accessing the .title attribute triggers the network request title = yt.title logging.info(f"SUCCESS: Title is '{title}'") return title except Exception as e: # The script always ends up here logging.error(f"FAILURE for video ID '{video_id}': {e}") return None# Main execution block to run the testif __name__ == "__main__": # A list of standard YouTube video IDs to test video_ids_to_test = ["G_Ttz9Dp5lI", "n2f2MPDScdc"] print("--- Starting Pytube Title Fetch Test ---") for video_id in video_ids_to_test: fetch_video_title(video_id) print("\n--- Test Finished ---")What I Get (Actual Output):
When I run the code above, the output clearly shows the HTTP Error 400 for each attempt:
--- Starting Pytube Title Fetch Test ---2025-08-14 12:30:00 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=G_Ttz9Dp5lI2025-08-14 12:30:02 - ERROR - FAILURE for video ID 'G_Ttz9Dp5lI': HTTP Error 400: Bad Request2025-08-14 12:30:02 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=n2f2MPDScdc2025-08-14 12:30:04 - ERROR - FAILURE for video ID 'n2f2MPDScdc': HTTP Error 400: Bad Request--- Test Finished ---What I Expect:
I expect the script to successfully connect to YouTube and print the title for each video, like this:
--- Starting Pytube Title Fetch Test ---2025-08-14 12:30:00 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=G_Ttz9Dp5lI2025-08-14 12:30:02 - INFO - SUCCESS: Title is '[Actual Video Title Here]'...--- Test Finished ---My Question:
Given that I am using the latest version of pytube and my code is very simple, is this HTTP 400 error a known, temporary issue with the library (e.g., YouTube changed something that broke pytube), or is there a mistake in my code that I am missing?