First, the part nobody tells you
Let's be straight with each other before you waste twenty minutes. Instagram does not post a raw .gif file the way Slack, Reddit, or a website does. There's no "upload GIF" button on the feed, and if you try to share a GIF straight from your camera roll, IG either rejects it or quietly flattens it into a still image. That's not a bug in your file. That's just how the app is built.
So the honest move is to know where a GIF does work on Instagram, and aim there. Making a gif for Instagram comes down to three spots: the GIPHY sticker library inside Stories (a different thing entirely, those aren't your files), looping a clip inside a Story or Reel, and dropping one into a DM. For the second two, the trick is that a short looping clip and a GIF are basically the same idea, and IG happily takes a short looping video. So you build a tight, frame-perfect loop, and you let the platform meet you where it's willing to.
Where your GIF actually lives on IG
Pick your target first, because it changes how you crop and export.
- Stories and Reels. This is the real home for GIF-style content on Instagram. A 1-3 second loop, cropped to 9:16, dropped into a Story reads exactly like a GIF and plays full-screen. You're technically posting it as a short video, but the feel is pure GIF.
- Direct messages. DMs are the closest thing IG has to true GIF behavior. A small looping clip sent in a DM plays inline and repeats, which is where most "reaction GIF" energy on Instagram actually happens.
- The feed grid. This is the one that won't cooperate. A square post wants a still image or a video, not a GIF. If you want loop-y motion in the feed, post it as a short video and accept that it's a video now.
Build the loop in your browser
Start from a video file, not a screenshot. Drag any clip (an iPhone video, a screen recording you already made, a downloaded reel you have rights to) into What the GIF and it converts entirely in your browser tab. Nothing uploads, which matters more on Instagram than most places, since the footage is usually you, your dog, or a half-finished idea you're not ready to post yet.
The whole game is the loop. A GIF that cuts back to a totally different frame looks like a hiccup. Use the frame timeline to set your in and out points, then nudge them one frame at a time with the arrow keys until the first and last frames almost match. Land it and the loop is invisible, the clip just breathes. This is the same frame-accurate trimming you'd use for a GIF on Twitter / X, where the loop point makes or breaks the gag.
Crop, fps, and keeping it light
For Stories and Reels, crop to 9:16 so it fills the vertical frame without IG re-cropping it for you and lopping off someone's head. For a DM where it'll sit small, 1:1 or 4:5 both read fine. The crop locks to those exact ratios, so a square is a true square, never a slightly-off rectangle.
Then keep the file honest:
- Frame rate 10-15 fps. A loop doesn't need cinema smoothness. 12 fps looks great for most motion and keeps the file small. Push toward 15 only when there's genuinely fast action to preserve.
- Colors 64-128. A GIF maxes out at 256 colors. Most clips look identical at 128 and noticeably lighter. Flat, graphic stuff survives big cuts; skin tones and gradients want a little more room, so nudge up if you see banding.
- Scale down. A vertical Story GIF rarely needs to be full resolution. Downscale until the estimated size, shown live as you tweak, sits where you want it.
From export to Instagram
Here's the catch worth saying out loud: the file you export is a real .gif, and Instagram is a phone app that doesn't love loose GIF files. The reliable path is to get the clip onto your phone (AirDrop, a synced photo library, or just save it) and post the looping version through Stories, Reels, or a DM, where IG plays the loop as intended. If you want it in the feed, post it there as a short video using Instagram's own upload, and let it be a video.
None of this requires an account, a watermark, or an upload to some stranger's server. Make a small GIF from your video, send it to your phone, and let Instagram play it where Instagram is willing to play it.