← Instagram Transcript

Why We Don't Offer a Browser Extension

2026-10-15
Short answerTwo reasons, and we measured both today. First, an extension would be slower: a 60-second Reel you already have as a file went through our transcriber in 4.33 to 11.13 seconds end to end, while capturing that same 60 seconds off the screen takes 60 seconds by definition, because capture runs at real time. Second, it would have to be trusted with more than the job needs: it would sit inside a logged-in Instagram page, and our endpoint has no CORS allowance at all, so it could not even call us from there without its own host permission. What actually works is the plain file route: one 21,121-byte page, one file input, no install, no account. Everything below is from requests we ran today - the header values, the error strings, and the timings are copied out of the responses.

What we ran today

Three groups of requests, all on 2026-10-15. First, we posted URLs at our own endpoint instead of files: a multipart form carrying a url field, a JSON body carrying a url key, and a plain GET. Second, we asked Instagram's own pages and both of its oEmbed endpoints for a post, anonymously, and read the response headers. Third, we timed the file route against the capture route for the same 60 seconds of audio: a 60-second MP3 at 16 kHz mono and 64 kbps uploaded three times, the same 60 seconds as a 720x1280 MP4 uploaded twice, and the audio pulled out of that video three times with ffmpeg. Every number on this page came out of those runs. Two honest caveats before the numbers: the Instagram URLs we requested used a placeholder shortcode rather than a real post, so what we can report is what Instagram's front door returns to an anonymous caller, not the content of any particular Reel; and our timings are single runs on one connection, so read them as a range, not as a service guarantee.

Our endpoint refuses anything that is not a file

This is the part that decides the whole design. The handler does one thing: it reads the file field out of the form and hands the bytes to the model. There is no URL parameter in it anywhere, and when we tried to feed it one anyway it refused in three different ways.

Neither page will let the other one embed it

This is the second hard wall, and it runs in both directions. We read the response headers on anonymous requests to Instagram today, and on our own responses.

The consequence is mundane but decisive. The obvious extension design - inject our uploader into the Instagram page in an iframe - is blocked by our own Content-Security-Policy before it draws a pixel. Getting around that means not embedding at all, but instead running code with privileges inside a page you are logged into.

We send no CORS allowance, on purpose

We sent a preflight at our own endpoint with Origin: https://www.instagram.com and Access-Control-Request-Method: POST. It came back HTTP 404 with no Access-Control-Allow-Origin header at all, and a successful 200 response carries none either. That is worth spelling out, because it is the difference between 'a convenience layer' and 'a privileged component'. A script running on the Instagram page cannot read our responses - the browser will not hand them over. An extension that wanted to talk to us from that page would need its own host permission to bypass that check, and the permission Chrome asks for when an extension requests a host is stated in the install dialog as reading and changing all your data on that host. That is not a measurement - it is what the permission model asks for, and we are not going to ask you for it to save a file dialog.

The extension would be slower, not faster

This is the measurement that settled it for us. Take a 60-second Reel. If you have the file - the original export, a downloader's output, a screen recording you already made - the cost today was small. If you capture it by playing it and recording the tab or the screen, the cost is fixed by the length of the clip: capture runs at real time, so 60 seconds of audio costs 60 seconds of your life, before you have a file to upload.

Measured today: URL posts refused with 400 and 500, Instagram and this site both refuse to be framed, a 60-second file takes 4.33 to 11.13 seconds while capture takes 60
The two routes, measured on the same 60 seconds of audio.

What the one-page route actually costs you

The counter-argument to all of the above is convenience: an extension saves you opening a tab. Here is what the tab costs, measured today.

An extension would add a second code path with its own permissions, its own update channel and its own access to pages you are logged into - to replace a 21-kilobyte page that loads in a seventh of a second. We do not think that trade is worth making, and we would rather say so than ship it and hope nobody asks.

When recording is still the right move

None of this means recording is wrong. It means recording is a way to get a file, not a way to skip getting one. There are two cases where it is the only route, and one thing to watch in both.

What would change our mind

We are not dogmatic about this, and the reasons are all measurable, so they can be retired by measurement. If Instagram opened a documented, authenticated route to a post's audio that did not require reading the rest of the page, the permission argument would get much weaker. If capture stopped being tied to real time - meaning the audio could be obtained faster than the clip plays - the speed argument would flip, and an extension would genuinely save time. Neither is true today, on the evidence we have. Until then the honest answer to 'can I do this without installing anything' is that you already can, and the rest of this page is the proof.

Affiliate link

Everything on this page assumes you already have a file, which is the case for not installing anything. When what you have is a recording in a container this tool will not read, Wondershare UniConverter converts it to MP3 or M4A on your own machine first - one pass, no upload to us of anything we can't read.

FAQ

Can I transcribe an Instagram Reel without installing an app or extension?

Yes - that is the whole point of this page. Get the audio into a file on your own device, open one 21,121-byte page, pick the file, and download TXT, SRT or VTT. There is no account and there is nothing to install. We measured the page at 21,121 bytes and 0.14 seconds to load today, with one file input and no URL or login field on it.

Why can't I just paste the Reel's URL?

Because our endpoint only accepts a file, and because Instagram does not hand that file to anyone else. Posting a URL field to /api/transcribe returned HTTP 400 with 'Please select a non-empty audio or video file.' and a JSON body returned HTTP 500. On Instagram's side, anonymous requests came back with cross-origin-resource-policy: same-origin, and both oEmbed endpoints we tried answered 404 and a 302 respectively.

Wouldn't a browser extension be faster than downloading and uploading?

Measured on the same 60 seconds, no. The file route took 4.33 to 11.13 seconds across three uploads of a 481 KB audio file, and the video version went through in 9.08 and 4.59 seconds without any pre-processing. Capturing that audio by recording the screen takes 60 seconds, because capture happens in real time. The longer the clip, the worse capture looks.

If an extension existed, could it send the Reel to you from the Instagram page?

Not directly. Our responses carry no Access-Control-Allow-Origin header - a preflight with Origin: https://www.instagram.com came back 404 with no such header, and successful responses carry none - so a script on that page cannot read what we return. It would need its own host permission to work around it. And our Content-Security-Policy sets frame-ancestors 'none', so our tool cannot be embedded in the page either.

Do you plan to build one later?

Not while these measurements hold. The two arguments against it are both empirical: capture costs real time and the file route does not, and the permission an extension needs is larger than the job requires. If either measurement changes - a documented route to the audio, or capture faster than real time - we would rather publish the new numbers than keep repeating this answer.