ytdl-org/youtube-dl · error · ExtractorError
Unable to login: %s some documents. Go to pluralsight.com, l
Error message
Unable to login: %s some documents. Go to pluralsight.com, log in and agree with what Pluralsight requires.
What it means
Raised by PluralsightIE._login when the login response lacks all success markers but contains agreement UI strings ('To continue using Pluralsight, you must agree to', '>Disagree<', '>Agree<'). Pluralsight requires accepting updated terms/policies, which the CLI login flow cannot do, so the user is directed to the website to agree.
Source
Thrown at youtube_dl/extractor/pluralsight.py:210
headers={'Content-Type': 'application/x-www-form-urlencoded'})
error = self._search_regex(
r'<span[^>]+class="field-validation-error"[^>]*>([^<]+)</span>',
response, 'error message', default=None)
if error:
raise ExtractorError('Unable to login: %s' % error, expected=True)
if all(not re.search(p, response) for p in (
r'__INITIAL_STATE__', r'["\']currentUser["\']',
# new layout?
r'>\s*Sign out\s*<')):
BLOCKED = 'Your account has been blocked due to suspicious activity'
if BLOCKED in response:
raise ExtractorError(
'Unable to login: %s' % BLOCKED, expected=True)
MUST_AGREE = 'To continue using Pluralsight, you must agree to'
if any(p in response for p in (MUST_AGREE, '>Disagree<', '>Agree<')):
raise ExtractorError(
'Unable to login: %s some documents. Go to pluralsight.com, '
'log in and agree with what Pluralsight requires.'
% MUST_AGREE, expected=True)
raise ExtractorError('Unable to log in')
def _get_subtitles(self, author, clip_idx, clip_id, lang, name, duration, video_id):
captions = None
if clip_id:
captions = self._download_json(
'%s/transcript/api/v1/caption/json/%s/%s'
% (self._API_BASE, clip_id, lang), video_id,
'Downloading captions JSON', 'Unable to download captions JSON',
fatal=False)
if not captions:
captions_post = {
'a': author,
'cn': int(clip_idx),View on GitHub (pinned to 956b8c5855)
Solutions
- Log in at pluralsight.com in a browser and click Agree on the pending documents
- Then re-export cookies (--cookies) or retry credential login
- Repeat whenever Pluralsight publishes new mandatory agreements
Example fix
# before: scripted login hits the agreement wall youtube_dl --username me@example.com --password '...' PS_URL # after: agree once in browser, export session, then youtube_dl --cookies cookies.txt PS_URL
Defensive patterns
Strategy: fallback
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if 'you must agree to' in str(e):
pause_batch('Log in at pluralsight.com and accept the new terms, then rerun') Prevention
- Agree to new Pluralsight documents in a browser whenever they appear
- Use --cookies after agreeing so the CLI never needs to
- Expect this after long gaps between uses
When it happens
Trigger: Pluralsight ships new ToS/privacy documents; any login (API or scripted) returns the agreement interstitial. Detected only after the field-validation and blocked-account checks pass.
Common situations: Long-unused accounts returning after Pluralsight policy updates; automation accounts that never render pages; recurring occurrence each time new documents are published.
Related errors
- Unable to login: %s
- Unable to login: %s
- self._parse_json(e.cause.read(), None)['errorMessage']
- %s said: %s
- Unable to log in
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/fa0ca1f895844b60.
Report an issue: GitHub.