~/social/instagram-transcript-scraper

Instagram Transcript Scraper — Reels to Text

Instagram transcript generator for Reels and videos: paste a link or a profile, get the text with timestamps and language, in bulk. No login, no API key.

media TypeScript Global
proooxy/instagram-transcript-scraper — spec
categorysocial / media
languageTypeScript
stackTypeScript
marketsGlobal
outputclean, RAG-ready JSON

key features

Turns each public Reel's speech into text — the whole transcript plus timestamped segments (start, end, text)

Detects the spoken language, or takes a language hint

The caption, parsed hashtags and mentions, likes, comments and duration on the same row — and play counts for Reels read from a profile's Reels tab

No Instagram login and no speech-to-text key of your own — transcription is included

Give it profiles to transcribe their Reels tab up to Max Reels per profile, optionally their timeline too, or single Reel links

Fetches only the audio, never the whole video

Reels with only music or no sound come back as rows with hasSpeech: false and are not charged; filler that speech engines invent over music is dropped

A carousel contributes the first of its videos that has sound

use cases

  • Content research — search what creators actually say, not only what they caption
  • Keyword and brand monitoring across every Reel in a niche
  • Text corpora from Reels for RAG, summarising and clustering
  • Subtitling and repurposing, with start and end times per passage
  • Creator analytics — does talking about a topic go with more plays?
  • Multilingual monitoring, with the language detected on every row

input parameters

ParameterTypeRequiredDescription
startUrlsarrayoptionalProfile or Reel addresses; give these or usernames
usernamesarrayoptionalProfile names, with or without the @; their Reels tab is transcribed
maxReelsPerProfileintegeroptionalVideos transcribed per profile — also the cost control (default 10)
includeTimelinebooleanoptionalAlso transcribe videos from the profile's posts grid (default off)
includeSegmentsbooleanoptionalKeep the per-segment timestamps (default on)
languagestringoptionalOptional language hint such as en, es or pt; empty means detect
maxConcurrencyintegeroptionalReels transcribed at once (default 3)
maxRequestsPerCrawlintegeroptionalStop after this many requests; empty means no limit
proxyobjectoptionalApify Proxy, residential by default, used for reading Instagram

Output Example

 1{
 2  "type": "transcript",
 3  "source": {
 4    "id": "instagram",
 5    "canonicalUrl": "https://www.instagram.com/reel/DcozHIETCd9/",
 6    "username": "nasaadmin"
 7  },
 8  "id": "3974651461224900477",
 9  "shortcode": "DcozHIETCd9",
10  "url": "https://www.instagram.com/reel/DcozHIETCd9/",
11  "owner": {
12    "id": "79712351002",
13    "username": "nasaadmin",
14    "fullName": "NASA Administrator Jared Isaacman",
15    "isVerified": true
16  },
17  "takenAt": "2026-08-29T20:31:28.000Z",
18  "caption": "An unforgettable day at @nasajohnson. …",
19  "hashtags": [],
20  "mentions": [
21    "nasajohnson",
22    "potus"
23  ],
24  "durationSeconds": 114.566,
25  "likeCount": 51113,
26  "commentCount": 409,
27  "audioUrl": "https://…mp4",
28  "audioBytes": 1019785,
29  "transcript": "… 250,000 miles from Earth. Please join me in congratulating Commander Reed Weissman, Pilot Victor Glover, Mission Specialist Christina Koch, and Mission Specialist Jeremy Hansen. …",
30  "segments": [
31    {
32      "start": 30.12,
33      "end": 32.7,
34      "text": "250,000 miles from Earth."
35    },
36    {
37      "start": 32.7,
38      "end": 44.64,
39      "text": "Please join me in congratulating Commander Reed Weissman, Pilot Victor Glover, Mission Specialist Christina Koch, and Mission Specialist"
40    },
41    {
42      "start": 44.64,
43      "end": 45.98,
44      "text": "Jeremy Hansen."
45    }
46  ],
47  "language": "en",
48  "wordCount": 204,
49  "hasSpeech": true,
50  "transcriptModel": "whisper-large-v3-turbo",
51  "scrapedAt": "2026-10-20T01:52:23.613Z"
52}

Pricing

Pay-per-event: billed once per stored transcript that has speech. Reels with only music or no sound, and transcriptions that failed, are stored and never charged.

Tips

Start with a few Reels. maxReelsPerProfile is also the cost control: each Reel is one download and one transcription. Timestamps are free. Turning includeSegments off makes a row smaller, not cheaper — the timings come back from the same call. Leave language empty unless every Reel is in one language; detection is per Reel. Need comments or topic tags too? The Instagram Scraper reads the same accounts’ posts, comments, co-authors and Instagram’s own topic tags.

faq

How do I get the transcript of an Instagram Reel?
Paste the Reel's link into startUrls and run the Actor. The text is in transcript and its timed passages in segments[]. Video posts (/p/) and IGTV links (/tv/) work the same way.
Can I transcribe Instagram Reels in bulk?
Yes. Give it many Reel links, or profiles: each profile's Reels tab is transcribed up to maxReelsPerProfile, plus its timeline if includeTimeline is on. Every Reel is one row.
Do I need an Instagram account or my own speech-to-text key?
Neither. Nothing is logged in, and the transcription engine is provided by the Actor.
What happens to a Reel that is only music, or has no sound?
It still gets a row, with hasSpeech: false and an empty transcript, and it is not charged. A Reel posted without sound is recognised before anything is downloaded. A Reel whose transcription failed says so in transcriptError and is not charged either.
How accurate is the transcript?
It is Whisper-class speech recognition on the original audio. Music, heavy accents, overlapping speakers and noisy scenes are where any engine struggles; segments[] lets you spot and trim those.
Can it translate?
No — it returns the text in the language spoken, and tells you which language that is.

related in ~/social

Run Instagram Transcript Scraper — Reels to Text, or get a custom build

Start extracting on Apify in minutes, or hire me to build a bespoke scraper and RAG pipeline for your exact source and schema.

run on Apify get custom data