# Instagram Reel Transcript & Script Analyzer (`ninja.dev/instagram-reel-transcript-script`) Actor

Transcribe Instagram reels and break each one into hook, body and call to action. Give it reel links or a creator's username: it returns the transcript with timestamps, the first-3-seconds hook, hook type and speaking pace, and for profiles ranks the creator's hooks by views.

- **URL**: https://apify.com/ninja.dev/instagram-reel-transcript-script.md
- **Developed by:** [Matheus Coelho](https://apify.com/ninja.dev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 reel transcribeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Transcript & Script Analyzer

Turn any public Instagram reel into a script you can study and reuse. For each reel you get the full transcript with timestamps, plus a breakdown of how the script is built: the hook (first 3 seconds), the body, the call to action, the hook type and the speaking pace.

Give it a creator's username and it transcribes their latest reels and **ranks their hooks by views**, so you can see which openings actually work for that creator.

### What you can do with it

- **Repurpose content**: get the exact words of a reel to rewrite it for your own channel, a blog post or a newsletter.
- **Study competitors**: see which hooks bring a creator the most views, how fast they talk and how often they ask for the follow.
- **Build a hook swipe file**: collect hundreds of real hooks, already classified (question, list, contrarian, how-to, story, direct address, statement).
- **Feed an AI agent**: structured JSON with transcript, segments and script fields, ready for an LLM to summarize or rewrite.

### Input

| Field | What it does |
|---|---|
| `reelUrls` | Reel or video post links, e.g. `https://www.instagram.com/reel/CfY6jCIgH-P/` |
| `usernames` | Creator handles without @. Transcribes their latest reels and adds a profile summary. |
| `reelsPerProfile` | How many recent reels per creator (default 6, max 50). |
| `language` | Spoken language code (`en`, `pt`, `es`...). Empty = auto-detect. |
| `accuracy` | `fast` (default) or `accurate` (slower, better for accents and noisy audio). |
| `maxSeconds` | Only the first N seconds of each video are transcribed (default 180). |

### Output

One row per reel (`recordType: "reel"`):

```json
{
  "recordType": "reel",
  "url": "https://www.instagram.com/reel/CfY6jCIgH-P/",
  "ownerUsername": "garyvee",
  "views": 18672615,
  "likes": 767433,
  "durationSec": 67.3,
  "language": "en",
  "hook": "How can I keep my daughter nine years old away from these dangers from the internet?",
  "hookType": "question",
  "body": "Only two things. One, you actually don't let her spend time on it, which as you ...",
  "cta": "",
  "hasCta": false,
  "wordsPerMinute": 195.3,
  "scriptTemplate": "[HOOK: question, ~16 words] -> [BODY: 16 beats] -> [no CTA]",
  "transcript": "How can I keep my daughter nine years old away from these dangers from the inter...",
  "segments": [
    {
      "start": 0.0,
      "end": 4.8,
      "text": "How can I keep my daughter nine years old away from these dangers from the internet?"
    }
  ]
}
```

One summary per username (`recordType: "profileSummary"`): top 5 hooks by views, median views per hook type, median speaking pace and how often the creator uses a call to action.

Problems are returned as rows too (`recordType: "error"` with a `hint`), so an agent reading the dataset knows what went wrong without opening the log.

### Pricing

You pay per reel transcribed. Reels with no speech (music only, silent) are delivered free. Reel metadata is collected with Apify's official Instagram scrapers, which run on your account and are billed at their own small per-reel price.

### Limits

- Public reels only. Private accounts, stories and deleted reels return an error row.
- Transcription is speech-to-text: on-screen text and song lyrics are not extracted.
- Hook types and CTA detection are rule-based (English, Portuguese, Spanish) and work best on talking-head content.

### Related Actors

- [Telegram Channel Scraper](https://apify.com/ninja.dev/telegram-channel-scraper): public Telegram channel posts, with monitor mode.
- [App Store & Google Play Scraper](https://apify.com/ninja.dev/app-store-google-play): apps and reviews from both stores.
- [Google Ads Transparency Scraper](https://apify.com/ninja.dev/google-ads-transparency-scraper): what ads a company runs on Google.

# Actor input Schema

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

Public Instagram reel or video post links, e.g. https://www.instagram.com/reel/ABC123/

## `usernames` (type: `array`):

Public Instagram usernames (without @). The Actor transcribes the creator's latest reels and ranks their hooks by views. Example: garyvee

## `reelsPerProfile` (type: `integer`):

How many of the latest reels to transcribe per username.

## `language` (type: `string`):

Spoken language code (en, pt, es...). Leave empty to auto-detect.

## `accuracy` (type: `string`):

fast = base model (default). accurate = small model, slower, better for accents and noisy audio.

## `maxSeconds` (type: `integer`):

Only the first N seconds of each video are transcribed.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/CfY6jCIgH-P/"
  ],
  "usernames": [],
  "reelsPerProfile": 6,
  "language": "",
  "accuracy": "fast",
  "maxSeconds": 180
}
```

# Actor output Schema

## `scripts` (type: `string`):

One row per reel (recordType=reel), one per username (recordType=profileSummary) and one per failure (recordType=error).

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

Count of reels transcribed and the list of failures.

# 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/CfY6jCIgH-P/"
    ],
    "usernames": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninja.dev/instagram-reel-transcript-script").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/CfY6jCIgH-P/"],
    "usernames": [],
}

# Run the Actor and wait for it to finish
run = client.actor("ninja.dev/instagram-reel-transcript-script").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/CfY6jCIgH-P/"
  ],
  "usernames": []
}' |
apify call ninja.dev/instagram-reel-transcript-script --silent --output-dataset

```

## MCP server setup

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

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/qaRlaAFHBFI74Ajib/builds/fPYKF9KRen4Wxk3pK/openapi.json
