Instagram Reel OCR & Hook Extractor avatar

Instagram Reel OCR & Hook Extractor

Pricing

from $42.00 / 1,000 reel analyzeds

Go to Apify Store
Instagram Reel OCR & Hook Extractor

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

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:

  1. opens the public Instagram Reel in an anonymous browser session;
  2. resolves and downloads the public video without an Instagram login;
  3. samples frames at your chosen interval;
  4. performs local Tesseract OCR on each frame;
  5. removes consecutive duplicate OCR observations;
  6. selects the first useful on-screen text in the hook window;
  7. optionally creates a timestamped speech transcript with faster-whisper;
  8. falls back to speech or caption context when early OCR is unavailable;
  9. 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:

  • ocrFrames and onScreenText represent visible text sampled from the video;
  • transcript and transcriptSegments represent 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

FieldMeaning
sourceUrlSupplied Reel URL or creator profile that produced the result
canonicalUrlNormalized public Reel URL
shortcodeInstagram Reel shortcode
creatorUsernameVisible public creator username, when available
creatorProfileUrlPublic creator profile URL
captionPublic page description used as context
durationSecondsRendered video duration
hookTextOpening hook selected from OCR, speech, or caption
hookSourceon-screen-text, transcript, or caption
onScreenTextTimestamp-ordered OCR text joined for export
ocrFramesDeduplicated timestamp, text, and OCR confidence objects
transcriptSpeech transcript when enabled and speech is detected
transcriptLanguageDetected transcript language
transcriptSegmentsTimestamped speech segments
frameIntervalSecondsSampling interval used by the run
ocrLanguageTesseract language model used
extractionMethodProcessing-route provenance
processedAtISO 8601 completion time

Getting started

  1. Open the Actor input page.
  2. Add one or more public Instagram Reel URLs under Instagram Reel URLs.
  3. Optionally add public handles under Creator handles.
  4. Set Maximum Reels to control total output.
  5. Choose an OCR language.
  6. Keep speech transcript enabled when spoken context matters.
  7. Run the Actor.
  8. Open the Reel OCR and hooks dataset view.
  9. 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

InputTypeDefaultNotes
startUrlsarrayprefilled ReelPublic /reel/, /p/, or /tv/ video URLs
creatorsstring array[]Handles such as bbcnews or public profile URLs
maxItemsinteger3Total successful records, from 1 to 20
maxReelsPerCreatorinteger3Recent Reel links per creator, from 1 to 10
frameIntervalSecondsnumber1.5Frame sampling interval from 0.5 to 5 seconds
hookWindowSecondsnumber4Opening window from 1 to 10 seconds
ocrLanguageenumengEnglish, Spanish, German, or French OCR
includeTranscriptbooleantrueRuns local speech recognition when enabled
maxVideoDurationSecondsinteger180Rejects videos above the configured 5–600 second limit
proxyConfigurationobjectdirectOptional 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.
  • hookSource records 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.5 or 1 for very brief overlays.
  • Use 2 to 5 seconds for lower-cost monitoring of longer, slower-changing videos.
  • Match ocrLanguage to 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 ocrFrames rather than only the joined onScreenText when 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 null transcript 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 start event per run: $0.005;
  • one reel event for each successfully analyzed result;
  • failed or rejected Reels do not emit the reel event.

Current per-Reel tiers are:

PlanPrice 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:

  1. run the same input set;
  2. write a new default dataset snapshot;
  3. export shortcode, hookText, and ocrFrames;
  4. compare the snapshot with the previous run;
  5. 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 hookText and creatorUsername to Google Sheets;
  • flatten ocrFrames into one timestamped row per observation;
  • group hook phrases by creator or campaign;
  • compare visible copy with transcript to find text-only messages;
  • feed OCR text to a permitted topic or CTA classifier;
  • retain canonicalUrl and processedAt for 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 ApifyClient
import os
client = 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 maxReelsPerCreator bounded;
  • 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.

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.

Choose this Actor when timestamped visible text and opening-hook provenance are the primary output.