100 free credits on signup · no card required

Instagram Transcript API

One URL in. Clean JSON out.

Pass a public Instagram reel URL and get the spoken words back as JSON. Read this part before you write any code: the transcription pipeline is running in subtitles-only mode right now, and Instagram does not publish caption tracks we can read, so in practice this endpoint returns 404 not_found for reels rather than a transcript. It is documented here because the route is live and because speech-to-text is a configuration flip away, but today it will not give you text.

Credits 40 / reel
Input ?url=
Cache
GET · BEARER
Request composing…
Cached forever
same bytes every call
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<article class="_aagv _ab8w x1n2onr6" role="presentation"><div class="x9f619 xjbqb8w x78zum5"><div class="_aagu"><img alt="Photo by @creator" class="x5yr21d xu96u03" src="https://scontent.cdninstagram.com/v/t51...blob"/></div><section class="x6s0dn4 x78zum5 xdt5ytf"><span class="x1lliihq _aacl _aaco">55,210 likes</span><div class="_a9zs"><span dir="auto">Three settings you should change today</span></div><span class="_aacl _aaco x1i10hfl">View all 981 comments</span></section><time class="_aaqe" datetime="2026-07-03T12:00:00.000Z">18h</time></div><script type="application/json" data-sjs>{"require":[["ScheduledServerJS","handle",null,[{"__bbox"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 4 typed fields
{
"data": {
"platform": "instagram",
"entity_id": "C8xQvZ2sVAb",
"language": "en",
"source": "audio",
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [
{
"start": 0,
"end": 3.2,
"text": "Today I want to show you the three settings"
},
{
"start": 3.2,
"end": 5.9,
"text": "everyone ignores when they set this up"
}
]
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 One object, no metrics

On success the response is one object holding the transcript: the full text as a single string, an optional array of timestamped segments, the detected language, a marker saying where the text came from. Whether it came from our stored corpus or was produced on this call is reported by the x-cache response header, not in the body. There are no engagement counters and no author block here. Transcripts are a separate concern from metrics, and the endpoint keeps them separate.

02 Why reels return 404 today

The important caveat is that today there is usually nothing to return. Our pipeline gets a transcript one of two ways: it reads a caption or subtitle track the platform already publishes, or it runs speech-to-text on the video audio. The speech-to-text leg is switched off, and Instagram reels do not carry a machine-readable caption track we can pick up. That combination means a reel URL resolves, the pipeline finds no usable source, and you get a 404 with the message "no transcript is available for this content".

03 404s never cost credits

Failed calls cost nothing. Credits are charged on a 200 only, so pointing this endpoint at 500 reels today would burn 500 requests and zero credits. That is not a workaround suggestion; it is so you know a broken integration will not quietly drain a balance.

Field explorer Pick a key to see its type and the caveats.
string Always set Per item
source

How the text was produced: "upstream" for a platform caption track, "whisper" for our own speech-to-text. Always present, including on a corpus hit — a stored transcript is served back with the source it was originally produced from.

{
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": [ … ],
"language": "en",
"source": "audio"
}
Good fit

Reach for this when

  • You are building for the day speech-to-text is enabled and want the request shape, error handling and cost model wired up now rather than later.
  • You already have Instagram transcripts in the corpus from an earlier run — stored transcripts are served back permanently, so a URL that worked once keeps working.
  • You are writing a cross-platform pipeline and want a single call signature across TikTok, Instagram, Facebook and X, accepting that Instagram is the leg that currently returns nothing.
Different job?

There's an endpoint for that

  • You need Instagram reel text today, for anything real. It does not work today. Use the TikTok Transcript API if the same or similar content exists on TikTok, which for most reel creators it does.
  • What you actually want is the caption the creator typed under the reel, not the audio. That is the Instagram Stats API, which returns the caption text and hashtags for 1 credit instead of 40.
  • You want the audience's words rather than the creator's. The Instagram Comments API returns comment text and authors.
  • You want a short written summary rather than a verbatim transcript. That is the Instagram Summary API, which depends on the same transcript pipeline and is therefore subject to the same limitation.

Pricing

Start free, pay for what comes back

One reel is 40 credits — about 20¢ on the monthly plan, 18¢ on annual — but in practice you pay nothing today, because the 404 this endpoint returns for new reels is never charged.

Estimate your bill
$111/ month
30 reels/day × 40 credits × 365 days = 438,000 credits/yr, or $1,332/yr on the annual plan plus 426 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 438,000
Plan Annual $54/yr
Per reel 20¢

Estimate only, on a full-year basis. 40 credits per returned reel. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

The pipeline has two legs. Leg one reads a caption or subtitle file the platform already serves; leg two downloads the video and runs speech-to-text. Leg two is disabled, so only leg one runs.

TikTok generally ships a subtitle track inside its public video data, which is why the TikTok Transcript API works and costs 8 credits. Instagram does not, and neither do Facebook or X. The honest summary for Instagram is: no caption track, no speech-to-text, no transcript.

You get HTTP 404 with an error body, not an empty 200 with a blank text field. Handle 404 as "no transcript exists", not as "reel not found" — the reel itself may be perfectly public and reachable through the stats endpoint.

No credits are deducted on a 404. Nothing is written to the transcript corpus either, so a retry tomorrow re-attempts the pipeline cleanly rather than replaying a cached failure.

This endpoint is in the immutable cache class. Spoken words in a published reel do not change, so once a transcript exists for a reel it is stored permanently and every later call for that reel is served from storage in milliseconds.

A stored hit still costs 40 credits. Persistence buys latency and reliability, not a discount. fresh=true skips the corpus lookup and re-runs the pipeline at the same price, which is rarely useful here given the pipeline currently has nothing to fall back on.

40 credits per reel, which is $0.20 on the monthly plan and $0.18 on annual. That price reflects the media-acquisition work the full pipeline does on Instagram, which is heavier than TikTok's free-subtitle path. It is high, it is honest, and it is the reason we would rather tell you the endpoint does not work than let you discover it after a bill.

Private accounts, deleted posts and anything behind a login are unreachable. We read the same public pages you can open in a browser with no session. There is no credential store, no bypass, and no access to content Instagram does not serve anonymously.

Questions

Frequently asked

No, not for new reels. Transcription runs in subtitles-only mode, meaning we can only return text that the platform already publishes as a caption track. Instagram does not publish one in a form we can read, and speech-to-text is switched off. A call on a fresh reel URL returns 404 with "no transcript is available for this content". Reels already in our transcript corpus are still served normally.

If the creator posts the same content to TikTok, use the TikTok Transcript API — TikTok ships subtitle tracks publicly and that endpoint works today at 8 credits per video. If you only need the written caption under the reel rather than the spoken audio, the Instagram Stats API returns it along with hashtags and engagement counts for 1 credit. Neither is a substitute for real audio transcription, but one of them usually covers the actual job.

No. Credits are metered on successful responses only. A 404 from this endpoint costs zero credits, and so do timeouts and upstream failures. You can safely leave a call in a pipeline while you wait for speech-to-text to be enabled, though you should still handle the 404 branch rather than assuming a transcript will arrive.

Segments are timestamped chunks, each with a start second, an end second and its text, useful for jumping to a moment in the video or aligning a transcript with a scrubber. They only exist when text came from speech-to-text, because that step reports timings directly. Text pulled from a platform caption file is flattened to a plain string and segments is null.

There is no date. The speech-to-text leg is built and sitting behind a configuration switch, so enabling it is a deployment decision rather than an engineering project, but we will not promise a week. When it turns on, this page changes and the endpoint starts returning text at the same 40 credits per reel. Nothing about the request shape or the response fields changes.

No. We read public content only, logged out, with no stored credentials. Private accounts, close-friends posts, stories and anything requiring a session are out of reach by design. If a reel is public but the account later goes private, an existing transcript in the corpus stays available while new lookups on that account will fail.

Not for reels whose value is in the audio. Summarisation reads the transcript, so where there is no transcript there is nothing substantial to summarise. If your goal is a short description of a reel today, the more reliable route is the caption from the Instagram Stats API fed into your own model.

Next

Pairs well with

Full Instagram API reference →
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 8 cr / video
/v1/instagram/stats
Instagram Stats API Likes, comments and view counts for an Instagram post or reel. 1 cr / post
/v1/instagram/comments
Instagram Comments API Paginated comments on an Instagram post; charged per comment returned. 3 cr / comment
/v1/facebook/transcript
Facebook Transcript API Full transcript of a Facebook video with timestamped segments. 15 cr / video

More Instagram endpoints

/v1/instagram/summary Short AI summary of an Instagram reel, built on its transcript. 42 credits / reel /v1/instagram/stats Likes, comments and view counts for an Instagram post or reel. 1 credit / post /v1/instagram/comments Paginated comments on an Instagram post; charged per comment returned. 3 credits / comment /v1/instagram/channel-stats Follower counts, bio and profile metadata for an Instagram account. 3 credits / profile /v1/instagram/channel-posts Latest posts from an Instagram account with per-post metrics. 2 credits / post /v1/instagram/channel-reels Latest reels from an Instagram account with per-reel metrics. 3 credits / reel /v1/instagram/reels-search Keyword search over Instagram reels. 3 credits / result /v1/instagram/download Resolves a downloadable media URL for an Instagram reel (URL expires within 1h). 40 credits / video

Try the Instagram Transcript endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/instagram/transcript
Get your free API key