# Instagram Reels Transcript API - Text, SRT, Hook & Translate (`admirala/instagram-reel-transcript`) Actor

Instagram reel transcript scraper: reels to text, SRT/VTT subtitles, timestamped segments and 3-second hook with Whisper AI (99 languages), optional English translation. Chain with any Instagram scraper. $0.01 per reel, music-only and failed reels free.

- **URL**: https://apify.com/admirala/instagram-reel-transcript.md
- **Developed by:** [Ja doei](https://apify.com/admirala) (community)
- **Categories:** Social media, AI, Videos
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Reels Transcript API - Text, SRT, Hook & Translate

> ✅ **Tested daily** with its default input (Apify's automated QA plus our own smoke test before every release).

**Instagram reel transcript** tool: paste public Reel links, or chain the output of any Instagram scraper, and get the spoken text, **timestamped segments, the 3-second hook, SRT and VTT subtitles** (Whisper AI, 99 languages) and optionally an **English translation**, plus caption, likes, comments and post date. **$0.01 per reel transcript. Music-only, silent, private and failed reels are free.**

### What you get

| Field | Description |
|---|---|
| `text` | Full transcript of the speech in the reel (or its English translation) |
| `hook3s`, `hookStartSeconds` | What is said in the first 3 seconds of speech, and when speech starts |
| `segments` | Timestamped segments: start, end, text |
| `status`, `charged`, `statusReason` | Per row: ok / skipped / error, whether it was charged and why not |
| `srt`, `vtt` | Timed subtitles, ready for editing tools and players |
| `language` | Detected (or given) spoken language |
| `hasAudio`, `hasSpeech` | Whether the reel has an audio track and whether speech was found (music-only reels return empty text) |
| `duration_s`, `likes`, `comments`, `postedAt` | Reel metadata where Instagram shows it |
| `caption`, `account`, `accountName` | Post caption and the account shown on the reel (turn off with `includeCaption: false`) |

### Input

| Field | Description |
|---|---|
| `reelUrls` | Public Reel, video post or IGTV links, e.g. \["https://www.instagram.com/reel/CgdZ_VoOArm/"]. |
| `videoUrls` | Direct media links (`videoUrl`/`audioUrl` from another Instagram scraper, or any .mp4/.m4a). |
| `datasetId` | Dataset of another scraper run: rows with url/postUrl/shortCode and videoUrl/audioUrl are transcribed, plays/likes/caption carried over. |
| `translateToEnglish` | true = English translation of the speech instead of the original language. Same price. |
| `maxItems` | Maximum reels per run (caps your cost). |
| `transcribe` | true = transcript + subtitles ($0.01/reel). false = metadata only ($0.002/reel). |
| `model` | `base` (fast) or `small` (better for accents and noisy audio). Same price. |
| `language` | Optional ISO 639-1 code (en, es, nl ...). Empty = auto-detect. |
| `includeCaption` | false = only transcript and numbers, no caption or account name (GDPR data minimisation). |

### Good to know

- Only the links you provide are processed. No profiles, followers, hashtags or search results are crawled.
- Works without login or cookies. Private, age-restricted or login-only reels return an error and are **not charged**.
- Reels without audio, music-only reels and reels longer than 5 minutes are **not charged** (`charged: false` with a reason).
- The last row is an uncharged `_summary` with counts of charged and free reels.

### Chain with an Instagram scraper

Run any Instagram reel or post scraper, then pass its dataset ID here as `datasetId`. Each row's media is transcribed directly, so you get plays and likes from the scraper and the transcript, hook and subtitles from this Actor.

### Pricing (pay per event)

- Per reel transcribed (text, segments, hook, SRT, VTT + metadata): $0.01
- Per reel, metadata only: $0.002

Failed, private, silent and music-only reels are free.

### Use with AI agents (MCP)

Add this Actor as a tool: `https://mcp.apify.com?tools=admirala/instagram-reel-transcript`, or connect `https://mcp.apify.com` and search for "instagram reel transcript".

```json
{"reelUrls": ["https://www.instagram.com/reel/CgdZ_VoOArm/"], "translateToEnglish": false, "model": "base"}
```

# Actor input Schema

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

Public Instagram Reel, video post or IGTV links (or direct CDN .mp4 links), e.g. \["https://www.instagram.com/reel/CgdZ_VoOArm/"].

## `videoUrls` (type: `array`):

Direct Instagram CDN media links (videoUrl or audioUrl from another Instagram scraper's output) or any .mp4/.m4a file URL.

## `datasetId` (type: `string`):

ID of a dataset from another scraper run (e.g. an Instagram reel or post scraper). Rows with url/postUrl/shortCode and videoUrl/audioUrl are transcribed; plays, likes and caption are carried over.

## `transcribe` (type: `boolean`):

true = Whisper transcript, SRT and VTT ($0.01 per reel). false = metadata only ($0.002 per reel).

## `model` (type: `string`):

base = fast; small = more accurate for accents and noisy audio (same price).

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

Optional ISO 639-1 code of the spoken language, e.g. 'en', 'es', 'nl'. Empty = auto-detect.

## `translateToEnglish` (type: `boolean`):

true = output the English translation of the speech (any of 99 languages -> English) instead of the original-language transcript. Same price.

## `includeCaption` (type: `boolean`):

true = also return the post caption and the account name shown on the reel. false = transcript and numbers only (GDPR data minimisation).

## `maxItems` (type: `integer`):

Maximum reels processed in this run (caps your cost).

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/CgdZ_VoOArm/"
  ],
  "transcribe": true,
  "model": "base",
  "translateToEnglish": false,
  "includeCaption": true,
  "maxItems": 1000
}
```

# Actor output Schema

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

No description

# 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/CgdZ_VoOArm/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("admirala/instagram-reel-transcript").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/CgdZ_VoOArm/"] }

# Run the Actor and wait for it to finish
run = client.actor("admirala/instagram-reel-transcript").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/CgdZ_VoOArm/"
  ]
}' |
apify call admirala/instagram-reel-transcript --silent --output-dataset

```

## MCP server setup

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

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/DM9KxlexEkFGScVQV/builds/9B0c1andJcRimcvix/openapi.json
