Instagram Reel Transcript Scraper — Reels to Text, SRT & VTT avatar

Instagram Reel Transcript Scraper — Reels to Text, SRT & VTT

Pricing

from $3.00 / 1,000 transcript minutes

Go to Apify Store
Instagram Reel Transcript Scraper — Reels to Text, SRT & VTT

Instagram Reel Transcript Scraper — Reels to Text, SRT & VTT

Instagram Reel transcripts from any public Reel URL: full spoken text, timestamped segments, SRT & VTT files, creator, caption, likes and comments. On-device Whisper, so Reels without captions still come back as text. No login, 30+ languages. From $0.003 per Reel, billed per minute, capped at 5 min.

Pricing

from $3.00 / 1,000 transcript minutes

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 hours ago

Last modified

Share

Get an accurate Instagram reel transcript from any public Reel URL. Paste one link or a whole batch and this Instagram reel transcript extractor returns one row per Reel: the full spoken text, subtitle-style timestamped segments, ready-made SRT & VTT caption files, and creator metadata such as username, caption, likes and comments. On-device Whisper speech-to-text means you get text even when the creator never added captions. No login, 30+ languages, JSON or CSV out. From $0.003 per Reel: billed per started minute of video at $0.003, minimum 1 minute, capped at 5 minutes ($0.015) per Reel, plus a $0.01 start per run at the default 2 GB. A Reel that fails or is skipped is never charged.

Why use this Instagram Reel Transcript Scraper?

  • Works on Reels with no captions — Instagram exposes no caption track to the public, so the actor downloads each Reel's audio and transcribes the actual speech with Whisper. Captioned or not, you get the text.
  • Batch runs are native — paste 5 or 500 Reel URLs into a single run and get one clean dataset back, instead of starting a separate run per link.
  • Subtitle files with every row — full srt and vtt text plus direct .srt / .vtt download links, ready for any editor.
  • Timestamped segments — a segments array (start, end, text) for hook analysis, jump-to-moment links or custom captions.
  • No Instagram login or cookies — works on any public Reel URL, nothing to configure.
  • 30+ languages — set the spoken language or let Whisper detect it per Reel.
  • Per-minute pricing with a hard cap — $0.003 per started minute, minimum 1, and never more than 5 minutes ($0.015) per video. A typical 30-second Reel is one minute. Nothing is charged for a Reel that fails, is private, or is skipped by your duration limit.
  • The hook on every rowhook3s is the first 3 seconds of speech and hookStartSeconds says when the talking starts, so a creator's openers compare side by side without reading transcripts.
  • Chain any Instagram scraper — pass a finished run's datasetId (or paste rows in datasetItems) and every Reel URL in those rows is transcribed; the row shape does not matter.
  • Scheduled runs bill only what is new — name a watchlistId and switch on newReelsOnly; a Reel transcribed on an earlier run is left out and never charged twice.
  • Every miss on the record — asked = delivered + reported. What was not delivered is in the run's ERRORS record with a reason and what to change, and the status line reconciles the count.

What does it do?

Give it a list of Instagram Reel URLs. For each one the actor:

  1. Resolves the public Reel and its metadata (cookieless).
  2. Downloads the audio.
  3. Runs on-device Whisper speech-to-text.
  4. Pushes one row: metadata + full transcript + timestamped segments + SRT/VTT files.

Supported input

InputExample
Reel URLhttps://www.instagram.com/reel/Dabg9j1xNHM/
Reels URLhttps://www.instagram.com/reels/Dabg9j1xNHM/
Chained datasetdatasetId: "nGkT…" — the default dataset of a finished Instagram Reel Scraper, Reels Search or Hashtag Scraper run
Pasted rowsdatasetItems: [ { "url": "https://www.instagram.com/reel/…" } ]

Only /reel/ and /reels/ links are transcribed; a post (/p/) or IGTV (/tv/) link is reported as not_a_reel and lives in Instagram Transcript Scraper. Chained rows are deep-scanned, so it does not matter which field holds the link.

Scheduled runs: a Reel is never billed twice

Give the run a watchlistId (letters, numbers, hyphens, underscores; for example nasa-daily) and switch on newReelsOnly. The actor keeps the shortcodes it has transcribed in a named key-value store under that id; every later run with the same id leaves those Reels out of the work and the dataset, so a schedule that re-feeds the same profile or hashtag pays only for what is new. The watchlist uses the same record as Instagram Transcript Scraper, so one id can serve both actors. A run whose input is entirely on the watchlist finishes with "Nothing new" and charges nothing but the run start.

What was not delivered, and why

Every Reel the input asked for ends as a dataset row or as an entry in the run's ERRORS record (key-value store), never neither. The record is written on every run, with an empty items list when everything was delivered, so an integration can read it unconditionally. Each entry carries a reason, a plain-language detail saying what happened and what to change, and a retryable flag:

reasonWhat happenedRe-run as-is?
not_a_reelA post, IGTV, profile or other non-Reel linkNo — use the Instagram Transcript Scraper for posts
private_or_goneInstagram would not serve the Reel to a logged-out client: private, deleted, region-lockedNo
no_audioAn image post; nothing to transcribeNo
too_longOver your maxDurationSecRaise the limit
transportThe fetch failed on the network after retries on fresh proxy exitsYes, in a few minutes
transcription_failedWhisper or the audio download failedYes
budget_capmaxItems was reached before this Reel's turnRaise maxItems

The run's status line carries the same arithmetic, for example "Delivered 9 of 10 reels. 1 not delivered and not charged: 1 private, removed or not found — see the ERRORS record." A run that delivers nothing because every fetch failed on the network is marked FAILED so it stands out in your run list; a run whose misses describe the Reels themselves finishes SUCCEEDED.

Use cases

  • Hook analysis — read the first two seconds of speech across dozens of Reels and see exactly which openers stop the scroll.
  • Creator & competitor research at scale — batch-transcribe a creator's whole grid and search the talking points, CTAs and product mentions as text.
  • Caption files for editing — drop the ready .srt / .vtt files straight into CapCut, Premiere, DaVinci Resolve or Instagram's own caption upload.
  • Translation & repurposing — turn winning Reels into blog posts, newsletters, scripts for other platforms, or translated re-records.
  • LLM content pipelines — clean, timestamped text for RAG indexes, fine-tuning datasets and agent workflows.

How it works

The actor uses yt-dlp to resolve each public Reel and pull its audio without any login, then transcribes the audio locally with faster-whisper (a fast CTranslate2 build of OpenAI Whisper). Transcription runs inside the actor itself: there is no external transcript API in the loop, so nothing can run out of credits or throttle your batch mid-run, and your audio never leaves the container. Instagram traffic is routed through residential proxies by default.

Input configuration

FieldTypeDefaultDescription
startUrlsarrayInstagram Reel URLs (/reel/ or /reels/) to transcribe.
datasetIdstringDefault dataset of a finished Instagram scraper run; every Reel URL in its rows is transcribed.
datasetItemsarrayRows pasted from a scraper instead of chaining by id.
watchlistIdstringNamed memory for scheduled runs; see above.
newReelsOnlybooleanfalseLeave out Reels already on the watchlist. Needs watchlistId.
whisperModelselecttinytiny (fast, reliable), base or small (more accurate, slower).
languagestringautoISO code (en, es, ar, …) or auto to detect per Reel.
includeSegmentsbooleantrueInclude the segments array of timestamped chunks.
maxItemsinteger25Maximum Reels to transcribe this run.
maxDurationSecinteger300Skip videos longer than this (compute guard). 0 disables.
maxConcurrencyinteger2Reels transcribed in parallel (1–4).
proxyobjectResidentialProxy configuration.

Example input

{
"startUrls": [
{ "url": "https://www.instagram.com/reel/Dabg9j1xNHM/" }
],
"whisperModel": "tiny",
"language": "auto",
"includeSegments": true,
"maxItems": 25
}

What a run costs

Each delivered transcript is billed at $0.003 per started minute of video, minimum 1 minute, capped at 5 minutes. The only other charge is the run start: $0.005 per GB of run memory, so $0.01 per run at the default 2 GB, charged once however many Reels the run holds. Batch your Reels into one run and the start fee spreads over all of them. Whisper runs on the run's own compute, so Apify platform usage applies as on any actor; there is no third-party transcription API to pay for.

Reel lengthBilled minutesTranscript charge
12 s1$0.003
58 s1$0.003
2:303$0.009
4:10 or longer5 (cap)$0.015
100 Reels averaging 45 s100$0.30 (+ one $0.01 run start)

A Reel that cannot be fetched, is private, has no audio, or exceeds maxDurationSec produces no row and no transcript charge.

Output

One row per Reel. Example (abridged):

{
"id": "Dabg9j1xNHM",
"shortcode": "Dabg9j1xNHM",
"url": "https://www.instagram.com/reel/Dabg9j1xNHM/",
"username": "nasaadmin",
"userId": "79712351002",
"fullName": "NASA Administrator Jared Isaacman",
"caption": "For 250 years, America has inspired generations to dream bigger…",
"durationSec": 58,
"thumbnailUrl": "https://instagram.f…/735552979_….jpg",
"timestamp": 1783294802,
"uploadDate": "20260705",
"likeCount": 56053,
"commentCount": 1923,
"viewCount": null,
"isVideo": true,
"transcript": "For 250 years, the United States of America has been the hope, the promise, the light and the glory of all the nations of the world…",
"language": "en",
"hook3s": "For 250 years, the United States of America has been the hope",
"hookStartSeconds": 0.46,
"segments": [
{ "start": 0.46, "end": 5.46, "text": "For 250 years, the United States of America has been the hope" }
],
"srt": "1\n00:00:00,460 --> 00:00:05,460\nFor 250 years, the United States of America has been the hope\n",
"vtt": "WEBVTT\n\n00:00:00.460 --> 00:00:05.460\nFor 250 years, the United States of America has been the hope\n",
"srtFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/Dabg9j1xNHM.srt",
"vttFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/Dabg9j1xNHM.vtt",
"billedMinutes": 1,
"transcriptSource": "whisper",
"whisperModel": "tiny",
"transcribedAt": "2026-07-15T09:49:00.990Z"
}

Key output fields

FieldDescription
transcriptFull spoken text of the Reel.
hook3s / hookStartSecondsThe first 3 seconds of speech, and when speech starts; empty when the Reel opens silent.
segmentsArray of {start, end, text} timestamped chunks (subtitle-ready).
srt / vttThe transcript as ready-made SubRip and WebVTT subtitle text.
srtFileUrl / vttFileUrlDirect download links to the .srt / .vtt files.
billedMinutesMinutes billed for this Reel (per started minute, min 1, max 5).
languageDetected (or specified) spoken language.
username / fullNameCreator handle and display name.
captionThe Reel's written caption.
likeCount / commentCountEngagement metrics when available.
durationSecVideo length in seconds.
transcribedAtUTC timestamp of transcription.

FAQ

How is it billed? $0.003 per started minute of video, minimum 1 minute per Reel, plus one $0.01 run start (2 GB) per run. A 20-second Reel bills 1 minute; a 3:10 Reel bills 4. Billing is capped at 5 minutes per video, so even a very long video never bills more than 5 minutes. Skipped items (private, image-only, over your duration limit) are never charged.

Can I feed it the output of another scraper? Yes. Put the finished run's default dataset id in datasetId (or paste rows into datasetItems); every field is scanned for Reel links. On a schedule, add a watchlistId with newReelsOnly so the same Reels are not transcribed and billed again.

Can I transcribe many Reels in one run? Yes, batching is native. Paste any number of Reel URLs and the run returns one combined dataset. Competing actors take one URL per run, which turns a 50-Reel job into 50 runs.

Do I need an Instagram account or cookies? No. The actor works on public Reels without any login.

Can I get subtitle files? Yes. Every row carries the full srt and vtt text plus srtFileUrl / vttFileUrl download links you can drop straight into CapCut, Premiere, DaVinci Resolve or Instagram's caption upload.

Why not just read Instagram's captions? Instagram does not expose a caption track to logged-out clients. This actor transcribes the actual audio, so you get text even for Reels the creator never captioned.

Does it depend on an external transcription service? No. Whisper runs inside the actor on Apify's own compute, so there is no third-party transcript API that can run out of credits, change pricing or throttle your batch mid-run.

What about regular posts or IGTV? This actor is Reels-only by design. For /p/ posts and /tv/ IGTV use Instagram Transcript Scraper, which covers all three formats.

Which languages are supported? 30+ via Whisper. Set language for best speed and accuracy, or use auto.

Why is tiny the default model? It is ~5× faster than larger models and reliable on Apify's CPU. Use base/small for higher accuracy on clear speech; they are slower and can time out on long videos.

Support

Additional Services

Need something beyond the standard output? I build and maintain custom scrapers and data pipelines. Happy to help with:

  • Transcripts from other platforms (TikTok, YouTube, Douyin) in the same output shape
  • Scheduled, incremental transcript feeds wired into your CMS, data warehouse, or vector store
  • Custom fields, summaries, translations, or export formats tailored to your workflow
  • Private or dedicated actors for high-volume or compliance-sensitive use

Reach out via the Issues tab or email and describe what you need.

Explore More Scrapers

More of my actors in the same space:

Browse the full catalog of job boards, business directories, review sites and social platforms on my profile: memo23 on Apify.

🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/instagram-reel-transcript-scraper).

Purpose: Transcribe public Instagram Reels to text with on-device Whisper AI, returning one row per Reel with metadata plus a full transcript, timestamped segments and SRT/VTT subtitle files.

Minimal input:

{
"startUrls": [
{ "url": "https://www.instagram.com/reel/Dabg9j1xNHM/" }
],
"maxItems": 5
}

Output: one row per Reel — id, shortcode, url, username, userId, fullName, caption, durationSec, thumbnailUrl, timestamp, uploadDate, likeCount, commentCount, viewCount, isVideo, transcript, language, segments [{ start, end, text }], srt, vtt, srtFileUrl, vttFileUrl, billedMinutes, transcriptSource, whisperModel, transcribedAt.

Behaviors an agent should know:

  • Only public /reel/ and /reels/ URLs work; posts (/p/) and IGTV (/tv/) are skipped with a pointer to memo23/instagram-transcript-scraper.
  • Always set maxItems; transcription is the slow, billed step, so start small.
  • Billing is per started minute of video (billedMinutes in each row): minimum 1, hard cap 5 per video. Skipped items are not charged.
  • Batch URLs freely; one run handles the whole list.
  • whisperModel is tiny (default, fastest) / base / small; base/small are more accurate but slower and can time out on long videos.
  • language accepts an ISO code (en, es, ar) or auto; setting it is faster and more accurate than auto-detect.
  • maxDurationSec (default 300) skips videos longer than the limit; includeSegments toggles the timestamped segments array.

⚠️ Disclaimer

This actor collects only publicly available data from Instagram and is intended for lawful uses such as research, accessibility and content analysis. You are responsible for how you use the output, including compliance with Instagram's Terms of Service, applicable copyright, and data-protection laws (e.g. GDPR/CCPA) where relevant. Do not use transcripts to infringe copyright or process personal data unlawfully.

SEO Keywords

Instagram reel transcript, reel to text, Instagram reel transcript extractor, reel transcript API, transcribe Instagram reels, Instagram reels to text converter, reel speech to text, Instagram reel captions extractor, reel subtitles generator, reel SRT file, reel VTT subtitles, Whisper Instagram transcription, Instagram reel audio to text, bulk reel transcription, Instagram reel hook analysis, extract text from Instagram reels, Instagram video transcription API, Instagram content analysis, reel transcription for LLMs, Instagram NLP dataset, influencer content research, no-code Instagram reel scraper.