yt-dlp/yt-dlp · error · UnsupportedError

Unsupported URL: {url}

Error message

Unsupported URL: {url}

What it means

RumbleIE handles generic rumble.com listing pages (browse, browse/live, /search/video?q=...) by scanning the downloaded HTML for Rumble embed links via RumbleEmbedIE.extract_from_webpage. If the page contains no embeddable video, it raises UnsupportedError(url) — the same 'Unsupported URL: <url>' error an unrecognized URL produces.

Source

Thrown at yt_dlp/extractor/rumble.py:362

            'title': 'Browse',
            'age_limit': 0,
        },
    }, {
        'url': 'https://rumble.com/search/video?q=rumble&sort=views',
        'playlist_mincount': 24,
        'info_dict': {
            'id': 'video?q=rumble&sort=views',
            'title': 'Search results for: rumble',
            'age_limit': 0,
        },
    }]

    def _real_extract(self, url):
        page_id = self._match_id(url)
        webpage = self._download_webpage(url, page_id)
        url_info = next(RumbleEmbedIE.extract_from_webpage(self._downloader, url, webpage), None)
        if not url_info:
            raise UnsupportedError(url)

        return {
            '_type': 'url_transparent',
            'ie_key': url_info['ie_key'],
            'url': url_info['url'],
            'release_timestamp': parse_iso8601(self._search_regex(
                r'(?:Livestream begins|Streamed on):\s+<time datetime="([^"]+)', webpage, 'release date', default=None)),
            'view_count': int_or_none(self._search_regex(
                r'"userInteractionCount"\s*:\s*(\d+)', webpage, 'view count', default=None)),
            'like_count': parse_count(self._search_regex(
                r'<span data-js="rumbles_up_votes">\s*([\d,.KM]+)', webpage, 'like count', default=None)),
            'dislike_count': parse_count(self._search_regex(
                r'<span data-js="rumbles_down_votes">\s*([\d,.KM]+)', webpage, 'dislike count', default=None)),
            'description': clean_html(get_element_by_class('media-description', webpage)),
        }


class RumbleChannelIE(InfoExtractor):

View on GitHub (pinned to 81ecd58b13)

Solutions

  1. Open the same search/browse URL in a browser to confirm it actually lists results
  2. Try a broader search term, or use a direct video URL copied from the browser
  3. Update yt-dlp (yt-dlp -U)
  4. For channels, use the dedicated channel/user playlist URLs instead of search
Defensive patterns

Strategy: try-catch

Try / catch

from yt_dlp.utils import DownloadError, ExtractorError, UnsupportedError

try:
    results = ydl.extract_info(f'rumblesearch:{query}', download=False)
except UnsupportedError:
    results = None  # page had no embeddable videos; treat as empty result set
except (ExtractorError, DownloadError) as e:
    if 'Unsupported URL' in str(e):
        results = None
    else:
        raise

Prevention

When it happens

Trigger: A rumble.com browse or search page whose results contain no embeddable videos: zero search results for the term, results rendered only client-side, or a markup change that hides the embed links from the static HTML.

Common situations: Searching a term with no results; Rumble markup changes after your yt-dlp version; scraping search pages that now load results via JS.

Related errors


AI-assisted analysis of yt-dlp/yt-dlp@81ecd58b13 (2026-08-22). Data as JSON: /api/errors/d99024397322d873. Report an issue: GitHub.