Short version: YouTube currently recommends 3840 × 2160 for video thumbnails and allows 50 MB from a computer. Instagram's Help Center now keeps feed photos up to a 3:4 ratio. Several top Google results for "social media image sizes" still say 1280 × 720, 2 MB and 4:5.
That matters if you build upload validators, image pipelines or thumbnail generators from those tables. Your code can reject a file the platform accepts, or shrink it for no reason.
This post comes from CropDen, which publishes a dataset of these sizes, so we have a stake in this. On 6 November 2026 we read the platform docs next to the top results and wrote down what each one said.
YouTube thumbnails: the numbers side by side
| Source | Recommended size | File limit |
|---|---|---|
| YouTube Help | 3840 × 2160 (minimum width 640) | 2 MB mobile, 50 MB desktop |
| Hootsuite | 1280 × 720 | 2 MB |
| Buffer | 1280 × 720 | 2 MB |
| SocialPilot | 1280 × 720 | Under 2 MB |
| Sprout Social | 1280 × 720 in the summary table, 3840 × 2160 in the YouTube section | 2 MB mobile, 50 MB desktop |
| socialsizes.io | 3840 × 2160 | 2 MB mobile, 50 MB desktop |
These pages get updated often, so treat the table as a snapshot from that date.
A 1280 × 720 thumbnail is still a valid upload: it is 16:9 and clears the 640 px minimum. The problem is treating it as the ceiling. A validator with maxWidth: 1280 and maxBytes: 2_000_000 would refuse a 12 MB 4K thumbnail that YouTube Studio accepts from a computer.
Shorts are another gap. YouTube Help lists 2160 × 3840 as the recommended Shorts thumbnail, with a 640 px minimum height. Hootsuite's guide says you can't upload a custom thumbnail for Shorts at all.
Instagram: 4:5 is no longer the tallest feed shape
Instagram's Help Center says photos between 320 and 1080 px wide keep their original resolution if the ratio is between 1.91:1 and 3:4. At 1080 px wide, that means a height from 566 to 1440 px. Anything outside that range gets cropped.
Hootsuite still quotes that range as 1.91:1 to 4:5. Buffer and Sprout list both 4:5 and 3:4.
If you publish through code, there is a catch. The Instagram Graph API reference is stricter than the app: JPEG only, 8 MB at most, a width of 320 to 1440 px, and a ratio from 4:5 to 1.91:1. By that doc, a 1080 × 1440 image is fine in the app but outside the API range. We read this in the docs and did not test a live API publish.
Four things a size spec should model
Writing these down as one width and one height is where most of the trouble starts. These are the fields we ended up needing.
1. Recommended, minimum and maximum are separate values. YouTube gives all three for the same thumbnail: 3840 × 2160, 640 px wide and 50 MB. Each one drives a different decision: what to generate, what to reject and when to compress.
2. Limits can depend on the upload surface. The same YouTube thumbnail has a 2 MB limit on mobile and 50 MB on desktop. Instagram's app and API accept different ratios. If your tool only ever hands off to one of those, encode that one.
3. The display crop is not the upload shape. Instagram's profile grid shows 3:4 tiles. A 1080 × 1350 post loses about 34 px per side there, and a 1080 × 1080 post shows only its middle 810 px. YouTube has a similar catch: it says vertical videos with 16:9 custom thumbnails get an auto-generated 4:5 thumbnail on the home, explore and subscription pages.
4. Every spec needs a "checked on" date. Without one you can't tell a current number from one copied out of a 2023 blog post.
Validating against data instead of constants
We publish the sizes as JSON, so a small check can read the spec rather than hard-code it. This runs on Node 18 or later as an ES module:
const res = await fetch("https://cropden.com/data/social-media-image-sizes.json"); const { groups } = await res.json(); function findSize(id) { const groupId = id.split("/")[0]; const group = groups.find((g) => g.id === groupId); return group?.sizes.find((s) => s.id === id); } function checkUpload(id, file) { const spec = findSize(id); if (!spec) throw new Error(`Unknown size: ${id}`); const problems = []; const [rw, rh] = spec.ratio.split(":").map(Number); if (Math.abs(file.width / file.height - rw / rh) > 0.01) { problems.push(`ratio should be ${spec.ratio}`); } if (spec.minWidth && file.width < spec.minWidth) { problems.push(`width is under ${spec.minWidth} px`); } if (spec.minHeight && file.height < spec.minHeight) { problems.push(`height is under ${spec.minHeight} px`); } if (spec.maxBytes && file.bytes > spec.maxBytes) { problems.push(`file is over ${spec.maxBytes / 1_000_000} MB`); } return problems; } const fourK = { width: 3840, height: 2160, bytes: 12_000_000 }; console.log(checkUpload("youtube-thumbnail/thumbnail", fourK)); // [] console.log(checkUpload("youtube-thumbnail/thumbnail-mobile", fourK)); // [ 'file is over 2 MB' ] console.log(checkUpload("youtube-thumbnail/thumbnail", { width: 600, height: 400, bytes: 90_000 })); // [ 'ratio should be 16:9', 'width is under 640 px' ] The commented output is what the script printed when we ran it.
Some entries also list the areas the app covers, which matters when you place text on a template:
const story = findSize("instagram-story/story"); console.table( story.zones.map((z) => ({ zone: z.label.en, top: z.y, bottom: z.y + z.height })) ); ┌─────────┬──────────────────────────┬──────┬────────┐ │ (index) │ zone │ top │ bottom │ ├─────────┼──────────────────────────┼──────┼────────┤ │ 0 │ 'Profile & progress bar' │ 0 │ 250 │ │ 1 │ 'Reply bar & stickers' │ 1580 │ 1920 │ └─────────┴──────────────────────────┴──────┴────────┘ Where this data is weak
- Not every number is official. Instagram's Help Center gives no profile photo size, so our 320 × 320 is the size the app serves, not a published spec. The 1280 × 720 "phone upload" entry for YouTube is our own choice for staying under 2 MB.
- The Instagram sizes describe the app. Our recommended 1080 × 1440 is outside the Graph API range above, and the JSON has no separate API field. If you publish through the API, use 4:5.
- Overlay zones are measured. We measured them from the apps, and they are flagged with
measured: true. App layouts move, so treat them as guides. - Dates are monthly and source links are missing. Each group has a
verifiedmonth, but the JSON doesn't link to its source yet. That is planned for the next release. - This comparison covers two platforms. The YouTube and Instagram numbers above were re-read on 6 November. The rest of the dataset was last checked in October or early November 2026.
The JSON currently has 59 sizes across 15 platforms. CropDen's full size table shows the same data as a page, and CropDen's YouTube thumbnail page adds a crop tool with the duration badge marked. The data is CC BY 4.0.
If you find a number that has changed, please email hello@cropden.com with a link to the platform's doc.