By Nikhil Kumar. Last updated October 2026.
As of this week, you can pull the spoken words out of a public Instagram reel with one API call. Facebook and X videos are still a different story.
Here’s the state of Instagram, Facebook and X video transcripts in October 2026. Instagram reels and video posts work: you get plain text back, and because the price is set per started minute of audio, most reels cost about 10 cents. Facebook and X transcript calls return 404 for nearly every video, at no charge. This guide shows what each platform gives you and what to use when there’s no transcript.
Which video transcripts work today on Instagram, Facebook and X?
Instagram works and the other two don’t, at least through this API. Instagram reels and video posts return plain-text transcripts, billed by the started minute of video. Facebook and X transcript calls return 404 not_found for nearly every video, and failed calls are never charged. TikTok, for comparison, costs 2 credits a video when the video has captions.
Here’s the side-by-side, from the live endpoint catalog in October 2026:
| Platform | Status | Price | What you get | Main failure |
|---|---|---|---|---|
| Works | 1 + 20 per started minute | Plain text, duration_sec | 422 for photos or videos over 10 min | |
| 404 today | Free when it fails | Nothing yet | Most calls return 404 | |
| X | 404 today | Free when it fails | Nothing yet | Most calls return 404 |
| TikTok | Works with captions | 2 credits | Plain text, language | 404 when there are no captions |
I’d rather tell you this up front than have you build a three-platform pipeline and find two empty branches in production.
Instagram is the one that matters most for video text anyway. Meta said on its Q1 2024 earnings call that Reels make up half the time people spend in Instagram, a company-reported figure, but a telling one.
How do you get an Instagram reel transcript with an API?
Pass the reel or video post URL to the Instagram transcript endpoint and authenticate with a Bearer token. What comes back is the standard envelope: data.text holds the spoken words as one string, data.duration_sec holds the video length the price came from, and segments and language are both null. Both /reel/ and /p/ URLs work for video content.
Here’s the whole call in Python:
import requests
r = requests.get( "https://api.scrapersocial.com/v1/instagram/transcript", params={"url": "https://www.instagram.com/reel/C8xQvZ2sVAb/"}, headers={"Authorization": "Bearer sk_live_..."}, timeout=180,)if r.ok: t = r.json()["data"] print(t["duration_sec"], "seconds") print(t["text"])else: print(r.status_code, r.json()["error"]["code"])A successful response looks like this (the text is an example):
{ "data": { "text": "three things I wish I knew before my first marathon...", "segments": null, "language": null, "duration_sec": 42, "source": "upstream" }, "request_id": "req_01JZY2K8P3"}Give the request a generous timeout. The video length is checked before the transcript is made, so a call does two pieces of work, and a cold call can take longer than a cached one.
Once a reel is transcribed, the text is stored permanently. Repeat calls come back in milliseconds, though they’re billed the same.
How much does an Instagram reel transcript cost?
1 credit for the reel plus 20 credits for every started minute of video. Seconds round up, so a 15-second reel and a 59-second reel both cost 21 credits, while a 61-second reel costs 41. On the $5 monthly plan, where a credit is half a cent, that’s about 10.5 cents for most reels. Videos over ten minutes are refused before any charge, which caps a single call at 201 credits.
Most reels fall in the cheapest bracket. Instagram only raised the Reels limit from 90 seconds to three minutes in January 2025, Social Media Today reported, so a reel at the current maximum costs 61 credits.
| Video length | Billed minutes | Credits | Cost (monthly plan) |
|---|---|---|---|
| 15 seconds | 1 | 21 | ~$0.11 |
| 59 seconds | 1 | 21 | ~$0.11 |
| 61 seconds | 2 | 41 | ~$0.21 |
| 3 minutes | 3 | 61 | ~$0.31 |
| 10 minutes (cap) | 10 | 201 | ~$1.01 |
So 100 typical reels cost about 2,100 credits, roughly $10.50. That’s a lot more than a TikTok transcript at 2 credits, because there’s no caption track the API can read on Instagram, so every reel is transcribed from its audio.
Why per minute instead of a flat fee? The transcription behind it is billed per minute of audio, and that cost is passed through rather than averaged into one price. Short reels stay cheap, and long ones pay for their length.
The duration_sec field makes the bill checkable. Round it up to whole minutes, multiply by 20 and add 1, and you should land on the number in the X-Credits-Charged header.
The credit gate prices the smallest possible call before it runs. If your balance is under 21 credits, the request is refused up front with a 402 rather than part-charged.
What does an Instagram transcript leave out?
Timestamps, language, the creator’s typed caption and any text shown on screen. You get the spoken words as one block and nothing else. That’s fine for search, quotes and summaries, but not for subtitles or jumping to a moment. For the caption and hashtags, call the stats endpoint at 1 credit. On-screen text needs a visual pass that no transcript gives you.
The missing language field surprises people. Instagram has shown auto-generated captions on feed videos since March 2022, in 17 languages at launch, but the transcript here doesn’t report one. Run a language detector on the text if your pipeline routes by language.
The Instagram stats endpoint fills most of the other gaps for 1 credit:
captionis the text the creator typed under the post, hashtags included.hashtagscomes pre-parsed, without the leading #.duration_sectells you the length before you pay for a transcript.typetells you whether the post is a video at all.
That third field is a budget tool. Calling stats first costs 1 credit and tells you what the transcript will cost, which helps when you’re estimating a large batch.
Speaker labels are missing too. If two people talk in a reel, their words run together in one string, so an interview reel reads like a monologue.
For most uses that’s fine. Search, keyword counts, topic tagging and AI summaries all work on a single block of text. Where it hurts is anything that needs to show who said what, or when.
If you want to know why some platforms give you timestamps and others don’t, this post on missing timestamps walks through it.
Can you get a Facebook video transcript?
Not through this API today. Facebook transcript calls return 404 not_found for nearly every video, and a 404 costs nothing. The endpoint exists and the route is live, but there’s no working source of spoken text behind it right now. Build your Facebook branch around the post’s typed caption and its comments instead, and treat a transcript as a bonus if one ever comes back.
Here’s what you can get from a Facebook video post today:
| Need | Endpoint | Cost |
|---|---|---|
| The typed caption | Facebook stats | 3 credits |
| Views, likes, shares | Facebook stats | 3 credits |
| Audience reaction | Facebook comments | 1 credit per comment |
| The video file | Facebook download | 3 credits |
If you own the video or have the rights to it, the download plus a speech-to-text tool on your side is the remaining route to its words. Check your rights first. “Public” isn’t the same as “licensed for reuse.”
Why the 404s? Transcripts here come from one of two places.
Where a platform ships a caption track with the video, as TikTok does, the API reads it. Where it doesn’t, the words have to be transcribed from the audio, which is how Instagram now works. Facebook and X have neither route switched on yet, so there’s nothing to return.
That also explains the October 2026 change. Until late October, Instagram calls returned the same 404, because no audio route was running for it either. When that changed, the per-minute price above came with it.
A 404 carries the usual error envelope with a request_id, so your handler can tell “no transcript” apart from a real failure such as a 502.
Can you get an X (Twitter) video transcript?
Not through this API yet. X transcript calls return 404 not_found for nearly every video, at no cost. The post text is the reliable text source on X: the stats endpoint returns it for 1 credit, along with a lang field, views and comment counts. For most X research, the words people typed are where the signal is anyway.
X does caption videos in its own app. Twitter added automatic captions for new uploads in December 2021, but those captions aren’t something this pipeline can read.
Most X videos are short, too. Accounts without Premium can upload up to 140 seconds, while Premium subscribers can go up to four hours on the web and iOS, according to X’s help center.
So if you’re watching a topic on X, start with post text. That’s where most of the conversation is.
A practical split works well. Use the X search endpoint to find posts on your topic, read their text, and only worry about the video when the text points to it, for example “watch the clip at 2:10.”
One more route is worth checking. When an X post shares a clip that also lives on YouTube, the YouTube transcript endpoint can return its words with timestamps, for 5 credits.
Should X transcripts start working, the same call signature will return text with no change to your code. Until then, treat the X transcript branch as a 404 you’ve already handled.
How do you handle all three platforms in one pipeline?
Route by platform before you call anything. Send Instagram URLs to the transcript endpoint, send Facebook and X URLs straight to their stats endpoints for text, and log every 404 and 422 as a row rather than an error. Put a per-minute budget on the Instagram branch, since it’s the only one whose cost depends on video length. That way nothing retries forever, and the Instagram spend stays predictable.
A minimal router looks like this:
import requests
API = "https://api.scrapersocial.com/v1"H = {"Authorization": "Bearer sk_live_..."}
def video_text(url: str) -> dict: if "instagram.com" in url: r = requests.get(f"{API}/instagram/transcript", params={"url": url}, headers=H, timeout=180) if r.ok: d = r.json()["data"] return {"kind": "transcript", "text": d["text"], "seconds": d["duration_sec"]} return {"kind": "none", "status": r.status_code} platform = "facebook" if "facebook.com" in url else "twitter" r = requests.get(f"{API}/{platform}/stats", params={"url": url}, headers=H, timeout=60) if not r.ok: return {"kind": "none", "status": r.status_code} d = r.json()["data"] return {"kind": "post_text", "text": d.get("caption") or d.get("text")}Notice what the router doesn’t do: it never calls the Facebook or X transcript endpoints. Calling them today would just collect free 404s and slow the loop down.
The kind field matters later. When you analyse the results, a spoken transcript and a typed caption are different evidence, so keep them labelled.
The errors reference lists every code you’ll see, including out_of_credits when the Instagram branch runs your balance down.
How do you transcribe Instagram reels in bulk?
List the account’s reels first, estimate the bill from their durations, then transcribe the ones you need. The channel-reels endpoint returns up to 50 recent reels per call at 1 credit each, and every reel carries duration_sec, caption and views. That’s enough to skip reels you don’t need, sort by views and cost the batch before you spend anything on transcripts.
Here’s the math for one creator’s latest 50 reels, assuming they all run under a minute:
| Step | Math | Credits |
|---|---|---|
| List 50 reels | 50 x 1 | 50 |
| Transcribe all 50 | 50 x 21 | 1,050 |
| Total | 1,100 (about $5.50) |
Trim the list first and the bill drops fast. Transcribing only the top 20 by views is 50 + 420, or 470 credits.
I’d set a credit budget per creator and work down the list from the most-viewed reel, stopping when the budget runs out. That stops one prolific creator from eating the whole batch, and the reels people actually watched get transcribed first.
Mind your request rate on big batches. Plans allow 20 requests a minute on the free trial and 200 on the $5 monthly plan, per the rate limit docs, so a paced loop of a few calls at a time is plenty.
Store every transcript with its reel id. The spoken words in a published reel don’t change, so you only need each one once in your own database.
Can you transcribe someone else’s Instagram reel?
Technically, yes, for any public reel or video post. Private accounts and posts behind a login are out of reach. Whether you should depends on what you do with the text. Analysing public reels for research, search or summaries is a common use. Republishing a creator’s full transcript as your own content is a different matter, so quote briefly, attribute and link back.
Two rules of thumb keep you on the right side of it:
- Use the text to learn something, then write your own words about it.
- When you quote, keep it short and link to the reel, so readers can hear it in context.
If the people in the reels are private individuals rather than public creators, be careful with names. Store handles separately from transcripts if your project doesn’t need to know who said what.
How should you check Instagram transcript quality?
Filter out very short transcripts, spot-check a sample against the audio, and never quote a transcript you haven’t listened to. Music-only reels are the main trap: they still bill a minute and usually return a stray syllable or a few words of noise. A simple rule, such as flagging anything under five words from a reel over 20 seconds, is a reasonable first filter.
Three habits keep the data clean:
- Store
duration_secwith every transcript, so you can compare words per second and flag the odd ones. - Listen to 20 random reels against their text before you trust a batch.
- Keep the reel URL with each row, so anyone can check a quote at the source.
None of this takes long. Twenty reels at under a minute each is a short listening session, and it tells you more about the data than any accuracy claim on a vendor page.
Spot-check reels that mix languages, too. With no language field, nothing in the response warns you that a reel switches between two, so run a language detector over the text and listen to the ones it flags.
And if you already know a reel is a song with no speech, don’t send it. That’s 21 credits you get nothing for.
Frequently asked questions
How much does an Instagram reel transcript cost?
1 credit for the reel plus 20 credits for every started minute of video. Anything under a minute is 21 credits, about 10.5 cents on the $5 monthly plan. A three-minute reel is 61 credits, and the ten-minute cap puts the most one call can cost at 201. Failed calls cost nothing, and the response shows the duration the price came from.
Can I get timestamps for an Instagram transcript?
Not from this endpoint. Instagram transcripts come back as one block of plain text, with segments and language both null. If you need to jump to the moment a phrase was said, you’d have to align the text against the audio yourself. YouTube is the platform here whose transcripts do come with timed segments.
Can I get a transcript of a Facebook video?
Not through this API today. Facebook transcript calls return 404 for nearly every video, and a 404 costs nothing. For now, use the post’s typed caption from the Facebook stats endpoint, or comments for audience reaction. If you have the rights to a video file, a speech-to-text tool on that file is the remaining option.
How do I transcribe an X (Twitter) video?
Not through this API yet. X transcript calls return 404 for nearly every video, at no cost. X has shown auto-captions on new uploads in its own app since December 2021, but they aren’t something this pipeline can read. Use the post text from the X stats endpoint, at 1 credit, as your text source in the meantime.
Does an Instagram transcript include the caption or on-screen text?
No. A transcript is the spoken audio only. The caption the creator typed under the reel comes from the Instagram stats endpoint for 1 credit, along with hashtags and duration. Text burned into the video, like titles and captions stickers, appears in neither. If on-screen text matters to your project, you need a separate visual pass.
What happens with a music-only Instagram reel?
It still bills one minute, so 21 credits. The audio is processed either way, and what comes back is usually a stray syllable or a few words of noise rather than an empty result. Only a completely empty result returns a free 404. Skip reels you know are music only, and filter very short transcripts out of your results.
Transcribe your first five reels today
Pick five public reels you care about, run the Python snippet on each, and compare the text with what you hear. That costs about 105 credits. A new key starts with 25 free ones, enough for one. Get your API key and see what Instagram’s audio gives you before you plan the bigger batch.