ytdl-org/youtube-dl · error · ExtractorError
Unable to find provider video id
Error message
Unable to find provider video id
What it means
VoxMedia provider-resolution error: after iterating the page's video entries (checking provider_video_type/provider_video_id for brightcove/youtube/etc.), no entry yielded a usable provider id, so the extractor gives up with 'Unable to find provider video id' (not expected — potentially a parsing gap).
Source
Thrown at youtube_dl/extractor/voxmedia.py:72
info['formats'] = formats
info['duration'] = int_or_none(asset.get('duration'))
return info
for provider_video_type in ('ooyala', 'youtube', 'brightcove'):
provider_video_id = video_data.get('%s_id' % provider_video_type)
if not provider_video_id:
continue
if provider_video_type == 'brightcove':
info['formats'] = self._extract_once_formats(provider_video_id)
self._sort_formats(info['formats'])
else:
info.update({
'_type': 'url_transparent',
'url': provider_video_id if provider_video_type == 'youtube' else '%s:%s' % (provider_video_type, provider_video_id),
'ie_key': provider_video_type.capitalize(),
})
return info
raise ExtractorError('Unable to find provider video id')
class VoxMediaIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?(?:(?:theverge|vox|sbnation|eater|polygon|curbed|racked|funnyordie)\.com|recode\.net)/(?:[^/]+/)*(?P<id>[^/?]+)'
_TESTS = [{
# Volume embed, Youtube
'url': 'http://www.theverge.com/2014/6/27/5849272/material-world-how-google-discovered-what-software-is-made-of',
'info_dict': {
'id': 'j4mLW6x17VM',
'ext': 'mp4',
'title': 'Material world: how Google discovered what software is made of',
'description': 'md5:dfc17e7715e3b542d66e33a109861382',
'upload_date': '20190710',
'uploader_id': 'TheVerge',
'uploader': 'The Verge',
},
'add_ie': ['Youtube'],
}, {View on GitHub (pinned to 956b8c5855)
Solutions
- Update to yt-dlp, which has newer VoxMedia handling for modern embeds
- Open the article, copy the underlying embed URL (youtube/brightcove) directly and download that
- Report the URL as a broken extractor to the tracker so the schema is updated
Defensive patterns
Strategy: fallback
Try / catch
from youtube_dl.utils import ExtractorError
try:
ydl.extract_info(article_url)
except ExtractorError as e:
if 'provider video id' in str(e):
# fallback: find the embed manually
embed = find_embed_url(fetch_html(article_url))
if embed:
ydl.extract_info(embed) Prevention
- Keep yt-dlp updated — its VoxMedia parser tracks schema changes
- Fall back to extracting the underlying YouTube/Brightcove embed directly
- Capture failing article URLs and report them upstream
When it happens
Trigger: A Vox Media article (theverge/vox/sbnation/eater/polygon/curbed/racked/recode) whose embedded video uses a provider or markup shape the entry loop does not recognize, so every entry is skipped via 'continue' and the final raise fires.
Common situations: Site redesigns changing the video-init JSON schema; new embed providers (e.g. streamed/Ooyala successors); articles with only newsletter-only or externally-hosted video.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/3e1f57f692070c59.
Report an issue: GitHub.