Instagram hub

Instagram transcript API

Pass a public `/p/`, `/reel/`, or `/tv/` URL and get per-media plain-text rows — including multiple rows when a carousel has more than one video clip.

GET /v1/instagram/posts/transcript

1 credit per successful request.

About this endpoint

UGC and creator pipelines usually care about what was said on a Reel or in-feed video, not the like count. Instagram does not expose one stable caption field across posts, Reels, and carousels: some items ship usable speech text, some return nothing, and a carousel can mix silent stills with spoken clips. Scraping GraphQL for that yourself breaks when signed browse shapes rotate.

`GET /v1/instagram/posts/transcript` is the single transcript route for Instagram media. Pass a public `url` (`/p/…`, `/reel/…`, or `/tv/…`). There is no separate Reel-only transcript path. On a completed call, branch on `data.lookupStatus` (`found` / `not_found`), then iterate `data.transcripts` — each row has `id`, `shortcode`, and `text` (plain string or null). `found` means the media resolved; it does not mean every row has non-null text.

Carousel albums can return more than one transcript row when multiple video children expose text. Clips that exceed the supported length fail with HTTP 400 `video_too_long_for_transcription` instead of a null row on 200. This route has no `useAiFallback` — missing speech stays null. Pricing is on the credit badge; bill from `meta.creditsCharged`.

Instagram transcript API FAQ

How do I get an Instagram post or Reel transcript via API?

Call `GET /v1/instagram/posts/transcript` with your Social Fetch API key (`x-api-key`) and a public post, Reel, or IGTV `url`. Read `data.lookupStatus`, then iterate `data.transcripts`. Full parameters and examples are in the API docs.

How much does the Instagram transcript endpoint cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged — that field is the billing source of truth.

Is there a separate Instagram Reel transcript endpoint?

No. Reels use the same `GET /v1/instagram/posts/transcript` route as `/p/…` and `/tv/…` links. Pass the Reel URL as `url`; do not look for a `/reels/transcript` path.

What format is the Instagram transcript response?

An array of plain-text rows in `data.transcripts` (`id`, `shortcode`, `text`). `text` is a string or null — not WebVTT and not timed segments. Always check `lookupStatus` and each row's `text` before writing speech into your store.

Does found mean every Instagram transcript row has text?

No. `found` means the post or Reel resolved. Individual `transcripts[].text` values can still be null when Instagram exposes no spoken text for that media item. You still pay for a completed lookup. Persist `meta.requestId` when a row looks wrong.

Can carousel Instagram posts return multiple transcripts?

Yes. When a carousel has more than one video item with transcript data, `data.transcripts` can contain multiple rows. Iterate the array; do not assume a single object.

What happens if an Instagram Reel is too long to transcribe?

The API returns HTTP 400 with `video_too_long_for_transcription`. That is not the same as a 200 with `text: null`. Persist `meta.requestId` / `error.requestId` if you need support on a rejected clip.