YouTube Thumbnail Extractor: all sizes, best available, bulk avatar

YouTube Thumbnail Extractor: all sizes, best available, bulk

Pricing

from $0.65 / 1,000 video thumbnails

Go to Apify Store
YouTube Thumbnail Extractor: all sizes, best available, bulk

YouTube Thumbnail Extractor: all sizes, best available, bulk

Thumbnail URLs of YouTube videos, up to 500 per run: every size from default to maxresdefault, which ones exist with their file size, the best available one with width and height, WebP variants, the three frame stills, plus video title, channel and watch URL. No downloads, no API key. Pay per video.

Pricing

from $0.65 / 1,000 video thumbnails

Rating

0.0

(0)

Developer

Steadydata Team

Steadydata Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Thumbnail URLs of YouTube videos, up to 500 per run: every size from default to maxresdefault, which ones exist with their file size, the best available one with width and height, WebP variants, the three frame stills, plus video title, channel and watch URL. No downloads, no API key. Pay per video.

Why this scraper

  • Only delivered results are charged. Inputs that fail come back as clear error records at no cost.
  • One official oEmbed call plus five lightweight HEAD checks per video, nothing downloaded, no API key, no browser. Measured on the platform: three videos in 5 seconds for a tenth of a cent; a tenth of the price of the busiest alternative in this niche.
  • Not just URLs but the truth about them: YouTube's thumbnail addresses are predictable, but the 1280 and 640 pixel versions exist only for videos uploaded in enough resolution. Each size is verified and delivered with its byte size, and bestUrl is the largest one that really exists, with width and height (measured: the 2005 video Me at the zoo tops out at 480 pixels, a 4K remaster has all five).
  • Everything a thumbnail workflow needs on one row: the five JPEG sizes, the WebP variants, the three frame stills YouTube generates, the video title, channel name and link, and the watch URL.

Who this is for

Paste video URLs (watch, youtu.be, shorts, embed) or 11-character ids in videos (up to 500 per run). Leave checkSizes on to know which sizes exist and how large they are; switch it off for URLs only with a single request per video. Built for content pipelines, newsletters, link previews, thumbnail A/B research and archiving that need the right image address without scraping the watch page.

Who this is not for

The images are not downloaded; you get their addresses and sizes and fetch them yourself. Private, unlisted-and-not-embeddable and removed videos come back as a free NOT_FOUND row, because oEmbed answers nothing for them. Custom thumbnails and auto-generated ones look the same to this actor; it cannot tell which the creator chose. Byte sizes are what the image host reports at the moment of the run. Titles and channel names come from oEmbed and are not localised.

Input fields

FieldTypeRequired or defaultWhat it does
videoslist of textrequiredOne per row, up to 500: a YouTube video URL (watch, youtu.be, shorts, embed) or an 11-character video id.
checkSizestrue/falsetrueOn: each size is verified with a HEAD request and its byte size delivered. Off: URLs only, one request per video.

Input example

{
"videos": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"jNQXAC9IVRw"
],
"checkSizes": true
}

Output example

FieldTypeWhat it holdsExample
videoIdtextThe eleven-character YouTube id of the video, the key to join other data on.jNQXAC9IVRw
titletextThe title as the uploader set it.Me at the zoo
channelNametextThe channel that published the video.jawed
channelUrltextThe channel page on YouTube.https://www.youtube.com/@jawed
videoUrltextThe watch page of the video.https://www.youtube.com/watch?v=jNQXAC9IVRw
bestUrltextThe largest thumbnail that really exists for this video; take this one when you want a single image.https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg
bestSizetextThe name of that largest size: maxres, sd, hq, mq or default.hqdefault
bestWidthnumberThe width of the largest existing thumbnail, in pixels.480
bestHeightnumberThe height of the largest existing thumbnail, in pixels.360
hasMaxrestrue/falseTrue when YouTube holds the 1280x720 image; older and low-resolution uploads often do not.False
maxresUrltextThe 1280x720 image; empty when the video has no maxres version.https://i.ytimg.com/vi/jNQXAC9IVRw/maxresdefault.jpg
sdUrltextThe 640x480 image, present on nearly every video.https://i.ytimg.com/vi/jNQXAC9IVRw/sddefault.jpg
hqUrltextThe 480x360 image, a safe middle size.https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg
mqUrltextThe 320x180 image, small and quick to load.https://i.ytimg.com/vi/jNQXAC9IVRw/mqdefault.jpg
defaultUrltextThe 120x90 image, the smallest one YouTube keeps.https://i.ytimg.com/vi/jNQXAC9IVRw/default.jpg
sizeslistEvery size that exists for this video, each with its name, width, height and link.[{"size": "maxresdefault", "url": "https://i.ytimg.com/vi...
webpMaxresUrltextThe maxres image in WebP, which downloads smaller than the JPEG.https://i.ytimg.com/vi_webp/jNQXAC9IVRw/maxresdefault.webp
webpHqUrltextThe 480x360 image in WebP.https://i.ytimg.com/vi_webp/jNQXAC9IVRw/hqdefault.webp
frameUrlslistThe three storyboard frames YouTube cuts from the video itself, often more telling than the cover image.["https://i.ytimg.com/vi/jNQXAC9IVRw/1.jpg", "https://i.y...
oembedThumbnailUrltextThe thumbnail YouTube's own oEmbed endpoint names, handy as a cross-check.https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg

Error codes: INVALID_VIDEO, NOT_FOUND, BLOCKED.

One delivered row looks like this:

{
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"channelUrl": "https://www.youtube.com/@RickAstleyYT",
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"bestUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"bestSize": "maxresdefault",
"bestWidth": 1280,
"bestHeight": 720,
"hasMaxres": true,
"maxresUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"sdUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"hqUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"mqUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg",
"defaultUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/default.jpg",
"webpMaxresUrl": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/maxresdefault.webp",
"webpHqUrl": "https://i.ytimg.com/vi_webp/dQw4w9WgXcQ/hqdefault.webp",
"frameUrls": [
"https://i.ytimg.com/vi/dQw4w9WgXcQ/1.jpg",
"https://i.ytimg.com/vi/dQw4w9WgXcQ/2.jpg",
"https://i.ytimg.com/vi/dQw4w9WgXcQ/3.jpg"
],
"sizes": [
{
"size": "maxresdefault",
"url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"width": 1280,
"height": 720,
"exists": true,
"bytes": 65324
},
{
"size": "sddefault",
"url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"width": 640,
"height": 480,
"exists": true,
"bytes": 31029
},
{
"size": "hqdefault",
"url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"width": 480,
"height": 360,
"exists": true,
"bytes": 21011
},
{
"size": "mqdefault",
"url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg",
"width": 320,
"height": 180,
"exists": true,
"bytes": 10303
},
{
"size": "default",
"url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/default.jpg",
"width": 120,
"height": 90,
"exists": true,
"bytes": 2888
}
],
"oembedThumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"status": "ok"
}

Pricing

Pay per event: one video-thumbnails event per delivered result. No charge for inputs that fail, no separate platform-usage surcharge.

Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.

Reviews: if this actor saves you time, a short review on this page is the one thing that helps most. Ratings are what other buyers look at first, and we have no other way to ask.

Use with AI agents

AI assistants such as Claude, ChatGPT or Cursor can run this actor through Apify's own MCP server. Ask for the actor steadydata/youtube-thumbnail-extractor by its full name, so the assistant does not pick a different one, and start from this minimal input:

{
"videos": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"jNQXAC9IVRw"
]
}

The assistant can read the price per event from the Pricing section above before the first paid run. Failed input comes back as an error row, as described above.

FAQ

Is personal data collected? Only the public video title and channel name that YouTube itself returns through oEmbed; no viewer or commenter data is touched.

Which URL should I use? bestUrl: the largest size that exists. For a fixed layout use the size columns directly; hqUrl (480x360) exists for every public video.

Why is hasMaxres false for some videos? YouTube only renders the 1280x720 thumbnail for uploads of at least 720p; older or low-resolution videos have no such file, and the actor tells you rather than handing you a URL that 404s.

What are the frame stills? frameUrls are the three automatic stills YouTube takes at the start, middle and end of a video (1.jpg, 2.jpg, 3.jpg), handy as alternatives when the main thumbnail is not suitable.

What does a run cost when a video is gone? Nothing. NOT_FOUND, INVALID_VIDEO and BLOCKED rows are free; only delivered videos are charged.

What happens when the source changes? Sources change from time to time; that is the nature of this work. The actor is monitored daily and fixed fast, and while it is broken you are not charged, because only delivered results cost anything.