Instagram Reels Transcript Scraper - Reel & Video to Text
Pricing
from $15.30 / 1,000 reel transcribeds
Instagram Reels Transcript Scraper - Reel & Video to Text
Transcribe public Instagram reels and videos to text without login: full transcript with timestamps, hook, language, caption, plays and likes. Paste reel links or a username; onlyNew on a schedule transcribes only new reels. US$ 18 per 1,000. Music-only reels and errors are free.
Pricing
from $15.30 / 1,000 reel transcribeds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
Instagram Reels Transcript Scraper: Instagram reel and video to text, no login
Turn public Instagram reels and video posts into text: the full spoken transcript with timestamps, the
hook (the first sentence), the detected language, word count, caption, hashtags, likes, comments and plays,
one row per reel. Paste reel links, or give a username and get that creator's latest reels transcribed.
Turn on onlyNew and schedule it: every run transcribes only the reels posted since the last run, so you pay
once per reel. No login, no cookies, no Instagram account and no third-party API key.
Built for content creators and agencies building swipe files of hooks, marketers watching competitor reels, researchers and AI teams who need clean spoken text from short videos, and anyone repurposing reels into posts, newsletters or subtitles.
At a glance
| Event | Price, Free plan | Charged for |
|---|---|---|
| Reel transcribed | US$ 0.018 (US$ 18 per 1,000) | each unique reel with a transcript, up to 2 minutes of video |
| Extra minute | US$ 0.012 | each started minute after the first 2 (most reels never pay this) |
- 31 fields per reel, among them
transcript,hook,segmentswith start and end in seconds,languagewith its probability,wordCount,playCount,likeCount,commentCount,takenAtandonScreenText. All of them are in the field reference. - Free: reels without speech (music only), photo posts, too-long videos, errors, duplicates and, with
onlyNew, reels you already received. - No monthly fee, no start fee, no Apify compute bill on top. Whisper runs inside the Actor.
- Three accuracy levels at the same price: Whisper
tiny,base(default) orsmall. - Close to 100 languages, detected per reel or forced with a 2-letter code.
One real row
Reel DdWqyK3DlVv by @whoop, transcribed on Apify on 2026-09-30 (caption, transcript and videoUrl shortened
with "...", segments cut to 3, a few fields left out):
{"type": "reel","code": "DdWqyK3DlVv","url": "https://www.instagram.com/reel/DdWqyK3DlVv/","ownerUsername": "whoop","ownerIsVerified": true,"caption": "Take control of how you age. \n\nThis week on the WHOOP Podcast, ...","takenAt": "2026-09-16T18:00:04Z","likeCount": 727,"commentCount": 39,"playCount": 83647,"durationSeconds": 44.57,"videoUrl": "https://scontent-dfw6-1.cdninstagram.com/o1/v/t2/f2/m86/...mp4?...","transcript": "the idea that getting old has to suck is almost entirely untrue, especially if you're paying attention. For sure, people want to live a long time, but it's really about the quality, how long do you live and live well? ... Health doesn't exactly accrue with compound interest, but disease short does.","hook": "the idea that getting old has to suck is almost entirely untrue, especially if you're paying attention.","wordCount": 120,"language": "en","segments": [{ "start": 0, "end": 2.44, "text": "the idea that getting old has to suck" },{ "start": 2.44, "end": 5.24, "text": "is almost entirely untrue," },{ "start": 5.24, "end": 6.96, "text": "especially if you're paying attention." }],"onScreenText": "THE SCIENCE OF LONGEVITY HEALTHSPAN PODCAST ...","model": "whisper-base"}
What you can do with it
- Hook research and swipe files: read what top creators actually say in the first seconds, not just their captions, and compare hooks across a niche in minutes.
- Competitor and brand monitoring: follow competitor profiles daily with
onlyNewand search their new reels by what is said in them. - Repurpose your own reels: turn them into blog posts, newsletters, threads or subtitles (
segmentshas the timing for each phrase). - Datasets for AI: clean spoken text with timestamps and language for RAG, summarisation, topic tagging or semantic search.
- Engagement vs. script: put
playCount,likeCountandwordCountnext to the transcript to see which scripts perform.
Input examples
Two reels by link (an empty input {} transcribes one example reel, so you can see the output first):
{ "reelUrls": ["https://www.instagram.com/reel/DaSz9gXgFla/", "https://www.instagram.com/reel/DdWqyK3DlVv/"] }
The 10 latest reels of two creators, most accurate model:
{ "profileUrls": ["natgeo", "https://www.instagram.com/nasa/"], "maxReelsPerProfile": 10, "model": "small" }
Daily monitoring, only reels posted since the last run (save as a Task and schedule it):
{ "profileUrls": ["natgeo", "nasa"], "maxReelsPerProfile": 10, "onlyNew": true }
Spanish reels, no timestamps, skip anything over 3 minutes:
{ "reelUrls": ["https://www.instagram.com/reel/DaSz9gXgFla/"], "language": "es", "includeSegments": false, "maxDurationSeconds": 180 }
| Field | What it does |
|---|---|
reelUrls | Links to public reels or video posts (instagram.com/reel/CODE, /p/CODE) or just the code. Also accepts postUrls, directUrls, startUrls |
profileUrls | Usernames or profile links; the Actor transcribes their latest public reels. Also accepts profiles, usernames, handles |
maxReelsPerProfile | Default 10, newest first. Caps the cost of each profile |
onlyNew | Default false. On: only reels not delivered in an earlier run, per profile |
language | Empty = detect per reel. Or force a 2-letter code (en, es, fr, de, hi...) |
model | tiny (fastest), base (default), small (most accurate, best for non-English and noisy audio). Same price |
includeSegments | Default true: phrase-level start and end in seconds |
maxDurationSeconds | Default 600. Longer videos get a free VIDEO_TOO_LONG row |
Daily monitoring with onlyNew
The first run transcribes up to maxReelsPerProfile reels per profile and remembers them in a key-value store in
your own Apify account, named instagram-reels-transcript-state (one record per profile). Every later run reads
the profile's reels tab from the newest down, skips what it already delivered (pinned reels included) and stops at
the first reel it has seen before. You pay only for reels that are new to you.
- A profile with nothing new returns one free row:
"errorCode": "NO_NEW_REELS". - Reels that hit a temporary problem (
BLOCKED,DOWNLOAD_FAILED,NOT_REACHED) are not remembered, so the next run tries them again. - Reels that will never have a transcript (
NO_SPEECH,NOT_A_VIDEO,NO_AUDIO,POST_NOT_FOUND) are remembered, so they are not fetched again. onlyNewapplies to profiles. Reel links are always transcribed.- To start over, delete the
instagram-reels-transcript-statestore in Storage. Two Tasks that watch the same profile share its memory.
A real profile row from a test on 2026-10-14 (@nasa, newest reel; long fields cut):
{"code": "DeTUk4sDSp-","ownerUsername": "nasa","takenAt": "2026-10-10T15:15:02Z","likeCount": 667313,"commentCount": 6536,"playCount": 9582904,"durationSeconds": 43.8,"transcript": "Would you look at that man.","language": "en","hashtags": ["Artemis", "ArtemisII", "NASA"],"source": "profile:nasa"}
The same input a minute later gave a single free row:
{ "type": "error", "source": "profile:nasa", "errorCode": "NO_NEW_REELS", "error": "onlyNew: no new reels since the last run (not charged)" }
Field reference
| Field | What it is |
|---|---|
type | reel, or error for a free error row |
code, url | reel shortcode and its link |
ownerUsername, ownerFullName, ownerIsVerified | the creator |
caption, hashtags, accessibilityCaption | caption text, hashtags in it, Instagram's own image description |
takenAt | publish time (ISO 8601, UTC) |
likeCount, commentCount | likes and comments |
playCount | plays; filled when the reel comes from a profile (Instagram shows it on the reels tab) |
durationSeconds, extraMinutes | video length and the charged minutes beyond the first 2 |
videoUrl, thumbnailUrl | MP4 and cover links (the MP4 link expires after a few days) |
musicTitle, musicArtist | audio track, when Instagram returns it to logged-out visitors (often empty) |
transcript | the full spoken text |
hook | the first sentence of the transcript |
wordCount | words in the transcript |
language, languageProbability | detected (or forced) language and Whisper's confidence |
segments | phrases with start, end (seconds) and text, when includeSegments is on |
onScreenText | text Instagram detected in the video image, when present (can be partial) |
model | Whisper model used (whisper-tiny, whisper-base, whisper-small) |
source | what produced the row (the reel link you gave, or profile:username) |
scrapedAt, errorCode, error | time of the row and, on error rows, the reason |
Error codes (never charged)
| errorCode | Meaning |
|---|---|
NO_SPEECH | Music, sound effects or silence only; nothing to transcribe |
NOT_A_VIDEO | The link is a photo or a carousel |
NO_AUDIO | The reel has no audio track |
VIDEO_TOO_LONG | Longer than maxDurationSeconds |
NO_NEW_REELS | onlyNew is on and the profile posted nothing since the last run |
POST_NOT_FOUND, PROFILE_NOT_FOUND | Deleted, private, or the link or username is wrong |
NO_RESULTS | The profile shows no reels to logged-out visitors (some accounts hide their grid) |
INVALID_URL, INVALID_INPUT | A value the Actor does not understand |
DOWNLOAD_FAILED, TRANSCRIPTION_FAILED, BLOCKED, NO_VIDEO_URL | Instagram or the audio did not cooperate after retries; run again |
NOT_REACHED, UNEXPECTED | The run timeout or spending limit arrived, or something unforeseen broke; only that reel is lost |
Pricing examples
- 1,000 typical reels (under 2 minutes) cost US$ 18.
- A 5-minute video costs US$ 0.018 + 3 x US$ 0.012 = US$ 0.054.
- A daily Task on 20 profiles that post one reel a day costs about US$ 0.36 a day with
onlyNew, instead of paying again for the same reels. - Set
maxDurationSecondsto cap long videos andmaxReelsPerProfileto cap each profile. You can also set a maximum cost per run in Apify; the Actor stops there and keeps what it saved.
Integrations, scheduling and AI agents
- Schedule a Task daily or weekly in Apify schedules with
onlyNew: true; a quiet day costs nothing. - Export as JSON, CSV, Excel or XML, or read the dataset from the Apify API.
- Connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook through Apify integrations, for example "send every new competitor transcript to a sheet".
- AI agents: the Actor works as a tool through the Apify MCP server in Claude, ChatGPT, Cursor and other MCP clients, for example "transcribe the last 5 reels of this creator and list their hooks".
- From code: call
scrapewise/instagram-reels-transcriptwith the Apify JavaScript or Python client.
Limitations
- Public reels only. Private accounts, stories and reels that need login are out of reach.
- Machine transcription. Whisper is strong on clear speech; loud music, crowds and heavy slang lower accuracy.
Use
smallfor non-English speech. - No speaker names. The transcript is one text; it does not tell who is speaking.
- Plays only in profile mode. Instagram shows play counts on the profile's reels tab, not on the reel page.
- Runs with 4 GB of memory by default (one CPU core for the model). Less memory makes the run much slower, not cheaper.
FAQ
Do I need an Instagram account or cookies? No. The Actor reads public pages as a logged-out visitor. Your account is never involved.
Do I need an OpenAI or other speech API key? No. The open Whisper model (faster-whisper) runs inside the Actor, and its cost is in the per-reel price.
Can it transcribe private accounts or stories? No. Only public reels and public video posts.
Which languages work? Whisper detects close to 100 languages. For short or noisy clips in a language other than
English, set language and use the small model.
Am I charged for music-only reels? No. They come back as a free NO_SPEECH row.
Why is a reel missing from a profile? Some accounts hide their reels tab from logged-out visitors
(NO_RESULTS), and with onlyNew the Actor stops at the first reel it already delivered.
Changelog
- 18 Oct 2026: profiles are listed reliably again: when Instagram served its mobile profile page, a real profile
could come back as
PROFILE_NOT_FOUND; the first page of reels now comes from the same reels feed in that case. - 16 Oct 2026: field reference, more input examples and an integrations section in this page.
- 0.2 (14 Oct 2026):
onlyNewfor daily monitoring of profiles (memory per profile in your account, freeNO_NEW_REELSrow),profileUrlsas the profile field (the old names still work). - 0.1 (30 Sep 2026): first release. Reels by link or by profile without login, Whisper tiny, base or small, auto language, timestamps, hook, on-screen text hint, free rows for no speech and errors.
Independent tool, not affiliated with Instagram or Meta.