# Instagram Reels Transcript Generator (`anuarbakty/instagram-reels-transcript-generator`) Actor

Instagram transcript generator: turn reels into text with timestamps, SRT and VTT subtitles, the opening hook, language, plays and likes. From reel links, whole accounts, hashtags or search words. Pick an account's top reels before you pay. No login. Reels without speech are free.

- **URL**: https://apify.com/anuarbakty/instagram-reels-transcript-generator.md
- **Developed by:** [Anuar Bakty](https://apify.com/anuarbakty) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.20 / 1,000 reel transcripts

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 transcript generator: turn **Instagram reels into text** with timestamps, SRT and VTT subtitles, the opening hook, language, plays and likes. Paste reel links, name an account, or find reels by hashtag or search words. No login.

- **Study what works:** take an account's most played reels and read their scripts and hooks side by side.
- **Repurpose your content:** turn your reels into captions, blog posts and subtitles.
- **Feed an AI agent:** clean text and numbers for Claude, ChatGPT and Cursor through the Apify MCP server.
- **Watch competitors:** a scheduled run delivers only the reels that are new since the last one.

### What does Instagram Reels Transcript Generator do?

- **Speech to text for every reel.** Full transcript, lines with timestamps, word timestamps on request, and the language of the reel. Tested on English, Spanish, Russian, Hindi, Kazakh, Arabic and more.
- **Picks the reels before you pay.** Sort an account by plays, likes or comments, and filter by plays, likes, date and length. Reels you skip cost nothing.
- **Subtitles in the price.** SRT and VTT come in every row.
- **Reels without speech are free.** A speech detector checks each reel first, so music is not turned into invented text and you do not pay for it.
- **One row for every source.** Reel links, accounts, hashtags, search words, media files and another Actor's dataset can be mixed in one run.
- **Finds the outliers.** Plays against the account's median, and a mark on reels far above it.
- **Fast.** One reel in about 7 seconds, 1,000 reels in about 28 minutes at the default memory, measured on Apify.
- **No login, no cookies.** Nothing is connected to your Instagram account.

### How to transcribe Instagram reels to text

1. Add **Reel links**, **Instagram accounts**, **Hashtags** or **Search words**.
2. For an account, set **Reels per account** and an order, for example **Most plays**.
3. Click **Start**.
4. Download JSON, CSV, Excel or HTML, or read the results through the API.

### How much does it cost to transcribe Instagram reels?

You pay per delivered transcript. Platform usage is included. Paid Apify plans pay less.

| What you get | Free plan | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Reel transcript, first 3 minutes included | $10 per 1,000 | $9 | $8.10 | $7.20 |
| Each further started minute | $3 per 1,000 | $3 | $3 | $3 |
| On-screen text | $3.30 per 1,000 | $3 | $2.70 | $2.40 |
| Text of a photo post or carousel | $11 per 1,000 | $10 | $9 | $8 |
| Translation | $3.30 per 1,000 | $3 | $2.70 | $2.40 |
| AI summary, keywords, topics, sentiment | $5.50 per 1,000 | $5 | $4.50 | $4 |
| AI analysis: hook type, format, call to action, beats | $11 per 1,000 | $10 | $9 | $8 |

**Examples:** 100 one-minute reels on the Free plan = $1.00. With on-screen text = $1.33. Apify's free $5 a month buys about 500 reels. A start costs $0.00005 per GB of memory.

Reels without speech, private and deleted reels, filtered reels and failures are free. A cost limit on the run is respected to the reel. A Free-plan run stops cleanly at 50 reels and keeps what it has.

**Hashtags, search words and comment text** are read by Apify's own Actors, which start as a separate run in your account and charge that account: $2.60 per 1,000 found reels or comments on the Free plan, $2.30 on Bronze.

### Input

A simple run takes the 5 most played reels of an account:

```json
{ "usernames": ["clevelandclinic"], "maxReelsPerProfile": 5, "reelOrder": "mostPlays" }
```

| Field | What it does |
|---|---|
| `reelUrls`, `usernames`, `hashtags`, `searchTerms`, `videoUrls`, `datasetId` | Where the reels come from. Mix them freely. |
| `maxReelsPerProfile`, `maxReelsPerSearch`, `maxItems` | How many reels per account, per search and in the whole run. |
| `reelOrder`, `minPlays`, `minLikes`, `postedAfter`, `postedBefore`, `minDurationSeconds`, `maxDurationSeconds` | Which reels to take, decided before anything is transcribed. |
| `language`, `speechModel`, `customVocabulary` | Set the language, choose the model, spell names and terms correctly. |
| `includeOnScreenText`, `includePhotoPosts`, `translateTo`, `aiSummary`, `aiAnalysis`, `includeComments` | Paid extras. |
| `watchlistId`, `newReelsOnly`, `useCache`, `resumeFromDatasetId` | Repeat runs: only new reels, no second payment for a reel you already have, and continuing a stopped run. |

The Actor also understands fields made for other Instagram transcript Actors, such as `handles`, `bulkUrls`, `startUrls`, `maxReelsPerHandle` and `sortBy`, so a saved input keeps working.

### Output

One row per reel. Download it as JSON, CSV, Excel or HTML. This sample is made up:

```json
{
  "status": "transcribed",
  "reelUrl": "https://www.instagram.com/reel/SAMPLE12345/",
  "ownerUsername": "sample_clinic",
  "postedAt": "2026-10-20T09:00:00.000Z",
  "durationSeconds": 42.4,
  "language": "en",
  "transcript": "This is our compounding robot. It helps us prepare medication for our patients.",
  "wordCount": 13,
  "hook": "This is our compounding robot.",
  "segments": [{ "start": 0.4, "end": 2.6, "text": "This is our compounding robot." }],
  "srt": "1\n00:00:00,400 --> 00:00:02,600\nThis is our compounding robot.\n",
  "playCount": 136523,
  "viewCount": 67902,
  "likeCount": 3862,
  "commentCount": 72,
  "playsVsAccountMedian": 2.4,
  "isOutlier": false,
  "caption": "Meet the robot in our pharmacy.",
  "musicTitle": "Original audio",
  "charged": true
}
```

Rows also carry the VTT subtitles, author, followers, hashtags, video and audio links, and the fields of the extras you turn on. A row that was not charged says why in `errorCode` and `statusReason`.

### Run it on a schedule

Save your input as a task, add an Apify schedule, and turn on **Only new reels** with a watchlist name. Each run then delivers only reels you have not seen. Connect Google Sheets, Slack, Make, Zapier or n8n through Apify integrations to send them on.

### Use it from Claude, ChatGPT and other AI agents

Connect the Apify MCP server with this Actor: `https://mcp.apify.com/?tools=anuarbakty/instagram-reels-transcript-generator`

Then ask, for example, "Get the transcripts of the 5 most played reels of clevelandclinic". One reel comes back in seconds, so an agent can wait for it. The input it needs:

```json
{ "reelUrls": ["https://www.instagram.com/reel/DezSwsfJFUZ/"] }
```

https://www.youtube.com/watch?v=1i-dKo-0puk

For one reel at a time in your own app, call the Standby address: `GET https://anuarbakty--instagram-reels-transcript-generator.apify.actor/?url=<reel link>`, with your Apify token in the `Authorization` header.

### Other Actors by the same author

| Actor | What it does |
|---|---|
| [YouTube Transcript Scraper](https://apify.com/anuarbakty/youtube-transcript-scraper) | Transcripts of videos, Shorts, channels and playlists. |
| [Facebook Ads Library Scraper](https://apify.com/anuarbakty/facebook-ads-library-scraper) | Facebook and Instagram ads by keyword, brand or page. |
| [Threads Scraper](https://apify.com/anuarbakty/threads-scraper) | Posts, all replies and profiles without login. |
| [App Store & Google Play Scraper](https://apify.com/anuarbakty/app-store-play-scraper) | Reviews, app details, charts and keyword positions. |
| [2GIS Places Scraper](https://apify.com/anuarbakty/2gis-places-scraper) | Businesses with phones, emails and websites. |
| [2GIS Reviews Scraper](https://apify.com/anuarbakty/2gis-reviews-scraper) | Reviews with star, topic and date filters. |

### FAQ

#### How do I get a transcript of an Instagram reel?

Paste the reel link into **Reel links** and click **Start**. The text, timestamps and subtitles come back in about 7 seconds.

#### Is there an Instagram transcript API?

Instagram offers no public API for reel transcripts. This Actor gives you one: start a run through the Apify API or use the Standby address for one reel at a time, and get JSON back.

#### Can I transcribe Instagram reels without logging in?

Yes. The Actor needs no Instagram account, password or cookies.

#### Can I transcribe only the reels above a certain number of plays?

Yes. Set **Minimum plays**, or sort by **Most plays** and set how many reels to take. The reels you skip are not transcribed and not charged.

#### Can I get the most liked or most commented reels?

Yes. Choose **Most likes** or **Most comments** in the order field.

#### Does it read Instagram captions or the audio?

The audio. The speech model writes down what is said, and the caption comes in its own field. Turn on **Read text on screen** to read the words shown in the video.

#### Can it convert an Instagram carousel to text?

Yes. Turn on **Read text from photo posts** and paste the post link. You get the text of the slides in reading order.

#### What languages does it support?

Whisper's languages, close to 100. It finds the language by itself, and you can set one if a reel is detected wrongly. Reels that mix languages are handled piece by piece.

#### Why did a second run appear in my account?

Hashtags, search words and comment text are read by Apify's own Instagram Actors. They start as their own run in your account and charge it. Turn those fields off and no second run starts.

#### Can I get reels by hashtag or keyword?

Yes. Add them to **Hashtags** or **Search words**, and set how many reels to find for each. Filters and order work on these reels too.

#### Is it legal to transcribe Instagram reels?

The Actor reads only public reels. Personal data in the results, such as a username, is covered by rules like GDPR, so check that your use is lawful. If you are unsure, ask a lawyer.

#### I need another scraper or a change to this one

Open an issue in the **Issues** tab, or write on Telegram: [@anuar_bakty](https://t.me/anuar_bakty).

# Actor input Schema

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

Links to reels or posts, one per line. Video posts and photo posts work too. Example: https://www.instagram.com/reel/DSzRPJIjo8E/

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

Account names or profile links, one per line: clevelandclinic, @clevelandclinic or https://www.instagram.com/clevelandclinic/. The Actor finds the reels itself. Public accounts only.

## `hashtags` (type: `array`):

Find reels by hashtag, one per line, with or without #: cardiology, #hospital. Apify's Instagram Hashtag Scraper finds them under your account: $2.60 per 1,000 found reels on the Free plan, $2.30 on Bronze, added to this Actor's price.

## `searchTerms` (type: `array`):

Find reels by words or phrases, one per line: heart surgery, knee pain. Same Apify Actor and the same price as for hashtags.

## `maxReelsPerSearch` (type: `integer`):

How many reels to find for each hashtag or search. Each found reel costs the search price, even if your filters then skip it.

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

Take reels from a dataset, for example the result of an Instagram scraper. Rows need a reel link, a short code or an account name.

## `datasetItems` (type: `array`):

The same, with rows pasted as JSON.

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

Direct links to audio or video files, up to 500 MB. Links to Instagram's video files work while they are valid.

## `maxReelsPerProfile` (type: `integer`):

How many reels to transcribe from each account, after the filters and the sort order.

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

The run stops after this many paid rows. Free-plan runs stop at 50.

## `reelOrder` (type: `string`):

Newest takes the latest reels and is the fastest. The other orders read up to "Reels to look through" first, then take the best.

## `maxReelsToScan` (type: `integer`):

How deep to read an account when sorting or filtering. Reading is free. 200 reels take about 20 seconds.

## `postedAfter` (type: `string`):

A date (2026-10-01) or a span back from now (7 days).

## `postedBefore` (type: `string`):

A date (2026-10-31) or a span back from now.

## `minPlays` (type: `integer`):

Leave out reels with fewer plays.

## `minLikes` (type: `integer`):

Leave out reels with fewer likes.

## `minDurationSeconds` (type: `integer`):

Leave out shorter videos.

## `maxDurationSeconds` (type: `integer`):

Leave out longer videos. Empty means any length. Each minute after the third has a small extra price.

## `skipPinned` (type: `boolean`):

On: pinned reels are left out. Off: they count like any other reel.

## `onlyOwnReels` (type: `boolean`):

Instagram's list of an account also shows reels made together with others. On: only reels posted by the account itself. Off: the whole list.

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

A two-letter code such as en, ru, es, hi. Empty detects it for each reel. Set it when reels mix languages or auto-detect picks the wrong one.

## `speechModel` (type: `string`):

Turbo is fast and suits nearly all reels. Accurate is slower and can help on noisy audio. The price is the same.

## `customVocabulary` (type: `array`):

Names, brands and terms the model should spell correctly, for example drug names or a company name. Leave empty if you do not need it.

## `skipMusicOnly` (type: `boolean`):

On: a speech detector checks each reel first. Music and silence give a free row and no invented text. Off: all audio goes to the model, and song lyrics come back as text; you pay for those rows.

## `cleanTranscript` (type: `boolean`):

On: extra spaces and line breaks are removed. Off: the text exactly as the model wrote it.

## `removeFillers` (type: `boolean`):

On: um, uh and similar are removed. Off: kept, as they were said.

## `wordTimestamps` (type: `boolean`):

On: adds a words column with the start and end of each word. Off: timing by lines only.

## `includeSegments` (type: `boolean`):

On: adds a segments column. Off: leaves it empty for smaller rows.

## `includeSrt` (type: `boolean`):

On: adds a ready .srt text in the srt column at no extra price. Off: leaves it empty.

## `includeVtt` (type: `boolean`):

On: adds a ready WebVTT text in the vtt column at no extra price. Off: leaves it empty.

## `tags` (type: `array`):

Any labels, such as a client or a campaign. They are copied into every row, so you can tell runs apart.

## `includeFreeRows` (type: `boolean`):

On: a free row explains each reel without speech, failed or filtered out. Off: only paid rows.

## `includeRunSummaryRow` (type: `boolean`):

On: the last row sums up the run. Off: the summary is only in the key-value store as SUMMARY.

## `includeViewCount` (type: `boolean`):

Instagram keeps two counters. Plays (playCount) comes with every reel. Views (viewCount) needs one more page per reel. On: both. Off: plays only, and an account's reels run a little faster.

## `outlierMultiple` (type: `number`):

A reel is marked as an outlier when its plays are this many times the account's median.

## `includeOnScreenText` (type: `boolean`):

On: AI reads text shown in the video, for an extra price per reel where text is found. A silent reel with text on screen becomes a paid row. Off: speech only.

## `includePhotoPosts` (type: `boolean`):

On: AI reads the images of photo posts and carousels, up to ten per post, for an extra price per post. Off: such posts give a free row.

## `translateTo` (type: `string`):

A language name or code, such as Spanish or de. Adds the translated transcript for an extra price per reel. Empty means no translation.

## `includeComments` (type: `boolean`):

On: each transcribed reel also gets the text of its comments, read by Apify's Instagram Comments Scraper under your account: $2.60 per 1,000 comments on the Free plan, $2.30 on Bronze. Off: only the number of comments.

## `maxCommentsPerReel` (type: `integer`):

Most comments to read per reel when Comment text is on.

## `aiSummary` (type: `boolean`):

On: a short summary, keywords, topics and sentiment for an extra price per reel. Off: none.

## `aiAnalysis` (type: `boolean`):

On: hook type, format, call to action and the reel's beats with timing for an extra price per reel. Off: none.

## `watchlistId` (type: `string`):

A name for repeated runs on a schedule. With "Only new reels" on, reels delivered to this watchlist before are skipped. Kept in your own account.

## `newReelsOnly` (type: `boolean`):

On: reels already delivered to this watchlist are skipped free of charge. Off: every reel is read again.

## `useCache` (type: `boolean`):

On: a reel you transcribed before comes from a store in your account, free, with the same model and language. Off: it is transcribed and charged again. The store takes space in your account.

## `resumeFromDatasetId` (type: `string`):

The dataset of an interrupted run. Reels already delivered there are skipped.

## `maxRunSeconds` (type: `integer`):

The run ends cleanly after this time and keeps what it has. Empty means the run's timeout.

## `failIfNoTranscripts` (type: `boolean`):

On: a run with no paid rows ends as Failed, for automations. Off: it ends as Succeeded with free rows that explain why.

## `proxyConfiguration` (type: `object`):

Usually not needed: the Actor works without one and falls back to Apify proxies by itself. Set your own only if you have a reason. Apify proxy traffic is billed to your account.

## Actor input object example

```json
{
  "usernames": [
    "clevelandclinic"
  ],
  "maxReelsPerSearch": 20,
  "maxReelsPerProfile": 3,
  "maxItems": 1000,
  "reelOrder": "newest",
  "maxReelsToScan": 200,
  "skipPinned": false,
  "onlyOwnReels": false,
  "speechModel": "turbo",
  "skipMusicOnly": true,
  "cleanTranscript": true,
  "removeFillers": false,
  "wordTimestamps": false,
  "includeSegments": true,
  "includeSrt": true,
  "includeVtt": true,
  "includeFreeRows": true,
  "includeRunSummaryRow": false,
  "includeViewCount": true,
  "outlierMultiple": 3,
  "includeOnScreenText": false,
  "includePhotoPosts": false,
  "includeComments": false,
  "maxCommentsPerReel": 15,
  "aiSummary": false,
  "aiAnalysis": false,
  "newReelsOnly": false,
  "useCache": false,
  "failIfNoTranscripts": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "usernames": [
        "clevelandclinic"
    ],
    "maxReelsPerProfile": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("anuarbakty/instagram-reels-transcript-generator").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 = {
    "usernames": ["clevelandclinic"],
    "maxReelsPerProfile": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("anuarbakty/instagram-reels-transcript-generator").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 '{
  "usernames": [
    "clevelandclinic"
  ],
  "maxReelsPerProfile": 3
}' |
apify call anuarbakty/instagram-reels-transcript-generator --silent --output-dataset

```

## MCP server setup

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

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/BTRhndEnXzN2Uj7zH/builds/ydqqL1QeXwxZzmTig/openapi.json
