Instagram Reels Upload Failed? Here's What to Check First

Sep 24, 2026

When a Reel upload fails, the productive way through it is to work down what Instagram actually documents — and to know which of its documents applies to how you are posting, because it maintains three separate sets of rules that do not agree with each other.

Which set of rules applies to you

Instagram publishes video requirements in three places, for three ways of posting:

How you are postingWhere the rules live
From the Instagram app or the web uploaderhelp.instagram.com
Through a scheduling tool or your own integrationThe Graph API docs on developers.facebook.com
As a paid adMeta's ads guide

A number from one column is not evidence about another. If you are tapping the plus button on your phone, the Graph API's limits are not what stopped you. The full three-way comparison is in Instagram Reels video specs.

The API container requirement a valid MP4 can still miss

Meta's Graph API documentation states the Reel container requirement verbatim:

"Container: MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front of the file."

Read that twice. It is not asking for MP4. It is asking for MP4 with two structural properties, and a file can satisfy the extension, codec, resolution, frame rate and duration while failing both.

The moov atom is the file's index — the table saying where each frame lives. An MP4 with the index at the back is a completely valid MP4, and this requirement still rules it out. In ffmpeg terms, that is exactly what -movflags +faststart exists to satisfy: it rewrites the file with the index moved to the front.

Edit lists are the second half — container-level instruction data saying which parts of a track to play and when, rather than the track simply being what it is. What Meta publishes is that the file must not contain them.

A similar line turns up on a different channel entirely. Meta's ads guide page for Instagram Feed video ads, for the Awareness objective, says: "Videos should not contain edit lists or special boxes in file containers." That is an ad-placement requirement in its own right, not corroboration of the API rule above — and the ads guide is paginated by objective, so a different objective may list something different. Neither sentence is written for app uploads.

What to do about it

The container is the part of the spec you can act on directly, and Meta names what it accepts: "MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front of the file." If your source is a QuickTime .mov off a Mac or an iPhone, converting it re-writes the container:

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 and processed locally, so you are not uploading a video to a third-party server to fix a problem that started with an upload. Same job as the standalone MOV to MP4 tool, and if the file is also inconveniently large, the compressor re-encodes the same way. On the command line, -movflags +faststart addresses the moov atom half specifically.

The other specs, and which channel each one belongs to

The ranges Instagram publishes for app uploads. The help centre gives floors and a window, not a target: "You can upload a reel with an aspect ratio between 1.91:1 and 9:16," and "Reels should have a minimum frame rate of 30 FPS (frames per second) and minimum resolution of 720 pixels." It does not say whether those 720 pixels are width or height, so do not assume.

Duration, which differs by channel. From the app: "You can record and edit videos up to 20 minutes with Instagram Reels." Through the API the ceiling differs — "Duration: 15 mins maximum, 3 seconds minimum." A 17-minute cut sits inside the app's 20 minutes and outside the API's 15.

The codec profile the help centre asks for. Its collapsed "Additional technical details" block lists, for video: "Progressive scan (no interlacing)," "High profile," "2 consecutive B frames," "Closed GOP. GOP of half the frame rate," "CABAC," and "Chroma subsampling: 4:2:0." Unusually specific for a consumer help page — and an interlaced source or an open-GOP export is outside them.

Audio, where the two channels contradict each other. The help centre asks for "Channels: Stereo or Stereo + 5.1" and "Sample rate 96khz or 48khz." The API docs ask for "AAC, 48khz sample rate maximum, 1 or 2 channels (mono or stereo)." Those genuinely contradict each other; both are Meta's words for different routes. A 96kHz 5.1 mix fits the first and exceeds the second.

Reels may not be available on your account at all. Instagram's own page opens with: "Reels isn't currently available to everyone. Some accounts may be able to see reels, but won't be able to record them."

File size, which Instagram documents least. There is no published file size cap for posting from the app. The 300MB figure that circulates is the API spec ("File size: 300MB maximum"); 4GB is the ads guide's "Maximum File Size" for the Awareness objective, listed on the Reels ads page and the Feed video ads page alike. Posting from your phone, neither is a rule you can check yourself against.

If you post through a scheduling tool, read the status code

This applies to the API route only, and it is the one case where you get a real answer instead of a guess. Meta is explicit that success is not immediate: "Video uploads are asynchronous, so receiving a container ID does not guarantee that the upload was successful."

Query GET /<IG_CONTAINER_ID>?fields=status_code and you get one of five values, verbatim from Meta's Content Publishing docs:

ValueMeaning (Meta's wording)
EXPIRED"The container was not published within 24 hours and has expired."
ERROR"The container failed to complete the publishing process."
FINISHED"The container and its media object are ready to be published."
IN_PROGRESS"The container is still in the publishing process."
PUBLISHED"The container's media object has been published."

Meta's polling advice: "We recommend querying a container's status once per minute, for no more than 5 minutes." IN_PROGRESS five minutes in and ERROR are different problems — the first is patience, the second is your file.

Two separate rate gates also exist here: "Instagram accounts are limited to 100 API-published posts within a 24-hour moving period," while "An Instagram account can only create 400 containers within a rolling 24 hour period." Either one is enough to stop you.

How to tell it worked

Change one thing at a time. Through the API, FINISHED is the confirmation and nothing before it is — Meta's wording is that "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."

FAQ

Why does my Reel keep saying upload failed with no error message? Work through what Instagram documents for app uploads: the 1.91:1 to 9:16 aspect ratio window, the 30 FPS and 720-pixel minimums, the 20-minute ceiling, and the codec profile in the help centre's technical details block.

Is there a file size limit for Instagram Reels? Not one Instagram publishes for app uploads. The documented numbers belong to other channels — 300MB for the Graph API, and 4GB as the ads guide's maximum for the Awareness objective. Anyone quoting an app-side megabyte figure is quoting something that is not in Instagram's documentation.

Why does my MP4 get rejected when the specs all look right? Because "MP4" is not the whole requirement. Meta's API spec asks for "no edit lists, moov atom at the front of the file" — two container properties an otherwise perfect MP4 can fail.

Does converting MOV to MP4 fix Instagram upload failures? It addresses the container rather than the picture. Meta names MOV and MP4 (MPEG-4 Part 14) as acceptable containers, so MOV is not itself the problem — what its spec rules out is edit lists and a moov atom that is not at the front. See all Clapr tools for the rest of the browser-based ones.

My scheduling tool says it uploaded but nothing posted. What now? Query the container's status_code: EXPIRED means it sat unpublished past 24 hours, ERROR means the publish pipeline failed, IN_PROGRESS means it is still working. Also check the two 24-hour gates — 100 published posts and 400 created containers.


Quotes are from Instagram's help centre, Meta's Graph API and Content Publishing documentation, and Meta's ads guide, as recorded on 16 September 2026. Meta changes these pages — check the official documentation before relying on any number here. More troubleshooting write-ups are in fixes.

Clapr team

Clapr team

Instagram Reels Upload Failed? Here's What to Check First | Clapr Blog