Convert MOV to MP4 for Instagram: What Reels Actually Needs

Sep 27, 2026

Meta's Graph API spec for Reels lists MOV and MP4 alike — the extension is not what decides whether your Reel uploads. That documentation words the container requirement as a single line: "Container: MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front of the file." Both containers are listed. Two other conditions in that same line are the ones that actually fail files.

So the useful version of "how do I convert MOV to MP4 for Instagram" is not which extension, but what has to be true inside the file. This page covers that, using only what Instagram and Meta publish.

Before you start

Instagram's specs live in three separate places, and they do not agree. Before you touch a converter, know which one applies to you:

ChannelWho it coversWhere the spec lives
Posting from the app or webCreators posting by handhelp.instagram.com
Posting via the Graph APISchedulers and automation toolsdevelopers.facebook.com
AdsPaid placementsMeta's ads guide

The verbatim container line above is the API spec. The ads guide agrees on the container: for Instagram Reels ads it lists "File Type: MP4, MOV", and for Instagram feed video ads "File Type: MP4, MOV or GIF" — both for the Awareness objective, which is the page those numbers came from.

The help centre page for posting a Reel from the app covers different ground: aspect ratio, frame rate, resolution and a block of codec settings, all quoted further down this page. For anything it does not cover on the app channel, check the official documentation rather than borrowing a number from the other two. All you need on hand is the source file and a converter you can point at a specific output container.

The two conditions that actually reject files

Read the API container line again and notice how it is built. The container names are one clause; the other two clauses are about the layout of the file:

  1. "no edit lists"
  2. "moov atom at the front of the file"

Neither has anything to do with the extension. A .mp4 that fails both conditions is still a .mp4, which is exactly why "I already converted it to MP4 and it still won't upload" is such a common dead end.

Meta repeats the first condition in plainer words on the Instagram feed video ads page, for the Awareness objective: "Videos should not contain edit lists or special boxes in file containers." That ads page says nothing about the moov atom.

The second condition — moov atom at the front — is the one you can act on directly. It maps to a single ffmpeg flag, -movflags +faststart, which rewrites the file so the moov atom ends up at the front instead of the end.

Note the limit of this: both conditions together are published for the API channel only — they appear in Meta's Reel specifications and, word for word, in its Story video specifications. The edit-list half also shows up in the feed video ads spec, for the Awareness objective. If you post from the app, check the official documentation for that channel rather than assuming these carry over — treat them as a safe target, not a documented requirement.

Step 1: Decide whether you need to convert at all

If you post by hand from the app, no Instagram page tells you to convert. If you post through a scheduler on the Graph API, MOV is still listed as accepted — but the file must satisfy the two conditions above, and a clean conversion pass is the simplest way to get there.

Step 2: Check the numbers for your channel first

Convert once, with the right target settings, rather than three times. For the API channel, Meta publishes these verbatim: "Frame rate: 23-60 FPS.", "Video bitrate: VBR, 25Mbps maximum", "Duration: 15 mins maximum, 3 seconds minimum", "File size: 300MB maximum", and a maximum of 1920 horizontal pixels.

For the app channel, the help centre gives minimums rather than targets: "Reels should have a minimum frame rate of 30 FPS (frames per second) and minimum resolution of 720 pixels." It also gives a range: "You can upload a reel with an aspect ratio between 1.91:1 and 9:16."

Note what is missing there. Instagram does not publish a file size ceiling, a recommended resolution, or a bitrate for posting from the app. If a number for those is quoted to you, it is not coming from Instagram.

Step 3: Convert to MP4

Do the container change in one pass, then leave the file alone.

Try it right here

Runs in your browser. Your file is not uploaded anywhere.

Loading tool…

This runs inside your browser tab — the file is read from disk, converted locally, and handed back, with nothing uploaded. If the result also needs to come down in size, compress it in a second pass, and browse all Clapr tools for other containers.

Step 4: Match the encoder settings to the channel

For the app channel, the help centre's collapsed "Additional technical details" block lists the video codec requirements verbatim: "Progressive scan (no interlacing).", "High profile.", "2 consecutive B frames.", "Closed GOP. GOP of half the frame rate.", "CABAC.", "Chroma subsampling: 4:2:0." For audio it lists "Channels: Stereo or Stereo + 5.1." and "Sample rate 96khz or 48khz."

That block does not name a codec — no H.264, no HEVC. The API spec does: "Video codec: HEVC or H264, progressive scan, closed GOP, 4:2:0 chroma subsampling." and "Audio codec: AAC, 48khz sample rate maximum, 1 or 2 channels (mono or stereo)."

Watch the audio clash: the help centre allows 96khz and 5.1, the API caps at 48khz and two channels. Both are official. They apply to different channels, so pick the one matching how you publish.

Step 5: Confirm it went through

If you publish through the API, a successful upload is not confirmed by the response you get back. Meta is explicit: "Video uploads are asynchronous, so receiving a container ID does not guarantee that the upload was successful. To verify that a video has been uploaded, request the status_code field on the IG Container. If its value is FINISHED, the video was uploaded successfully." The other states it can return are EXPIRED, ERROR, IN_PROGRESS and PUBLISHED, and Meta recommends "querying a container's status once per minute, for no more than 5 minutes."

If you publish from the app, there is one setting worth knowing about: a quality toggle that is off unless you turn it on. The help centre says "You can chose to always upload reel at the highest quality. Note it may take longer to upload reel of higher quality." (The spelling is Instagram's.) It sits under Profile → Menu → Media quality → "Upload at highest quality".

Common mistakes

  • Exporting to 1080 x 1920 because it is "the official Reels size". That resolution is real, but its official home is the feed video ads spec, for the Awareness objective. The Reels ads page, also for the Awareness objective, recommends "Resolution: 1440 x 2560 pixels", and the help centre gives only a 720-pixel minimum. More on the three-way split in Instagram Reels video specs.
  • Assuming the 300MB cap applies to app uploads. It is an API number. Instagram publishes no file size ceiling for posting by hand.
  • Reusing the Stories ratio floor. The API allows Reels between 0.01:1 and 10:1; Stories start at 0.1:1. One decimal place apart, both verbatim.
  • Trusting the extension over the contents. A renamed .mov is not a conversion. This is the same trap that catches people going the other direction between codecs and containers — see codec vs container.
  • Re-encoding repeatedly to chase a number Instagram never published, such as a "recommended bitrate" for app uploads. There isn't one.

FAQ

Do I have to convert MOV to MP4 for Instagram? No. Meta's API spec lists "MOV or MP4 (MPEG-4 Part 14)" as the accepted container, and the ads guide lists "MP4, MOV" for Reels ads on the Awareness objective. Converting is a practical way to fix the other two conditions on that line, not a format requirement.

Why does my MOV fail when Instagram says MOV is supported? Because the same spec line adds "no edit lists, moov atom at the front of the file." A file can be a valid MOV or MP4 and still break both. Re-exporting with the index at the front of the file — ffmpeg's -movflags +faststart — is the fix.

What does "moov atom at the front of the file" mean in practice? That the moov atom sits at the start of the file rather than the end. Meta states it as an API container requirement alongside "no edit lists"; only the edit-list half is echoed in the feed video ads spec (Awareness objective) as "Videos should not contain edit lists or special boxes in file containers."

Will converting change how my Reel looks after Instagram processes it? Instagram does not publish its transcode targets, so any claim about what it re-compresses your upload to has no official source. What is documented is the "Upload at highest quality" toggle, which the help centre notes may make uploads take longer.

Can I post the video to my feed instead of Reels? You can put it in a carousel. That is the only case Instagram draws a line around in writing: "videos in carousels are not considered reels and will not show up in the Reels tab or have reels features." It does not publish duration or size limits for carousel videos.

How long can the Reel be? From the app, "You can record and edit videos up to 20 minutes with Instagram Reels", with the caveat that "Reels over 3 minutes won't be recommended to new audiences." Via the API it is 15 minutes maximum, 3 seconds minimum.


Fix a file first, then worry about specs. Start with the converter above, then work through the rest of the how-to guides.

Specs quoted from Instagram's help centre, Meta's IG User Media and Content Publishing documentation, and Meta's ads guide, checked 16 September 2026. Meta changes these pages — verify against the official documentation before relying on any number here.

Clapr team

Clapr team

Convert MOV to MP4 for Instagram: What Reels Actually Needs | Clapr Blog