This guide is specifically about size recommendations for static images (what Instagram should really be about). We have included some graphics to help you visualise these too.
Most places have this information wrong - including Instagram’s own guidelines, which would appear to be out of date. They even contradict themselves slightly in it:
Make sure that you upload it at the best resolution possible (up to a width of 1,080 pixels)
Followed shortly by:
Upload a photo with a width of at least 1,080 pixels
So is it up to 1080px or a minimum of 1080px?
The following specs have been verified by checking the Instagram source code. The most important information you need to know is that the maximum image width that Instagram will currently generate is 1440px.
In short, most places are telling you it’s 1080px — but this isn’t strictly true and you could be missing out on improving the quality of your posts. We can confirm by looking at the source code that the following are actually the correct size guides.
IMPORTANT: This does not appear to have been rolled out to all account types yet — but most accounts can use this size.
Wherever we talk about dimensions and aspect ratios we always speak in the format of width then height. If you ever struggle with this, the way I learnt this as a child is: “Walk across the hall (width) and then go up the stairs (height)”.
All Static Posts
All files will always converted and optimised as .jpg so if you are using .png for graphic files it’s worth optimising it as a .jpg beforehand as it will be converted.
Posts — Square
1440 x 1440px
Instagram will currently render square images up to 1440px. Anything larger than this will be reduced in size.
Posts — Non Square
1440 x 1800px (Maximum)
If you tap the crop icon and want to share an image that is not square (portrait or landscape), you will also have a maximum width of 1440px but larger height available up to an aspect ratio of 4:5, which gives you 1440 x 1800px.
You can of course crop to landscape as low as 1.91:1, which translates to 1440 x 753px - the smallest size (at the highest resolution).
Remember that your image will also always been cropped to a square centrally on your profile grid.

Carousels
The same sizing also applies to these. Remember, while a portrait image will get you more screen space in the feed it will be cropped to a square on your grid.
Stories / Reels
1080 x 1920px (Maxmimum)
Super simple here. If you do any size vertically smaller than this you will get black banding at the top and bottom. Any size smaller with width and you will compromise detail.
What This Means
If you aren’t aware instagram rolls out feature changes at different times to different accounts (if you use multiple accounts you’ll be aware of this). The 1440 pixel limit doesn’t appear to have fully rolled out to everyone quite yet.
Our recommendation is to create your original files in as large a size as possible and then create a resized duplicate at the optimum size to post on Instagram.
Other Useful Sizes
We would always recommend uploading at twice these resolutions but this is their current intrinsic sizing…
Profile Avatar
320 x 320px cropped to a circle.
Highlight Thumbnail
150 x 150px cropped to a circle.

What Does Intrinsic Mean?
In the context of this (and code) this is essentially the source size. Most screens now are retina displays which means the images you see are usually 2x,3x or even 4x the resolution of what you are viewing it at.
For example — the most common mobile screen width is 360px wide. This means the images on a feed are rendered at 360px wide - however the intrinsic size of an image can be as high as 1440px. This means that the image is rendering at 4x resolution. Which simply means it will be a more detailed and sharper image.
Final Thoughts
This doesn’t appear to have rolled out to stories and reels yet but its likely they will adopt the 1440px format so if you want to future proof yourself this will be (9:16 = 1440 x 2560px).
Isn’t it funny that whilst instagram tries to play TikTok and become a video app, the most high resolution way to share on the platform is still static images… for now!