The error#
All player responses are invalid. Your IP is likely being blocked by YoutubeThat ExtractorError is raised with expected=True when every client was skipped because the player response was for a different video id. The spelling Youtube is the string in the source.
If no player response was collected and clients were not skipped that way, the other raise is:
Failed to extract any player responseThat one is not marked expected. Network failures use HTTPError from yt_dlp.networking.exceptions, whose message is HTTP Error {status}: {reason}.
What triggers it#
_extract_player_responses skips a client when the player response's video id is not the one you asked for. If every requested client is skipped, you get the IP sentence. If the list is empty for another reason, you get Failed to extract any player response.
How to confirm#
Run the same URL from a residential connection. If the laptop extracts formats and the server raises the IP sentence, the server's address is what changed. If both sides raise Failed to extract any player response, the player clients returned nothing, which is a different branch in the same function.
Fixes#
yt-dlp's message attributes this to the IP. A different exit IP is the change that matches that sentence. Cookies do not select this branch. The sign-in page covers the case where the reason text contains sign in.
Passing --extractor-args for a PO token is a different warning. It says formats may yield HTTP Error 403. See the PO token page.
SocialScrape#
Video details are GET /v1/youtube/video. Transcripts are GET /v1/youtube/video/transcript: the video's own captions. A video with no captions returns transcript_unavailable and costs nothing. AI transcription of YouTube audio is not available yet.
Failed requests cost 0 credits. New accounts get 100 credits on signup, no card.