ytdl-org/youtube-dl · error · ExtractorError
This video is no longer available.
Error message
This video is no longer available.
What it means
Raised by TeamcocoIE._real_extract when the slug lookup POST to teamcoco.com/graphql returns the NotFoundSlug variant with a truthy status field — i.e. the Conan (Team Coco) site has no record for the display id parsed from the URL. The video page slug was removed, renamed, or never existed. Marked expected=True.
Source
Thrown at youtube_dl/extractor/teamcoco.py:131
response = self._graphql_call('''{
%%s(slug: "%%s") {
... on RecordSlug {
record {
%s
}
}
... on PageSlug {
child {
id
}
}
... on NotFoundSlug {
status
}
}
}''' % self._RECORD_TEMPL, 'Slug', display_id)
if response.get('status'):
raise ExtractorError('This video is no longer available.', expected=True)
child = response.get('child')
if child:
record = self._graphql_call('''{
%%s(id: "%%s") {
... on Video {
%s
}
}
}''' % self._RECORD_TEMPL, 'Record', child['id'])
else:
record = response['record']
video_id = record['id']
info = {
'id': video_id,
'display_id': display_id,
'title': record['title'],View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the URL opens on teamcoco.com; if it 404s, search the site for the clip and use the current slug.
- Find the clip on Team Coco's YouTube channel and extract from there instead.
- In batch jobs, catch this expected error and mark the slug retired rather than retrying.
Defensive patterns
Strategy: try-catch
Validate before calling
# Optional: pre-validate the slug via the same GraphQL endpoint
import json, urllib.request
q = '{ findSlug(slug: "%s") { ... on NotFoundSlug { status } } }' % slug
req = urllib.request.Request('https://teamcoco.com/graphql', data=json.dumps({'query': q}).encode(), headers={'Content-Type': 'application/json'})
resp = json.load(urllib.request.urlopen(req))['data']['findSlug']
if resp.get('status'):
print('slug retired:', slug) Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'no longer available' in str(e):
mark_slug_retired(slug)
else:
raise Prevention
- Treat NotFoundSlug status as permanent — do not retry the URL.
- Prefer current teamcoco.com slugs; old ones retire after site redesigns.
- Keep Team Coco YouTube URLs as fallback for deleted clips.
When it happens
Trigger: Extracting a teamcoco.com URL whose slug query resolves to {... on NotFoundSlug { status }} with non-empty status; note the extractor's own test carries skip='This video is no longer available.' because the old test clip was taken down.
Common situations: Conan clips deleted or re-slugged after site redesigns (the source tree itself marks one test as permanently unavailable); stale links from forums/Reddit; typo'd slugs.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/859dadda6c98a3f9.
Report an issue: GitHub.