Instagram Reel Script Extractor — Voice, On-Screen Text & Hooks avatar

Instagram Reel Script Extractor — Voice, On-Screen Text & Hooks

Pricing

from $66.00 / 1,000 reels

Go to Apify Store
Instagram Reel Script Extractor — Voice, On-Screen Text & Hooks

Instagram Reel Script Extractor — Voice, On-Screen Text & Hooks

Extract Instagram reel transcripts, on-screen text, hooks, calls to action and structure — word for word, including silent music-only reels where audio-only tools return nothing. Paste reel links, or a handle for a creator's whole catalog. Export to CSV, JSON or Excel, run via API.

Pricing

from $66.00 / 1,000 reels

Rating

0.0

(0)

Developer

Andrey Afanasenko

Andrey Afanasenko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 hours ago

Last modified

Share

Apify Actor

Get what an Instagram reel actually contains — the spoken script, the text burned into the frame, the hook it opens with, and how it is built. For content strategists, agencies and creators who need the script, not the caption. Works on silent music-only reels, where audio-only transcript tools return an empty string.

🆓 Free to start: no card beyond your Apify account — leave the input empty, press Start, and the actor analyzes 3 real reels of a sample creator, capped so the trial stays cheap · Apify's Free plan includes $5 of monthly platform credit, around 66 reels here · every run also lists, ranked by views, the reels it did not analyze, so you always know what is still there.

🎯 What it does

Most Instagram tools read the caption. The caption is what the creator wrote afterwards. This actor reads the video: the audio track and the frames, in one pass.

You getWhy it matters
Spoken transcript, word for word, never translatedThe actual script, not a paraphrase
On-screen text, one entry per distinct cardRecipe quantities, prices, step numbers, code, URLs — usually the most valuable text in the reel, and invisible to audio-only tools
Hook, spoken and on-screen, plus the second it endsThe first three seconds decide the reel
Hook type as a closed valuequestion, bold_claim, listicle, contrarian, … — sortable, groupable, countable
Structure — beats with timestampshook → context → proof → cta, with the second each one starts
Call to action, verbatim and typedWhat the creator actually asks for
Format, topics, summary, takeaways, named entities, languageThe row a swipe file is built from
Views vs this creator's median, and an outlier flagMeasured, from real view counts — never an invented "virality score"

The one thing nothing else on the Store does: a reel with no speech at all still returns a full row. Music-only recipes, text-on-screen listicles, silent tutorials — the whole category where the information lives in the frame rather than the audio.

📦 Output sample

One real row, exactly as the actor produced it. A reel with 3.8 million views in which nobody says a single word — the whole tip is written on screen:

{
"url": "https://www.instagram.com/reel/DXuciRbjX2O/",
"shortcode": "DXuciRbjX2O",
"username": "buzzfeedtasty",
"postedAt": "2026-04-29T19:30:07.000Z",
"durationSeconds": 8.2,
"postType": "reel",
"caption": "Pre-shredded cheese is super convenient—but for the best results, it's actually worth giving it a quick rinse first! 🧀",
"viewCount": 3842084,
"likeCount": 15023,
"commentCount": 800,
"thumbnailUrl": "https://scontent-lax3-2.cdninstagram.com/v/t51.82787-15/…",
"analysisStatus": "analyzed",
"error": null,
"hookSpoken": null,
"hookOnScreen": "wash your pre-shredded cheese",
"hookType": "how_to",
"hookEndSeconds": 2,
"spokenTranscript": null,
"hasSpeech": false,
"wordsPerMinute": null,
"onScreenText": [
"wash your pre-shredded cheese",
"to remove anti-caking agents",
"washed",
"unwashed"
],
"onScreenTextCount": 4,
"onScreenTextIsCaptionsOnly": false,
"beats": [
{ "startSeconds": 0, "label": "hook", "text": "Washing pre-shredded cheese" },
{ "startSeconds": 2, "label": "context", "text": "Explaining the purpose of washing cheese to remove anti-caking agents" },
{ "startSeconds": 4, "label": "demo", "text": "Comparing the melt of washed vs. unwashed cheese in grilled sandwiches" },
{ "startSeconds": 6, "label": "outro", "text": "Reiterating the cheese washing process" }
],
"cta": null,
"ctaType": "none",
"contentFormat": "how_to_demo",
"topics": ["pre-shredded cheese", "anti-caking agents", "grilled cheese", "cheese melting", "kitchen hack", "cooking tips"],
"summary": "This video demonstrates a kitchen hack of washing pre-shredded cheese. It explains that washing removes anti-caking agents, which can interfere with the cheese's melting quality. A visual comparison shows that washed cheese melts and stretches significantly better in a grilled cheese sandwich than unwashed cheese.",
"takeaways": [
"Pre-shredded cheese contains anti-caking agents.",
"Washing pre-shredded cheese can remove these anti-caking agents.",
"Washing pre-shredded cheese improves its melting and stretching properties for dishes like grilled cheese."
],
"entities": [],
"language": "en",
"visualNotes": "The video shows a person washing pre-shredded cheese in a colander, then straining it to reveal milky water. It then presents a side-by-side comparison of two grilled cheese sandwiches, one made with washed cheese and one with unwashed cheese, demonstrating the superior melt and stretch of the washed cheese.",
"viewsVsCreatorMedian": 4.24,
"isOutlier": true,
"qualityFlag": "ok",
"qualityNote": null,
"processedAt": "2026-07-30T06:12:04.072Z"
}

Only the thumbnail signature is shortened above; every other value is verbatim.

An audio-only transcript tool returns {"transcript": ""} for this reel. The instruction, the reason behind it and the before-and-after labels only ever existed in the frame — and this one reel beat its creator's median by 4.2×.

⚡ Quick start

  1. Open the actor and leave the input empty.
  2. Press Start. The demo run analyzes 3 real reels of a sample creator — capped at 3 to keep it cheap, about $0.23, which your free monthly credit covers.
  3. Look at the 🔥 Hook Board link in the run's Output tab.

Then run it for real:

  • One reel or a handful → paste links into Reel links.
  • A whole creator → put their handle into Creator handles. Fill in one field or the other, never both.

⭐ Choose your mode

🎯 Mode 1: Break down specific reels

Paste reel links or shortcodes. One row per reel. Use this when a client sends you five links, when you want to check a single competitor post, or when you are calling the actor from a script.

🎯 Mode 2: Break down a creator's reels

Give a public handle. Before spending anything on analysis, the run reads that creator's recent catalog, works out their median view count, and only then analyzes the reels you asked for — sorted by top-performing unless you say otherwise. That is where viewsVsCreatorMedian and the outlier flag come from, and it is why the Hook Board can tell you which openings actually beat this creator's own average.

🧭 When to use it

  • Building a swipe file. Forty reels from three competitors, grouped by hook type, sorted by how far they beat the creator's median.
  • Reverse-engineering a format. The beat timeline shows how long the hook runs, where proof lands, and when the ask arrives.
  • Writing scripts. Export the transcripts of everything that outperformed and paste them into your writing tool: "Here are 40 hooks from @handle that beat their median. Write 10 more in the same voice."
  • Auditing your own account. Which of your openings work, in your own numbers, not a scoring model's.
  • Cataloguing recipe, checklist and price content, where the substance is burned into the frame and no audio tool can reach it.
  • Transcribing reels in bulk. Speech-to-text on the audio and text read straight off the frames, in the same pass — a list of links comes back as text, including the burned-in subtitles a creator added by hand.
  • Researching UGC and ad creative. What a brand's paid creators actually open with, how they phrase the ask, and which of those reels beat that creator's own median.
  • Vetting an influencer before you pay them. What they say on camera, how they close, and whether their best reel is an outlier or their normal.
  • Reporting to a client. One row per reel — transcript, hook, call to action and the multiple of the median in the same table, instead of a folder of screenshots.

🎯 Example tasks

Ready-to-run examples — each opens a pre-configured task you can run in one click (no setup):

🛠 Input

FieldModeTypeDefaultNotes
reelUrls1arrayReel links or bare shortcodes. Share links do not carry a post id — copy the /reel/ URL from a browser.
maxItemsMode11integer50Stops after this many reels.
usernames2arrayPublic handles, without the @.
sortBy2selectTop performingOr Newest.
postedWithinDays2integerLeave empty for the whole catalog.
minViews2integerLeave empty to include everything.
maxItemsMode22integer50Per handle. Reels beyond the limit are still listed, ranked by views.

Pick your mode first. Fields belonging to the other mode are ignored: if reelUrls has anything in it, the run is Mode 1 and every Mode 2 field is skipped.

💰 How much will analyzing Instagram reels cost?

$0.075 per reel on every plan, including the free one, dropping to $0.06 at the highest volume tiers. Any length up to 3 minutes — there is no per-minute surcharge, so a 3-minute tutorial costs the same as a 15-second hook.

PlanPer reel50 reels
Free$0.075
Bronze$0.075$3.75
Silver$0.070$3.50
Gold$0.066$3.30
Platinum$0.063$3.15
Diamond$0.060$3.00

Plans differ in how much you can run, not in what a reel costs. The demo run on empty input is capped at 3 reels — about $0.23 — so trying the actor stays cheap, and there is no limit on how often you run it.

You are only charged for reels that were actually analyzed. Private, deleted, photo, carousel, longer-than-3-minute, expired-link and failed reels are delivered as free rows with the reason in the error column. Results the built-in quality check flags as low-quality are delivered too — and also not charged.

🆓 Free vs paid plan

FreePaid
Price per reel$0.075$0.075 → $0.060
Reels per run5 (Mode 1: 3)your maxItems
Creators per run1unlimited
Runs per month15unlimited
Which reels Mode 2 picksthe top 5 by viewsyour sortBy
Every field, full transcript, full on-screen text
Hook Board and the pattern tables
Ranked list of what was not analyzed
Demo run on empty input3 reels (~$0.23), unlimited3 reels, unlimited

Free rows are not trimmed — they are the same complete rows a paid run produces, at the same price per reel. What the free plan limits is how much you can do at once: five reels from one creator per run, fifteen runs a month, and the allowance resets on the 1st. A free Mode 2 run deliberately analyzes the creator's five best reels rather than their five most recent, because five great hooks is the most useful five rows we can hand over.

🧪 Filter recipes

  • What works for this creator right now → handle + postedWithinDays: 90 + sortBy: Top performing + maxItemsMode2: 30.
  • Their greatest hits, ever → handle + minViews: 100000.
  • A fair read of their recent baseline → handle + sortBy: Newest + postedWithinDays: 30.
  • A competitor set → three handles + maxItemsMode2: 20. Every reel is scored against its own creator's median, so the comparison holds across accounts of different sizes.

🔁 Resume / checkpoint

Runs survive interruption. A migrating or aborted run records which reels it already finished, so resuming never re-analyzes a reel or charges for it twice. Everything finished before the interruption is already in the dataset — rows are pushed as each reel completes, not held to the end.

📡 Live status & storage records

RecordWhat is in it
🔥 Hook Board (status.html)Live progress while the run works, then: which hooks, formats and calls to action outperform for this creator; every analyzed reel as a card ranked by its multiple of the creator's median; and a CSS timeline of each reel's structure
RUN_SUMMARYStatus, counts, the creator's median views, duration, notes
NOT_ANALYZEDEvery reel in the catalog this run did not analyze, ranked by views, with URL, length, date and multiple of the median
USER_MESSAGEPlain-language account of what happened and what to do next — always written when a run returns no reels
API_USAGEUpstream request count and approximate cost, by endpoint
FREE_LIMITS_APPLIEDWhich free-plan caps applied, with the message shown

🤖 Programmatic / API use

curl -X POST "https://api.apify.com/v2/acts/afanasenko~instagram-reel-script-extractor/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"usernames":["mattmurphyai"],"maxItemsMode2":20,"sortBy":"Top performing"}'

Read the results:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items"
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/key-value-store/records/NOT_ANALYZED"
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/key-value-store/records/USER_MESSAGE"

Every classification field is a closed set of values, so downstream code can switch on them without string matching. Every run writes USER_MESSAGE, so a script never has to guess why a run returned nothing.

💡 Tips & Best Practices

  • Sort by viewsVsCreatorMedian, then group by hookType. That single move is what turns 40 rows into a content strategy.
  • onScreenTextIsCaptionsOnly tells you whether the burned-in text is worth reading. When it is true, the creator only subtitled themselves; when it is false, the frame carries something the audio does not.
  • Scan wide, analyze narrow. Reading a creator's catalog metadata is roughly 400× cheaper than analyzing a reel, so a large postedWithinDays window with a small maxItemsMode2 costs almost nothing extra and gives a far better median.
  • Watch qualityFlag. A suspect row means the built-in check caught the model repeating itself. Those rows are free, and qualityNote says exactly what was collapsed or dropped.
  • Reels only. Carousels and photos come back as not_video rows with full metadata, free. If a creator posts mostly carousels, you will see that immediately rather than getting an empty run.

❓ FAQ

Q: Does it work on reels with no talking? A: Yes — that is the main reason to use it. A silent, music-only reel returns hasSpeech: false, an empty spokenTranscript, and the complete on-screen text, hook, beats and call to action. Audio-only transcript tools return an empty string for these.

Q: How do I get the text that is burned into an Instagram video? A: Run this actor on the reel link. onScreenText gives one entry per distinct card or slide. Word-by-word caption animations are collapsed to their final form, so you get the sentence once rather than twelve growing fragments of it.

Q: Is there a free way to try it? A: Yes. Leave the input empty and press Start — the demo run analyzes 3 real reels of a sample creator, capped at 3 so it costs about $0.23, and there is no limit on how often you run it. Apify's Free plan includes $5 of monthly credit, so the trial costs you nothing out of pocket. When you switch to your own accounts, the free plan analyzes 5 reels per run, from one creator, up to 15 runs a calendar month, with every field included and at the same price per reel as a paid plan. The allowance resets on the 1st.

Q: Can I use the Instagram API instead? A: Instagram's own API returns your own media and its caption. It does not transcribe audio, it does not read text burned into video frames, and it gives you nothing about accounts you do not own. This actor works on any public account.

Q: What are the alternatives to an Instagram transcript tool? A: Plain transcript actors give you the spoken words and stop there. If your content is talking-head with no on-screen text, they are cheaper. If you care about hooks, structure, on-screen text, or anything silent, they return either nothing or only half the reel.

Q: Is this speech-to-text, or OCR, or both? A: Both, in one pass. The audio track becomes spokenTranscript. The frames are read separately for text drawn on them — prices, quantities, step numbers, lists, URLs, code — and that lands in onScreenText. A video-to-text tool that only listens returns an empty string for a silent reel; this one still returns the whole frame.

Q: Can I export the transcript as an SRT or VTT subtitle file? A: No. The transcript arrives as text in spokenTranscript, without word-level timings, so it is not a subtitle track you can burn in. What is timed is the shape of the reel: every beat in structure carries the second it starts, and hookEndSeconds marks where the opening ends — enough to line a script up against the video, not enough to build captions from.

Q: Does it read the caption under the post, or Instagram's auto-captions? A: The written caption comes back in caption, because it is useful context — but nothing in the analysis depends on it, and Instagram's own auto-generated closed captions are not used at all. spokenTranscript is read from the audio and onScreenText from the frames, so a reel whose caption says nothing still returns a full row.

Q: Does it translate? A: Never. The transcript and the on-screen text stay in the original language, mixed languages included, exactly as spoken and written. language reports what was detected.

Q: Are song lyrics transcribed? A: No. A backing music track is not speech, so a reel whose only audio is a song returns an empty spokenTranscript and hasSpeech: false.

Q: Why is there a 3-minute limit? A: 3 minutes is Instagram's own maximum length for a Reel. Longer posts are video or IGTV; they come back as free too_long rows with their metadata intact.

Q: What if a reel errors out mid-run? A: It becomes a free row with analysisStatus naming the cause and error explaining it in plain words. Everything else in the run continues. Expired video links are re-resolved and retried once automatically.

Q: Why do some rows have no viewsVsCreatorMedian? A: That column only exists in Mode 2, where the run has read the creator's catalog and can compute a real median. In Mode 1 there is nothing to compare against, and an invented baseline would be worse than an empty column.

Q: How do I find which hooks work for a competitor? A: Run Mode 2 on their handle with sortBy: Top performing, then open the 🔥 Hook Board in the run's Output tab. It groups every analyzed reel by hook type, format and call to action, and shows the average multiple of that creator's median each group achieved. On a recipe account we tested, how_to_demo reels averaged 5.8× the creator's median; on a software account, four of the top five reels opened with a warning rather than a question.

Q: Can I analyze a reel that is longer than 3 minutes? A: Not in this actor. Instagram caps Reels at 3 minutes, and posts above that are video or IGTV — they come back as free too_long rows carrying full metadata, so you can see them and decide separately.

Q: Does it download or store the videos? A: No. Each video is fetched, analyzed and discarded within the run. Nothing is kept, and you are not charged for bandwidth by the megabyte.

This actor is part of a family of focused tools — pick the one that matches your discovery model:

You start with…You want to find…Use this actor
A reel link or a creator handleWhat the reels actually say, show and ask forThis actor
A handle, keyword or locationProfiles with bio, contacts and engagementInstagram Profile Scraper
A handleWho follows that accountInstagram Followers Scraper
A handleSimilar accounts to itInstagram Related Profiles Scraper
A handle you want to watchWho joined and who left, over timeInstagram Follower Tracker & Monitor
An AI agent (Claude, Cursor, ChatGPT)The same Instagram profile data from inside your agent — MCP tools it picks by intentInstagram Profile MCP Server

Start from a profile scraper when you are looking for accounts; start here when you already know the accounts and want to know what their content does.

🛟 Support & feedback

  • Open an issue on the actor's Issues tab in Apify Console — fastest way to get a fix shipped.
  • Feature requests in the same tab; we read every one.
  • Ratings & reviews on the Apify Store page help other users find the actor.

Yes — the actor reads publicly available posts from public Instagram accounts and does not log in, bypass authentication, access private content, or interact with anything on your behalf. Videos are downloaded, analyzed and discarded; nothing is stored. Use it in compliance with Instagram's Terms of Service and applicable privacy laws (GDPR, CCPA).