ErrLookup › Background articles › ExtractorError in yt-dlp and youtube-dl: what 'said:' messages, login-required errors, and 'Cannot parse data' mean

ExtractorError in yt-dlp and youtube-dl: what 'said:' messages, login-required errors, and 'Cannot parse data' mean

ExtractorError is what yt-dlp and youtube-dl raise when a per-site extractor cannot turn a page or API response into downloadable media: the content needs login, is geo-blocked or removed, the site changed its markup or API since your build was released, or your requests tripped rate limiting. The message often quotes the provider's own text ('YouTube said:', 'Tencent said:', 'This video is only available for registered users', 'Cannot parse data'), which names the real cause. This article covers the mechanisms behind the family's 1137 documented records and the fixes that hold across all of them.

Distilled from 1,137 documented records across 2 repositories.

Background

Both tools are built from per-site modules called extractors, and ExtractorError is the exception class an extractor raises when it cannot produce playable formats or metadata from what the site returned. From the caller's side it is the point where a job stops for one URL: the CLI prints the message and either aborts the extraction (a broken Audiomack album tag kills the whole album run; a broken YouTube comment reply thread aborts the comment download) or skips it when --ignoreerrors is set. The message text comes from two places. Extractor-written strings describe what could not be found: 'Failed to find IDEC id', 'Unable to extract brightcove Video ID', 'No chapters found for course'. Server-forwarded strings quote the provider verbatim: 'LBRY said:', 'Tencent said:', 'NRK said:', YouTube alert text such as 'This video is private', the BBC player's on-page error banner, or the abstract attribute of a thePlatform SMIL fault document.

The class carries an expected flag that changes how the failure should be read. expected=True marks normal site refusals (login walls, geo-restriction, expired rights, unknown ids, risk-control replies), while unmarked raises such as FanCode's missing brightcove id, Facebook's 'Cannot parse data', or UkColumn's 'No embedded video found' usually mean the extractor's assumptions no longer match the live site, which reads as a bug or a staleness problem. Dedicated helpers generate whole sub-families: raise_login_required produces the default 'This video is only available for registered users' plus a login hint, and raise_geo_restricted fires before the generic path on several sites. Several raises also degrade to warnings instead: with ignoreerrors, with --ignore-no-formats-error on metadata-only runs, or when a helper is called with fatal=False as a probe.

Where the failure sits varies by how the site serves data. API-envelope sites (Bilibili, LBRY, Tencent, Polsat Go, NRK, Epicon) answer HTTP 200 with an internal error code and message that the extractor re-raises, so the server's own text reaches you. Scraping extractors (Facebook, LearningOnScreen, CeskaTelevize, Nowness) instead fail with generic 'cannot find/parse' messages when page markup or embedded JSON drifts from what the code traverses. The family spans two repositories: ytdl-org/youtube-dl, the original project, and yt-dlp, its actively maintained fork where extractor fixes are expected to land (Facebook 'markup changes get fixed', Bilibili WBI keys 'change frequently'). That split is itself a cause: an outdated build, or the original youtube-dl where fixes never arrived, reproduces errors current yt-dlp no longer has.

The forwarded messages also tell you whether a failure is retryable. Bilibili risk-control replies gain 'please wait and try later'; YouTube intermittently truncates comment reply-thread continuations; api.lbry.tv has known transient failures. Others are permanent for that URL: NRK programs whose streaming rights lapsed, abandoned LBRY claims, private or deleted YouTube videos, delisted Nintendo Directs. Reading the text before retrying is the core skill this family teaches.

Common causes

What usually fixes it

Go deeper

Documented occurrences

…and 1,117 more across the corpus — use search.

Honest provenance: generated on 2026-08-22 from AI-assisted analysis of the linked records. See how records are made.