Instagram Reel OCR & Hook Extractor
Pricing
from $42.00 / 1,000 reel analyzeds
Instagram Reel OCR & Hook Extractor
Extract timestamped on-screen text, opening hooks, transcript context, creator metadata, and provenance from public Instagram Reels or creator handles.
Pricing
from $42.00 / 1,000 reel analyzeds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Turn public Instagram Reels into timestamped on-screen text, opening hooks, speech transcript context, creator metadata, and source provenance.
This Actor is designed for creative strategists, paid-social teams, agencies, and researchers who need the words viewers see—not only the words they hear. Supply Reel URLs, creator handles, or both. Each successful result is a typed record ready for a spreadsheet, scheduled comparison, API pipeline, or LLM workflow.
What this Instagram Reel analyzer does
For every successfully processed public Reel, the Actor:
- opens the public Instagram Reel in an anonymous browser session;
- resolves and downloads the public video without an Instagram login;
- samples frames at your chosen interval;
- performs local Tesseract OCR on each frame;
- removes consecutive duplicate OCR observations;
- selects the first useful on-screen text in the hook window;
- optionally creates a timestamped speech transcript with faster-whisper;
- falls back to speech or caption context when early OCR is unavailable;
- returns creator, duration, shortcode, canonical URL, and processing provenance.
The default dataset contains one record per successfully analyzed Reel. Failed, private, deleted, photo-only, login-only, oversized, or over-duration inputs are not charged as Reel results.
Who is it for?
- Creative strategists building libraries of opening-hook patterns.
- Paid-social teams comparing the copy shown during the first seconds.
- Agencies reviewing public competitor or client creative with authorization.
- Creator teams exporting their own on-screen copy for reuse and QA.
- Researchers studying public short-form video language over time.
- Data teams feeding timestamped OCR into a warehouse or classification model.
- Automation builders scheduling repeatable Reel batches through Apify.
Why use OCR instead of transcript-only extraction
Speech transcription misses silent title cards, burned-in subtitles, stickers, calls to action, disclaimers, handles, and text shown over music.
This Actor keeps two signals separate:
ocrFramesandonScreenTextrepresent visible text sampled from the video;transcriptandtranscriptSegmentsrepresent recognized speech when enabled.
The hookSource field says whether the selected opening hook came from on-screen text, speech, or page caption context. That provenance helps downstream workflows avoid treating every hook as spoken dialogue.
Extracted Instagram Reel data
| Field | Meaning |
|---|---|
sourceUrl | Supplied Reel URL or creator profile that produced the result |
canonicalUrl | Normalized public Reel URL |
shortcode | Instagram Reel shortcode |
creatorUsername | Visible public creator username, when available |
creatorProfileUrl | Public creator profile URL |
caption | Public page description used as context |
durationSeconds | Rendered video duration |
hookText | Opening hook selected from OCR, speech, or caption |
hookSource | on-screen-text, transcript, or caption |
onScreenText | Timestamp-ordered OCR text joined for export |
ocrFrames | Deduplicated timestamp, text, and OCR confidence objects |
transcript | Speech transcript when enabled and speech is detected |
transcriptLanguage | Detected transcript language |
transcriptSegments | Timestamped speech segments |
frameIntervalSeconds | Sampling interval used by the run |
ocrLanguage | Tesseract language model used |
extractionMethod | Processing-route provenance |
processedAt | ISO 8601 completion time |
Getting started
- Open the Actor input page.
- Add one or more public Instagram Reel URLs under Instagram Reel URLs.
- Optionally add public handles under Creator handles.
- Set Maximum Reels to control total output.
- Choose an OCR language.
- Keep speech transcript enabled when spoken context matters.
- Run the Actor.
- Open the Reel OCR and hooks dataset view.
- Export JSON, CSV, Excel, XML, or connect the dataset API.
A reliable first test is the prefilled public BBC News Reel with maxItems: 1.
Input parameters
| Input | Type | Default | Notes |
|---|---|---|---|
startUrls | array | prefilled Reel | Public /reel/, /p/, or /tv/ video URLs |
creators | string array | [] | Handles such as bbcnews or public profile URLs |
maxItems | integer | 3 | Total successful records, from 1 to 20 |
maxReelsPerCreator | integer | 3 | Recent Reel links per creator, from 1 to 10 |
frameIntervalSeconds | number | 1.5 | Frame sampling interval from 0.5 to 5 seconds |
hookWindowSeconds | number | 4 | Opening window from 1 to 10 seconds |
ocrLanguage | enum | eng | English, Spanish, German, or French OCR |
includeTranscript | boolean | true | Runs local speech recognition when enabled |
maxVideoDurationSeconds | integer | 180 | Rejects videos above the configured 5–600 second limit |
proxyConfiguration | object | direct | Optional Apify Proxy configuration |
At least one Reel URL or creator handle is required.
Reel URL example
{"startUrls": [{ "url": "https://www.instagram.com/reel/DV29mBcMQwp/" }],"maxItems": 1,"frameIntervalSeconds": 3,"hookWindowSeconds": 6,"ocrLanguage": "eng","includeTranscript": true,"maxVideoDurationSeconds": 180,"proxyConfiguration": { "useApifyProxy": false }}
Creator-handle example
Instagram currently serves creator profile discovery less consistently than a direct Reel. A US residential proxy is useful for this route and is never enabled automatically.
{"creators": ["bbcnews"],"maxItems": 1,"maxReelsPerCreator": 1,"frameIntervalSeconds": 5,"includeTranscript": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Direct Reel URLs remain the lower-cost, more deterministic input route.
Output example
The following shortened example reflects the current output shape. OCR text varies with video design and selected frame interval.
{"sourceUrl": "https://www.instagram.com/reel/DV29mBcMQwp/","canonicalUrl": "https://www.instagram.com/reel/DV29mBcMQwp/","shortcode": "DV29mBcMQwp","creatorUsername": "bbcnews","durationSeconds": 68.2,"hookText": "Satellite images show destroyed Iranian aircraft","hookSource": "on-screen-text","onScreenText": "Satellite images show destroyed Iranian aircraft\nThis follows video released by the US","ocrFrames": [{"timestampSeconds": 0,"text": "Satellite images show destroyed Iranian aircraft","confidence": 78.4}],"transcriptLanguage": "en","frameIntervalSeconds": 3,"ocrLanguage": "eng","processedAt": "2026-01-15T12:00:00.000Z"}
caption, hookText, creator fields, and transcript fields can be null when Instagram or the video does not expose that signal.
How opening hooks are selected
The Actor examines OCR observations whose timestamps fall within hookWindowSeconds.
- The first useful early OCR observation becomes
hookText. - If early OCR is empty and transcription is enabled, early speech becomes the hook.
- If both are empty, public caption context is used when available.
hookSourcerecords the chosen route.
This is deterministic extraction, not a subjective performance score. It does not claim that a hook is effective or predict engagement.
OCR quality tips
- Use
frameIntervalSeconds: 0.5or1for very brief overlays. - Use
2to5seconds for lower-cost monitoring of longer, slower-changing videos. - Match
ocrLanguageto the dominant on-screen language. - Decorative fonts, motion blur, low contrast, tiny text, and heavy compression reduce confidence.
- OCR confidence is diagnostic, not a guarantee that every word is correct.
- Compare
ocrFramesrather than only the joinedonScreenTextwhen timing matters.
Transcript behavior
Speech transcription uses a local, compact faster-whisper model.
- No external speech-to-text API key is required.
- Transcript processing adds runtime.
- Music-only or silent videos can return
nulltranscript fields. - OCR output remains available even when no speech is detected.
- Timestamped transcript segments provide context; they are not separately charged.
Disable includeTranscript when visible copy is the only required signal.
How much does it cost to extract Instagram Reel hooks?
The Actor uses pay per event pricing:
- one
startevent per run: $0.005; - one
reelevent for each successfully analyzed result; - failed or rejected Reels do not emit the
reelevent.
Current per-Reel tiers are:
| Plan | Price per successful Reel |
|---|---|
| Free | $0.0805 |
| Bronze | $0.0700 |
| Silver | $0.0546 |
| Gold | $0.0420 |
| Platinum | $0.0280 |
| Diamond | $0.0196 |
At Bronze pricing, one successful Reel costs about $0.075 including the one-time start event. Five successful Reels in one run cost about $0.355. Ten cost about $0.705.
Proxy transfer is an Apify platform cost and can vary by proxy type. In creator mode, only the small profile-discovery JSON request uses the configured proxy; Reel rendering and media transfer stay direct to avoid duplicate residential video traffic.
Scheduling creative monitoring
Create a saved Task with a stable list of public Reel URLs, then schedule it daily or weekly.
A recurring workflow can:
- run the same input set;
- write a new default dataset snapshot;
- export
shortcode,hookText, andocrFrames; - compare the snapshot with the previous run;
- notify a team when visible copy changes.
The Actor itself does not store a cross-run history or send alerts. Use Apify schedules, webhooks, integrations, or your data warehouse for those steps.
Spreadsheet and data-pipeline workflows
Useful downstream patterns include:
- export
hookTextandcreatorUsernameto Google Sheets; - flatten
ocrFramesinto one timestamped row per observation; - group hook phrases by creator or campaign;
- compare visible copy with
transcriptto find text-only messages; - feed OCR text to a permitted topic or CTA classifier;
- retain
canonicalUrlandprocessedAtfor provenance.
Apify datasets can be downloaded as JSON, CSV, Excel, XML, RSS, or JSONL.
Run through the Apify API with cURL
Replace YOUR_APIFY_TOKEN with your token.
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~instagram-reel-ocr-hooks/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.instagram.com/reel/DV29mBcMQwp/"}],"maxItems": 1,"includeTranscript": true}'
To wait and retrieve dataset items:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~instagram-reel-ocr-hooks/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://www.instagram.com/reel/DV29mBcMQwp/"}],"maxItems":1}'
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/instagram-reel-ocr-hooks').call({startUrls: [{ url: 'https://www.instagram.com/reel/DV29mBcMQwp/' }],maxItems: 1,frameIntervalSeconds: 2,includeTranscript: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].hookText, items[0].ocrFrames);
Python API example
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/instagram-reel-ocr-hooks').call(run_input={'startUrls': [{'url': 'https://www.instagram.com/reel/DV29mBcMQwp/'}],'maxItems': 1,'frameIntervalSeconds': 2,'includeTranscript': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['hookText'])
Use with MCP and AI assistants
Add this Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/instagram-reel-ocr-hooks"
Claude Desktop
Add this server object to Claude Desktop's MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/instagram-reel-ocr-hooks"}}}
Cursor
Add the same apify server URL in Cursor Settings → MCP.
VS Code
Add the same HTTP MCP server URL to your VS Code MCP configuration, then select the Actor tool from the available Apify tools.
Example prompts:
- “Extract the opening on-screen hook and timestamped text from this public Reel.”
- “Compare the visible opening copy in these three authorized Instagram Reels.”
- “Analyze one recent public Reel from this creator and return OCR frames without speech transcription.”
Always review OCR before making high-impact decisions.
Proxy guidance
Direct public Reel URLs are the default and cheapest route.
Creator profile discovery is more frequently rate-limited or redirected to login. For that route:
- configure an Apify residential proxy explicitly; only the small creator-profile JSON request uses it, while Reel rendering and media stay direct;
- use the geography relevant to the public profile surface;
- keep
maxReelsPerCreatorbounded; - reuse one coherent run session;
- avoid treating a login/challenge page as an empty successful result.
The Actor never silently turns on residential traffic.
Limits and failure behavior
- Only public Instagram Reel/video content is supported.
- Private profiles and login-only content are not supported.
- Stories and expiring private media are not supported.
- Photo-only posts do not produce a Reel record.
- Maximum input is 20 successfully processed Reels per run.
- Maximum configured duration is 600 seconds.
- Video downloads above the safety limit fail.
- A failed input is not charged as a Reel.
- Successful results are preserved if another input later fails.
- The run fails visibly when any requested input fails, so partial gaps are not hidden.
- Instagram can change its public delivery surfaces without notice.
Responsible and legal use
Use this Actor only for public content you are permitted to process.
You are responsible for complying with applicable laws, Instagram terms, copyright, privacy obligations, contractual restrictions, and organizational policies. Do not use the Actor to bypass access controls, process private content, identify sensitive personal traits, harass creators, or republish copyrighted video without permission.
Store only the data you need, protect exported datasets, respect deletion requests where applicable, and keep human review in decisions that affect people.
Troubleshooting
Why did creator discovery return a login or challenge error?
Instagram often treats profile discovery differently from a direct Reel. Configure a US residential proxy, reduce the number of creators, and retry in a new run. If you already know the Reel URLs, provide them directly.
Why is the OCR text noisy?
Try a smaller frame interval and verify the OCR language. Low contrast, motion, stylized fonts, and complex backgrounds can still reduce accuracy. Use timestamps and confidence values during review.
Why is the transcript null?
The Reel may contain no speech, speech may be too quiet, or includeTranscript may be disabled. OCR output can still be useful for silent or music-only Reels.
Why did a long Reel fail?
Increase maxVideoDurationSeconds within the supported 600-second ceiling, or process a shorter authorized source. Longer videos use more compute and OCR frames.
FAQ
Does it require an Instagram account?
No. It processes anonymously reachable public content and does not accept Instagram credentials.
Can it analyze multiple Reels?
Yes. Supply several URLs or creator handles and set maxItems up to 20.
Does it predict whether a hook will perform well?
No. It extracts the hook signal and provenance. Performance scoring requires your campaign context and outcomes.
Does it download videos into the output dataset?
No. Temporary media is deleted after local processing. The default dataset contains text, timestamps, metadata, and provenance.
Are OCR and transcript separate charges?
No. They are included in the successful reel event. There is no separate OCR-frame or transcript-segment event.
Can I use Spanish, German, or French text?
Yes. Select the matching ocrLanguage. Speech language is detected automatically when transcript processing is enabled.
Related automation-lab Actors
- Instagram Reel & Video Transcript Scraper — transcript-first extraction for public Instagram videos.
- Instagram Post & Reel Details Scraper — public Reel and post metadata without OCR processing.
- Video to Text Transcriber — speech transcription for direct video files or accessible media URLs.
Choose this Actor when timestamped visible text and opening-hook provenance are the primary output.