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

  1. Log in at pluralsight.com in a browser and click Agree on the pending documents
  2. Then re-export cookies (--cookies) or retry credential login
  3. 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

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


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/fa0ca1f895844b60. Report an issue: GitHub.