Blog/Social data
5 min read

Download YouTube Thumbnails for a List of Videos, Only Those That Exist

Download YouTube thumbnails for one video or a whole list: the free URL pattern, which of the six names exist, and one call per video for metadata.

Download YouTube Thumbnails for a List of Videos, Only Those That Exist

Get the thumbnail, title and channel for a list of YouTube videos in one prompt. Paste this into your agent:

Set up https://monid.ai/SKILL.md, and then use Monid to take these YouTube video URLs, check which thumbnail sizes exist for each one, and give me a table with the title, the channel, the length and the largest thumbnail that actually loads.

One prompt resolves a whole list. 1 min setup · 3-6 hrs saved.

You have one YouTube video, or three hundred, and you want the thumbnail images on disk with a title next to each. For one video a browser is enough. For a list, the question is which image names exist for each video, because some do not, and a missing one is a 404 on an image tag. This guide shows the free URL pattern, a re-measurement of all six names on four videos (run 2026-10-16), and the call that returns the title, channel and length. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.

What is the easiest way to download YouTube thumbnails for a list of videos?

Monid. Install it once, add a key, and your agent resolves each video, reads the thumbnail URL and the title, and checks the image, with no portal, no plan and no vendor account to set up.

  • Pay per call. One video record is billed on its own, at $0.001 (Verified 2026-10-16 on the YouTube tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
  • One install, every tool. The same key and the same balance call YouTube and every other source on Monid, so the next job (comments, a channel's videos, TikTok) needs no new account. Writing and maintaining each of those yourself is the 3 to 6 hours this page claims to save.
  • Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them. Your agent reads SKILL.md and learns the rest, so setup is about a minute.

At that price a list of 300 videos is 300 calls, $0.30 (Verified 2026-10-16). The images themselves are free to fetch, as the next section shows.

📖 See also Social Media Scraping API: TikTok, Instagram, X and More

How do you download a YouTube thumbnail from a video URL?

Take the video id out of the link and put it in an image path.

The video id

In https://www.youtube.com/watch?v=dQw4w9WgXcQ the id is dQw4w9WgXcQ, the value of v. On a youtu.be/dQw4w9WgXcQ short link it is the path. The id is eleven characters.

The URL

https://i.ytimg.com/vi/{VIDEO_ID}/maxresdefault.jpg

Paste that into a browser, with your id in place, and save the image. There is no key, no login and no quota on the request itself.

The six names

The same folder serves six file names: default, mqdefault, hqdefault, sddefault, maxresdefault and hq720, each with a .jpg ending. They differ in size, from a small preview to the largest image the uploader supplied. The next section measures which of them answered.

Which YouTube thumbnail URLs actually exist?

default, mqdefault and hqdefault answered for all four videos we tried. sddefault, maxresdefault and hq720 answered for three of the four. On 2026-10-16 we sent one HEAD request per name per video and recorded the status and the size in bytes.

NameAnsweredBytes, smallest to largest seen
default4 of 42,638 to 4,523
mqdefault4 of 48,710 to 17,034
hqdefault4 of 414,255 to 32,195
sddefault3 of 431,029 to 50,216
maxresdefault3 of 465,324 to 115,992
hq7203 of 465,324 to 179,638

All three failures were the same video

The three misses were one video, jNQXAC9IVRw, the oldest upload in our set (2005). The three smaller names answered for it. For the three larger names there is no redirect to a smaller size and no error text, just a 404 on an image tag.

The rule: the large names track what was uploaded, not what YouTube can serve. An old clip or a low-resolution upload may have none of them, so do not write maxresdefault into a page by reflex.

The size spread is a storage decision

On one video, aqz-KE-bpKQ, the smallest working name was 4,120 bytes and the largest was 179,638, a factor of 44. If you cache thumbnails for thousands of videos, that ratio is your storage bill, and "the biggest one" is a choice with a number attached.

maxresdefault and hq720 are not reliably the same file

On two of the three videos where both existed, the two names returned identical sizes (65,324 and 115,992 bytes). On the third they differed, 108,323 against 179,638. Treat them as two names that often agree, and write no code that assumes one implies the other.

How do you get the thumbnail, title and channel for many videos?

Put the video ids in a file, check which image names exist for each, and call the video endpoint for the title and channel. The call returns the thumbnail URL the platform itself reports, so you also see which videos have none.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

One video, with metadata

monid run -p tikhub -e /api/v1/youtube/web_v2/get_video_info_v2 \
  --query '{"video_id":"dQw4w9WgXcQ"}'

This is a GET endpoint, so the id goes in --query. It takes video_id or video_url, and video_id wins when you send both.

The free ladder, for when you only need the image

Walk the names from best to worst and stop at the first 200. A HEAD request is enough, so you never download an image to find out it exists:

for n in maxresdefault sddefault hqdefault mqdefault default; do
  code=$(curl -s -o /dev/null -w '%{http_code}' -I "https://i.ytimg.com/vi/$ID/$n.jpg")
  [ "$code" = "200" ] && echo "$n" && break
done

Leave hq720 out of a ladder like that. It sits at the same nominal size as maxresdefault, it failed on the same video, and on our sample it was sometimes a different file.

Loop it over a list

Put one video id per line in ids.txt, then run:

mkdir -p out
while read -r ID; do
  monid run -p tikhub -e /api/v1/youtube/web_v2/get_video_info_v2 \
    --query "{\"video_id\":\"$ID\"}" > "out/$ID.json"
done < ids.txt

Each video writes one file. Read thumbnail_url and playability_status from each, and run the ladder only for the ones where the record is thin. Keep the id as the key in your own store and add a fetched-at timestamp, because uploaders replace thumbnails; a list of ids you walk once and resolve one call each is the same pattern as reading a Telegram channel without a bot token.

Or hand the whole job to an agent

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to for these 300 youtube urls give me title, channel, length and the largest thumbnail that returns 200, then flag the ones with no large thumbnail at all.

Can you download YouTube thumbnails yourself with Python?

Yes, and for the image alone it is a few lines: build the URL, send a HEAD request, save the first 200. That is the free ladder above in Python, and it needs no key.

import requests

def best_thumbnail(video_id):
    for name in ["maxresdefault", "sddefault", "hqdefault", "mqdefault", "default"]:
        url = f"https://i.ytimg.com/vi/{video_id}/{name}.jpg"
        if requests.head(url, timeout=10).status_code == 200:
            return url

The work starts when you want more than the image. A title, a channel and a length mean parsing a watch page or running a downloader library, and both break when the page changes; the upkeep is yours. The rules side matters too: what you may fetch and keep depends on where you operate and what you do with it, so read the platform's terms for your case.

For the metadata, a call to Monid replaces the parsing. The collection is maintained for you, the output is typed JSON, and a video is $0.001 (Verified 2026-10-16). If you want to see the free-library route first, free YouTube transcript hacks against a reliable API shows where it stops being worth it.

What does a YouTube video record look like, and what can you build with it?

One flat record per video, with the thumbnail URL inside it. We ran the endpoint twice on 2026-10-16, on dQw4w9WgXcQ and on jNQXAC9IVRw, so the fields below are what came back. Each call returned HTTP 200 in about 3 seconds.

The record

{ "video_id": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "author": "Rick Astley",
  "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
  "channel_handle": "@RickAstleyYT",
  "channel_url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
  "length_seconds": "213",
  "view_count": "1827430027",
  "like_count": "19488717",
  "comment_count": "245万",
  "publish_date": "2009-10-24T23:57:33-07:00",
  "category": "Music",
  "playability_status": "OK",
  "thumbnails": [ { "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
                    "width": 1280, "height": 720 } ],
  "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" }

The record also held description, keywords, six captions tracks, endscreen entries and the channel avatar. thumbnails held one entry, the maxresdefault URL at 1280 by 720, not a list of every size.

The old video came back thin

For jNQXAC9IVRw the same call returned thumbnails: [], thumbnail_url: null, playability_status: "LOGIN_REQUIRED" and an empty length_seconds. That matches the image check: the video that had no large images in the HEAD table is the one with no thumbnail in the record. The description field held text about a different video, so read playability_status before you trust any field.

What you can build with it

  • A contact sheet or newsletter strip. Title, channel and the image URL are on each record, so a captioned grid is one loop away.
  • A thumbnail audit for a channel. Pull the videos of a channel (see getting past the YouTube Data API quota for the listing endpoints), then resolve each one and compare the sizes.
  • A filter before you download. length_seconds lets you drop a livestream before you fetch a single image.

Which endpoint should I use for which job?

EndpointInputReturnsLatencyBilling
tikhub/api/v1/youtube/web_v2/get_video_info_v2video_id or video_urlTitle, channel, length, counts, thumbnail URLAbout 3 s herePer call, $0.001 (Verified 2026-10-16)
dataforseo/serp/youtube-organicA search queryRanked videos for a query, to find idsNot run for this postPer call, $0.002 (Verified 2026-10-16)
i.ytimg.com/vi/{id}/{name}.jpgVideo idOne image, or a 404Under 1 sFree, no key

The first row was run on 2026-10-16. The second was inspected the same day and not run for this post. The last row is not ours; it is in the table because it is the right answer when you only need an image.

The pipeline most people want is the search row to find the videos, the first row to resolve each one, and the last row to fetch the image you already know exists. Current prices live on monid.ai/tools.

When is another route a better fit?

You have one video. Paste the URL into a browser and save the image. Everything above is about lists and certainty.

You only need a small image. hqdefault answered for all four of our videos, between 14,255 and 32,195 bytes. If your layout shows a card, the missing-image problem does not touch you.

You want the video, the audio or the words. A thumbnail is a poster image. A transcript or a download is a different job with different endpoints.

You plan to republish the artwork. A thumbnail belongs to the uploader. Showing it next to a link that credits the video is one thing; copying a set of thumbnails into your own catalogue is another. Rules differ by country and by use, so check yours.

And the disclosure: we resell the video endpoint in the table, and the first thing this post tells you is that the free URL does the job for one image. The endpoint earns its call when you need the title, the channel or the length for many videos.

Conclusion

The quickest way to download YouTube thumbnails for a list of videos is to resolve each one with a single call through Monid, at $0.001 a video (Verified 2026-10-16), and to fetch the images from the free URL once you know they exist. Setup is about a minute, one key covers YouTube and everything else, and 300 videos cost $0.30.

Two things matter more than the choice of tool. The large names are conditional: sddefault, maxresdefault and hq720 returned 404 for the same old video, so check before you write them into a page. And a record can come back thin: for that video the endpoint returned an empty thumbnails list and LOGIN_REQUIRED, so test playability_status first.

How we estimated the time saved: building and maintaining your own fetcher is roughly 1 to 2 hours each for the existence check and ladder, the metadata parsing, and the first month of upkeep when a page changes. That is 3 to 6 hours. The 1 minute is the install, key and first call once you already have a Monid key.

Free next step: run monid inspect -p tikhub -e /api/v1/youtube/web_v2/get_video_info_v2, make one call on a video you know, and print thumbnail_url next to playability_status. Start at monid.ai.

FAQ

Does maxresdefault always exist?

No. It answered for three of our four videos on 2026-10-16 and returned 404 for the oldest upload. The larger names depend on what the uploader supplied, so a video that was never uploaded at high resolution has no maxresdefault, and nothing redirects you to a smaller size. Check with a HEAD request first, or read thumbnail_url from the video record: for that old video it came back null.

Which YouTube thumbnail size should I use?

Use hqdefault when a card or a list is enough: it answered for all four videos and stayed between 14,255 and 32,195 bytes. Use maxresdefault for a full-size image, with a fallback to sddefault and then hqdefault. The largest files we saw were hq720 at 179,638 bytes, so the biggest name is also the biggest download.

How do you get the thumbnail from a YouTube Shorts link?

Take the id from the last part of the Shorts link and use it in the same image path. The id is the eleven characters after /shorts/. The path is the same as for a normal video, and the video endpoint accepts a video_id or a video_url, so you can send either.

Can you use YouTube thumbnails in your own product?

A thumbnail is part of the uploader's work, and an open URL is not a licence. Showing it beside a link that credits the video and the channel is the usual use. Copying thumbnails into your own catalogue or an advert is a different act, and the rules differ by country and by use, so check yours before you build on them.

Published September 2026.

download youtube thumbnailyoutube thumbnail urlmaxresdefaultyoutube thumbnail apivideo metadata