25 free credits on signup · no card required

Instagram Transcript API

One URL in. Clean JSON out.

Pass a public Instagram reel or video post URL and get the spoken words back as plain text, with the length of the video that was billed. The price is 1 credit for the reel plus 20 credits for every started minute of video, because the transcript is produced per minute upstream and we pass that through rather than averaging it into a flat fee. A 15-second reel is 21 credits; a 61-second reel is 41. Failed calls cost nothing.

Use via MCP: Instagram MCP server gives Claude, Cursor and any MCP client this endpoint as a tool.

Credits 1 / 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 5 typed fields
{
"data": {
"text": "Today I want to show you the three settings everyone ignores when they set this up for the first time...",
"segments": null,
"language": null,
"duration_sec": 67.29
},
"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 Plain text, no timings

One object holding the transcript: the full text as a single string, a segments field that is null, a language field that is null, and duration_sec, the length of the video in seconds. Whether the text 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; the Instagram Stats API has those.

02 1 credit + 20 per minute

The text arrives as one block. Instagram's transcript source gives us plain text with no timestamps and no language tag, so segments and language are null on this platform. If you need timed segments, the YouTube Transcript API returns them; Instagram and TikTok do not.

03 Failures never cost credits

duration_sec is there so you can check the bill. Credits are 1 for the reel plus 20 per started minute: round duration_sec up to whole minutes, multiply by 20, add 1. A reel with no duration available upstream bills as one minute. The same number is charged on a corpus hit, so repeat calls for the same reel cost what the first one did.

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

How the text was produced. "upstream" on Instagram: the transcript is bought from the upstream transcription service rather than read from a caption track.

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

Reach for this when

  • ✓You want the words spoken in a reel: quotes, claims, product mentions, the script of a talking-head video, for search, moderation or analysis.
  • ✓You are indexing a creator's reels as text. Transcripts are stored permanently, so a reel you have transcribed once is served back for the same price in milliseconds and never re-processed.
  • ✓You are writing a cross-platform pipeline and want one call signature across TikTok, Instagram, Facebook and X. The Instagram leg returns plain text rather than segments, which is the only difference to handle.
Different job?

There's an endpoint for that

  • →What you want is the caption the creator typed under the post, not the audio. That is the Instagram Stats API, which returns the caption text and hashtags for 1 credit.
  • →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. The Instagram Summary API runs this same transcript and adds a summary pass, at 4 credits plus the same per-minute charge.
  • →The video is longer than ten minutes. Transcripts are capped at ten minutes of video; longer posts are refused with a 422 before anything is charged.
  • →The reel is music only. There is no speech to transcribe, but the per-minute charge still applies to what comes back; see the gotcha below.

Pricing

Start free, pay for what comes back

One reel is 1 credit plus 20 per started minute of video — 21 credits for anything under a minute, about 10.5¢ on the monthly plan and 9.5¢ on annual. Failed calls are never charged.

Estimate your bill
$5/ month
30 reels/day × 1 credits × 365 days = 10,950 credits/yr — inside the base plan Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 10,950
Plan Annual $54/yr
Per reel 0.5¢

Estimate only, on a full-year basis. 1 credits per returned reel. Monthly: $5 per 1,000 credits with $5/1,000 top-ups. Annual: $54 per 12,000 credits with $4.50/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
25 credits

On signup, no card, up to 5 items a call. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $5 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $4.50 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 · 25 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 never charged; empty results free up to 25 a day ✓Public data only, no login session ✓Built for parallel traffic

1 credit for the reel plus 20 credits for each started minute of video. Seconds round up to the next minute: a 15-second reel and a 59-second reel both bill one minute (21 credits), a 61-second reel bills two (41 credits), and the ten-minute cap means the most a single call can cost is 201 credits.

The minute count comes from the video's reported duration, which is returned as duration_sec so the bill is checkable. The credit gate uses the same rule: a balance below 21 credits is refused up front with a 402 rather than part-charged.

Both /reel/ and /p/ URLs work for video content. A photo, a carousel or a post with no video is refused with a 422 and is not charged. 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.

Videos longer than ten minutes are refused with a 422 before the transcript is produced, so a long video costs you nothing. The limit exists because the per-minute charge is open-ended otherwise.

When there is no speech, the transcript source still processes the audio, bills the minute, and tends to return a stray syllable or a few words of noise rather than an empty string. We cannot tell that apart from a very short real transcript, so a 200 with a very short text is charged like any other. If a reel is obviously music only, skip it.

A genuinely empty result, where no text comes back at all, is a 404 and costs nothing.

Failures are HTTP errors, never an empty 200: 404 when no transcript is available, 422 for a non-video post or a video over ten minutes, 502 when the upstream run fails. None of them deduct credits, and nothing is written to the transcript corpus on a failure, so a retry re-attempts the pipeline cleanly rather than replaying a cached error.

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

A stored hit costs the same as the first call: 1 credit plus 20 per started minute of the stored duration. Persistence buys latency, not a discount. fresh=true skips the corpus lookup and re-runs the pipeline at the same price.

Questions

Frequently asked

1 credit for the reel plus 20 credits for each started minute of video. Most reels are under a minute, so most calls are 21 credits, about 10.5¢ on the monthly plan. A 90-second reel is 41 credits, and the ten-minute cap puts the ceiling at 201. The duration_sec field in the response shows the length the charge was computed from. Failed calls are free.

Yes. Transcripts for public reels and video posts are produced through our upstream per-minute transcription, which is why the price has a per-minute component. The earlier subtitles-only limitation that returned 404 for Instagram no longer applies. A 404 now means the upstream returned no text at all for the video.

Instagram's transcript source returns the spoken words as one block of plain text with no timings, and we do not invent timestamps we do not have. The field stays in the response so the shape matches the other platforms; YouTube is the one where segments are filled in. If you need to align text to the video, you will have to do it from the audio yourself.

The transcript source does not report a language for Instagram, and we would rather return null than guess. The text itself is in whatever language is spoken; run a language detector on it if your pipeline needs the tag.

The per-minute charge still applies, because the audio is still processed upstream, and what comes back is usually a stray syllable or a couple of words of noise rather than nothing. That counts as a 200 and is billed. Only a completely empty result is a free 404. If you know a reel is music only, do not send it.

No. The video's length is checked first and anything over ten minutes is refused with a 422, which is not charged. The cap keeps the per-minute price bounded; the most one call can cost is 201 credits.

No. Credits are metered on successful responses only. A 404, a 422 for a non-video or over-long post, a timeout or a 502 all cost zero credits. Nothing is stored on a failure either, so retrying later re-runs the pipeline rather than returning a cached error.

Next

Pairs well with

Full Instagram API reference →
/v1/instagram/summary
Instagram Summary API Short AI summary of an Instagram reel or video post, built on its transcript. 4 cr / reel
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 2 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. 1 cr / comment

More Instagram endpoints

/v1/instagram/summary Short AI summary of an Instagram reel or video post, built on its transcript. 4 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. 1 credit / comment /v1/instagram/channel-stats Follower counts, bio and profile metadata for an Instagram account. 1 credit / profile /v1/instagram/channel-posts Latest posts from an Instagram account with per-post metrics. 1 credit / post /v1/instagram/channel-reels Latest reels from an Instagram account with per-reel metrics. 1 credit / reel /v1/instagram/reels-search Keyword search over Instagram reels. 1 credit / result /v1/instagram/download Resolves a downloadable media URL for an Instagram reel (URL expires within 1h). 8 credits / video

Try the Instagram Transcript endpoint free

25 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