# Instagram Reel Script Analyzer: Hook, On-Screen Text & CTA (`zaiq/instagram-reel-script-analyzer`) Actor

Any Instagram reel as its script: the words said (with timestamps), the text shown on screen, the hook and its type, the beats with their times, the call to action, format, topics, summary and why it works, plus plays against the creator's median. Reels by link or a creator's latest. No login.

- **URL**: https://apify.com/zaiq/instagram-reel-script-analyzer.md
- **Developed by:** [Zaiq](https://apify.com/zaiq) (community)
- **Categories:** Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $28.00 / 1,000 analyzed reels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Instagram Reel Script Analyzer: hooks, on-screen text, beats and CTAs from any reel (no login)

Turn any **Instagram reel into its script**: the **words said** (with timestamps), the **text shown on screen** (read from the video's frames, so **silent, music-only reels work too**), the **hook** and its **hook type**, the **beats** with the second each starts and ends, the **call to action**, the **format**, topics, a summary, takeaways and **why it works**. Each row also carries the reel's **plays, likes and comments**.

Give **reel links**, or **creators**: their latest reels are analysed and each is compared with the **creator's median plays**, so the **outliers** (2x the median or more) stand out. Built for **content strategists, social media managers, agencies, creators and AI agents** who need the script, not the caption. No login, no cookies, nothing connected to your Instagram.

### What you get

| Field | What it holds |
|---|---|
| Script | `transcript` (word for word), `segments` (each sentence with its start and end second), `hasSpeech`, `language` |
| On-screen text | `onScreenText`: each text card or overlay with its start and end second, exactly as shown |
| Hook | `hook` (spoken and on-screen opening, `type`, `endsAtSeconds`) and `hookType`: question, bold_claim, statistic, contrarian, story, how_to, listicle, curiosity_gap, pain_point, social_proof, demonstration, humor, direct_address, trend, visual, other |
| Structure | `structure`: beats (hook, context, problem, value, steps, proof, demo, story, twist, payoff, cta) with times and a one-line summary |
| Call to action | `cta` (verbatim text and type: follow, comment, save, share, link_in_bio, dm, buy, subscribe, visit, watch_more, none) and `ctaType` |
| Strategy | `format` (talking_head, voiceover_broll, tutorial, listicle, skit, vlog, slideshow, text_on_screen, interview, product_demo, reaction), `topics`, `summary`, `takeaways`, `entities`, `whyItWorks` |
| Performance | `plays`, `likes`, `comments`, and for creators `creatorFollowers`, `creatorMedianPlays`, `playsVsCreatorMedian`, `outlier` |
| The reel | `url`, `shortCode`, `ownerUsername`, `postedAt`, `durationSeconds`, `caption`, `hashtags`, `audio`, `videoUrl`, `thumbnailUrl` |

### What people use it for

- **Swipe files:** the hooks, beats and CTAs of a niche's best reels, side by side
- **Competitor content:** what a rival's top reels say and show, and which ones beat their own median
- **Hook research:** hook types that win in your niche, counted across hundreds of reels
- **Scripts and briefs:** a timed outline to brief a creator or an editor
- **Silent and text reels:** recipes, listicles and tips that live on screen, written out
- **Client reporting:** what worked, with plays against the creator's normal
- **AI agents:** reel analysis inside any workflow, paid per reel

### How to use it

1. Paste **reel links**, or add **creators** (a username or profile link) and pick how many of their latest reels.
2. Pick the language for the analysis (the spoken and on-screen words are always kept as they are).
3. Click **Start**, then download the table (JSON, CSV, Excel) or read it through the API.

### Input

| Field | Example | Notes |
|---|---|---|
| Reel links | `https://www.instagram.com/reel/...` | One per line; /p/ links work |
| Creators | `username` | Their latest reels, compared with their median plays |
| Latest reels per creator | `6` | Up to 50 |
| Write the analysis in | English | Or the reel's own language, or 17 others |
| Timed transcript | on | Each spoken sentence with its seconds; no extra charge |

### Output

Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):

```json
{
  "url": "https://www.instagram.com/reel/DecPSQfoaRe/",
  "ownerUsername": "example.creator",
  "postedAt": "2026-10-13T16:30:08+00:00",
  "durationSeconds": 30.03,
  "plays": 821881,
  "likes": 20711,
  "comments": 101,
  "hasSpeech": true,
  "language": "en",
  "transcript": "Our seas are under pressure. What happens if we don't have any corals anymore? We don't have the fish that rely on them.…",
  "segments": [
    {
      "start": 0.0,
      "end": 2.2,
      "text": "Our seas are under pressure."
    },
    {
      "start": 2.2,
      "end": 4.8,
      "text": "What happens if we don't have any corals anymore?"
    }
  ],
  "hook": {
    "spoken": "Our seas are under pressure.",
    "onScreen": "Our seas are under pressure.",
    "type": "bold_claim",
    "endsAtSeconds": 2.2
  },
  "hookType": "bold_claim",
  "onScreenText": [
    {
      "start": 0.3,
      "end": 2.0,
      "text": "Our seas are under pressure."
    },
    {
      "start": 2.2,
      "end": 5.0,
      "text": "What happens if we don't have any corals anymore?"
    },
    {
      "start": 5.0,
      "end": 7.5,
      "text": "We don't have the fish that rely on them."
    },
    {
      "start": 7.5,
      "end": 9.5,
      "text": "If we lose them, we're going to care a lot."
    },
    {
      "start": 27.5,
      "end": 30.0,
      "text": "… SPECIAL PREMIERE FRIDAY NOV 13 9/8c …"
    }
  ],
  "structure": [
    {
      "beat": "hook",
      "start": 0.0,
      "end": 2.2,
      "summary": "Establishes the crisis facing global oceans with crashing waves."
    },
    {
      "beat": "problem",
      "start": 2.2,
      "end": 9.5,
      "summary": "Explains the critical consequences of losing coral reefs and marine life."
    },
    {
      "beat": "value",
      "start": 9.5,
      "end": 27.0,
      "summary": "Highlights scientific expeditions and conservation efforts across five ocean basins."
    },
    {
      "beat": "cta",
      "start": 27.0,
      "end": 30.0,
      "summary": "Promotes the premiere date and streaming platforms for the documentary special."
    }
  ],
  "cta": {
    "text": "… SPECIAL PREMIERE FRIDAY NOV 13 9/8c",
    "type": "watch_more"
  },
  "ctaType": "watch_more",
  "format": "voiceover_broll",
  "topics": [
    "ocean conservation",
    "marine biology",
    "nature documentary",
    "coral reefs"
  ],
  "summary": "A documentary promo showcasing scientific teams exploring ocean basins to protect coral reefs and marine ecosystems. It urges viewers to watch the premiere of Expedition: Saving Our Seas.",
  "takeaways": [
    "Coral reef depletion directly threatens entire marine food webs.",
    "Scientists are partnering with coastal communities across five ocean basins.",
    "Expedition: Saving Our Seas premieres Friday November 13."
  ],
  "whyItWorks": "It contrasts alarming ecological problems like coral bleaching with breathtaking footage and hopeful action by passionate scientists. The cinematic pacing and urgency build up excitement for the television special premiere.",
  "framesRead": 15,
  "creatorFollowers": null,
  "playsVsCreatorMedian": null,
  "outlier": null,
  "analysisLanguage": "English"
}
```

A record named `SUMMARY` in the run's key-value store says what each link or creator returned, with notes (for example an image post or a private account, which are free) and how many reels were analysed. The example row is from a run on 17 October 2026 (creator name and the closing card shortened): a 30-second reel, 15 frames read, 14 text cards and 13 spoken sentences found; 1 reel was charged.

### Pricing

- **$0.035 per analysed reel** ($35 per 1,000), with its transcript, on-screen text, hook, beats, CTA, format, topics, summary and plays
- Reels that could not be analysed, image posts and private or missing accounts are free
- The AI model that watches the reel (Google's Gemini Flash) is billed by Apify at its exact cost: about $0.013 a reel on paid Apify plans (measured 17 October 2026 on reels of 30 to 73 seconds); Apify charges free-plan accounts 10 times that

What typical jobs cost at the list price:

| Job | Cost |
|---|---|
| One reel | $0.035 |
| A creator's latest 12 reels | $0.42 |
| 10 creators, 6 reels each | $2.10 |
| 1,000 reels | $35.00 |

On Apify's Scale and Business plans the per-event prices are lower (Store discounts). Set **Maximum cost per run** and the Actor stops cleanly when it is reached: you never pay more than that.

### Tips

- Analyse a creator's latest reels to see their outliers: the reels at 2x their median plays or more are the ones to study.
- Count `hookType` and `format` across a niche to see what wins there.
- Silent reels are read from their frames: `onScreenText` holds the whole tip, recipe or list.
- Schedule a weekly run on your competitors to catch their new hits.

### Use it through the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zaiq/instagram-reel-script-analyzer").call(run_input={"profiles": ["username"], "maxReelsPerAccount": 6})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

**JavaScript**

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zaiq/instagram-reel-script-analyzer').call({"profiles": ["username"], "maxReelsPerAccount": 6});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**HTTP (one call, results back)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/zaiq~instagram-reel-script-analyzer/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"profiles": ["username"], "maxReelsPerAccount": 6}'
```

### Integrations and schedules

- **Schedules:** run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- **Make, Zapier, n8n, Google Sheets, Slack, Airtable:** connect it through Apify's integrations, or send each finished run to a **webhook**.
- **Datasets:** results stay in the run's dataset; export them or read them by API whenever you need them.

### Use it with AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "analyse the latest 10 reels of these three creators and tell me which hooks beat their median". AI agents can also pay for runs directly through Apify's agentic payments.

### Limits

- Public reels only, signed out; private accounts return nothing (and cost nothing).
- The AI reads one frame every 2 seconds (at most 40 a reel) and the reel's sound: fast cuts between frames can be missed, and times are close but not frame-exact.
- Plays come from the creator's Reels tab: a link to an old reel may have no play count; the median comparison is made in creator runs.
- Public data only: you are responsible for how you use it under Instagram's terms and the privacy laws that apply to you.

### FAQ

**Do I need an Instagram account or cookies?**

No. Everything comes from what Instagram shows a signed-out visitor.

**Does it work on reels with no speech?**

Yes. The text on screen is read from the video's frames, so music-only recipes, listicles and tips get their full script, hook and beats.

**How is this different from a transcript?**

A transcript is only the words said. This also reads what is shown, finds the hook and its type, splits the reel into beats with times, and pulls out the call to action.

**Which languages?**

Any spoken or on-screen language is kept as it is; the analysis is written in English by default, or in the reel's own language, or 17 others.

**What is an outlier?**

A reel with at least twice the creator's median plays among the reels analysed in the same run.

**How long can a reel be?**

Any length Instagram allows; the frames are sampled across the whole reel.

### Related Actors from Zaiq

- [instagram-transcript-scraper](https://apify.com/zaiq/instagram-transcript-scraper): what is said in Instagram reels, cheaper, without the analysis
- [tiktok-transcript-scraper](https://apify.com/zaiq/tiktok-transcript-scraper): what is said in TikTok videos
- [douyin-transcripts-scraper](https://apify.com/zaiq/douyin-transcripts-scraper): Douyin video to text, with SRT and English
- [facebook-ads-library-scraper](https://apify.com/zaiq/facebook-ads-library-scraper): every ad in Meta's Ad Library for a keyword or advertiser

### Support

Questions, a site that changed, or a field you need? Open an issue on this Actor's **Issues** tab: we answer there, usually within a day.

***

Also found as: instagram reel script, reel script extractor, instagram reel analyzer, reel hook analysis, instagram on-screen text, instagram video transcript, reel swipe file, instagram competitor analysis, viral reels analysis, instagram reels scraper.

# Actor input Schema

## `reelUrls` (type: `array`):

Instagram reel links (instagram.com/reel/... or /p/...), one per line. $0.035 per reel analysed.

## `profiles` (type: `array`):

Public Instagram usernames, @handles or profile links, one per line: their latest reels are analysed, each compared with the creator's median plays.

## `maxReelsPerAccount` (type: `integer`):

How many of each creator's latest reels to analyse.

## `analysisLanguage` (type: `string`):

The language of the summary, takeaways, beats and why it works. Spoken and on-screen words are always kept as they are.

## `segments` (type: `boolean`):

Add each spoken sentence with its start and end second. No extra charge.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/DdG4RIxIPyf/"
  ],
  "maxReelsPerAccount": 6,
  "analysisLanguage": "English",
  "segments": true
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset: the results.

## `summary` (type: `string`):

What each input returned, and notes.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "reelUrls": [
        "https://www.instagram.com/reel/DdG4RIxIPyf/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaiq/instagram-reel-script-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "reelUrls": ["https://www.instagram.com/reel/DdG4RIxIPyf/"] }

# Run the Actor and wait for it to finish
run = client.actor("zaiq/instagram-reel-script-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "reelUrls": [
    "https://www.instagram.com/reel/DdG4RIxIPyf/"
  ]
}' |
apify call zaiq/instagram-reel-script-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zaiq/instagram-reel-script-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AART107cBaTT0kcob/builds/rOO8CPyzaUxNIivDx/openapi.json
