# Instagram Reels Transcript (`the_coder_senior/instagram-reels-transcript`) Actor

Transcribe public Instagram Reels and video posts to text, SRT and VTT. Language detection, caption, metrics, optional AI summary. No login.

- **URL**: https://apify.com/the_coder_senior/instagram-reels-transcript.md
- **Developed by:** [Márcio Makoto Nakamura](https://apify.com/the_coder_senior) (community)
- **Categories:** Social media, Videos, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.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.

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

**Turn any public Instagram Reel into text.** Paste Reel, video post or profile links and get the full transcript, ready-to-use SRT and VTT subtitles, the detected language, the post caption, public metrics and the author. No Instagram login. No cookies. No account to risk.

This actor does one thing: Instagram video to text. It is not a multi-platform scraper, so every field is tuned for Instagram Reels.

### What you get for every video

| Field | Example |
| --- | --- |
| `transcript` | Full text of what is said |
| `segments`, `srt`, `vtt` | Timed lines and subtitle files, ready for CapCut, Premiere, YouTube or Instagram |
| `language` | `pt`, `en`, `es`... detected automatically |
| `caption`, `hashtags`, `mentions` | What the author wrote under the post |
| `metrics` | Public views, likes and comments |
| `durationSec`, `postedAt`, `type` | Length, publish date, Reel or video post |
| `author` | Username, name, followers, verified flag |
| `music` | Song and artist, or "Original audio" |
| `aiSummary` *(optional)* | Hook, 1-2 sentence summary, key points, topics, call to action |
| `status`, `errorMessage` | `success`, `no_speech`, `unavailable`, `video_unavailable`... so a bad link never breaks your batch |

### Who uses it

- **Content creators.** Study why a competitor's Reel works: read its hook word for word, then write yours. Turn your own Reels into blog posts, newsletters and captions.
- **Agencies and social teams.** Add subtitles to client videos in minutes, check brand mentions in what influencers actually say (not only in captions), and keep a searchable archive of campaign Reels.
- **Researchers and analysts.** Collect the spoken content of public accounts for trend, media or discourse analysis, with timestamps you can cite.
- **AI repurposing and agents.** Feed transcripts to an LLM to produce threads, scripts, summaries or training data. Works as a tool for AI agents (see below).

### How to use it

1. Click **Try for free** and paste links into **Reel, post or profile links**. One per line.
2. Leave the language on **Auto-detect**.
3. Click **Start**. Results appear in the **Transcripts** tab. Download as JSON, CSV or Excel.

Accepted inputs: `instagram.com/reel/...`, `instagram.com/p/...` (video posts), `instagram.com/tv/...`, `instagram.com/username` and `@username`. For a profile the actor transcribes the videos among its newest public posts (usually the latest 6 to 12 that Instagram shows publicly). Older videos need their own links.

#### Input example

```json
{
  "urls": [
    "https://www.instagram.com/reel/DfX5dqygwky/",
    "@natgeo"
  ],
  "maxVideosPerProfile": 3,
  "language": "auto",
  "includeTimestamps": true,
  "aiSummary": true
}
```

#### Output example

```json
{
  "url": "https://www.instagram.com/reel/DfX5dqygwky/",
  "status": "success",
  "language": "en",
  "transcript": "A spectacle of nature. The northern lights can take on a variety of colors.",
  "wordCount": 14,
  "segments": [{ "start": 0, "end": 4.2, "text": "A spectacle of nature." }],
  "srt": "1\n00:00:00,000 --> 00:00:04,200\nA spectacle of nature.\n",
  "vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:04.200\nA spectacle of nature.\n",
  "caption": "A spectacle of nature, the northern lights can take on a variety of colors.",
  "hashtags": ["SecretsOfThe..."],
  "author": { "username": "natgeo", "isVerified": true, "followers": 268203474 },
  "metrics": { "views": 91997, "likes": 25347, "comments": 77 },
  "durationSec": 14.57,
  "transcriptSource": "speech-to-text",
  "aiSummary": {
    "hook": "A spectacle of nature.",
    "summary": "The northern lights appear in many colors.",
    "keyPoints": ["Auroras vary in color"],
    "topics": ["northern lights", "nature"],
    "callToAction": null
  }
}
```

*(Illustrative. Real values come from the video.)*

### Pricing

You pay only for what you get, per event:

| Event | When it is charged | Price |
| --- | --- | --- |
| `video-transcribed` | Once per video with speech, plus once more for each extra 3 minutes of video (a 40-second Reel = 1 event, a 7-minute video = 3) | **$0.007** |
| `ai-summary` | Once per video when you turn on **AI summary and hook** | **$0.002** |

**Not charged:** private or removed posts, image posts, Reels whose video file Instagram does not share, videos with no speech (music only or silence), videos over your length limit, invalid links, and runs that fail.

Set **Max cost per run** in the run options and the actor stops cleanly when it is reached; everything transcribed so far is kept.

#### Free Apify plan

On the free plan you can transcribe **10 videos per day** (counted across all your runs, resetting at midnight UTC), each up to **3 minutes**. The run's status message always tells you how many are left, and the log explains how to lift the limit. Any paid Apify plan removes both limits.

### Use it from AI agents (MCP)

Every Apify actor is available to AI assistants through the Apify MCP server. Add `https://mcp.apify.com?actors=the_coder_senior/instagram-reels-transcript` to Claude, Cursor, VS Code or any MCP client, and an agent can ask: *"Transcribe this Reel and write three hooks in the same style."*

The input is small and every field has a plain-language description, so agents fill it correctly on the first try. Output is flat JSON with stable field names. Run it from code too:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('the_coder_senior/instagram-reels-transcript').call({
    urls: ['https://www.instagram.com/reel/DfX5dqygwky/'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].transcript);
```

### Good to know

- **Public content only.** The actor reads what Instagram shows to anyone without an account. Private accounts, stories and removed posts are reported as `unavailable`.
- **Speech, not captions.** Instagram does not publish spoken-word captions for Reels, so audio is converted to text with Whisper large-v3-turbo. Accuracy is highest on clear speech in major languages; music-heavy, noisy or heavily accented audio can contain errors. Check anything you will quote.
- **Songs are transcribed too.** If a Reel has sung vocals, the lyrics come back as text (Whisper may mishear them). Reels with only instrumental music or ambient sound return `no_speech` and are not charged.
- **Some Reels cannot be read.** Instagram does not share the video file of some public Reels (often ones using restricted music). Those return `video_unavailable` and are not charged.
- **Very short remarks may be missed.** A clip of 6+ seconds where only one or two words are detected is treated as `no_speech`.
- **Burned-in text is not read.** Words that only appear on screen as text overlays are not part of the transcript. The caption is returned separately.
- **Rate limits.** The actor spaces out its requests and retries politely. Keep **Parallel videos** low.
- **Your responsibility.** Transcripts are the work of their creators. Respect copyright, platform terms and privacy law (GDPR, LGPD, CCPA) when you store or republish them.
- This actor is not affiliated with or endorsed by Instagram or Meta.

### Support

Something not working on a link? Open an issue in the **Issues** tab with the link and the `status` you got. A fix usually ships within days.

# Actor input Schema

## `urls` (type: `array`):

Public Instagram links, one per line. Accepted: Reels (instagram.com/reel/...), video posts (instagram.com/p/...), IGTV (instagram.com/tv/...) and profiles (instagram.com/username or @username). For a profile, the actor transcribes the videos among its latest public posts. Private, removed and image-only posts are reported with a status and are not charged.

## `maxVideosPerProfile` (type: `integer`):

For profile links: how many of the newest videos to transcribe. Instagram's public profile preview shows only the latest posts (usually 6 to 12), so older videos need their own links.

## `maxVideos` (type: `integer`):

Stop after this many videos (0 = no limit). On the free Apify plan you can transcribe 10 videos per day (counted across runs, resets at midnight UTC); upgrade to any paid plan to remove that limit.

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

Leave on Auto-detect. Set it only when you know every video is in one language: it can improve accuracy for short clips or strong accents.

## `includeTimestamps` (type: `boolean`):

Add timed segments plus ready-to-use SRT and WebVTT subtitle files to each result.

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

Add a short AI summary, the opening hook, key points, topics and call to action for each transcribed video. Charged as a separate ai-summary event per video.

## `maxDurationMinutes` (type: `integer`):

Videos longer than this are skipped and not charged. Reels are at most 3 minutes; long video posts can be up to 60. The free plan allows videos up to 3 minutes.

## `maxConcurrency` (type: `integer`):

How many videos to process at the same time. Keep it low to stay polite with Instagram's rate limits.

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

Proxy used to load Instagram's public embed pages. The default Apify Proxy works for most runs.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/reel/DfX5dqygwky/"
  ],
  "maxVideosPerProfile": 6,
  "maxVideos": 0,
  "language": "auto",
  "includeTimestamps": true,
  "aiSummary": false,
  "maxDurationMinutes": 15,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `transcripts` (type: `string`):

All results: transcript, subtitles, caption, metrics and author for each video.

## `overview` (type: `string`):

Overview table in the Apify Console.

# 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 = {
    "urls": [
        "https://www.instagram.com/reel/DfX5dqygwky/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("the_coder_senior/instagram-reels-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 = {
    "urls": ["https://www.instagram.com/reel/DfX5dqygwky/"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("the_coder_senior/instagram-reels-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 '{
  "urls": [
    "https://www.instagram.com/reel/DfX5dqygwky/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call the_coder_senior/instagram-reels-transcript --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,the_coder_senior/instagram-reels-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/vLgYgQ8flNMsRlc2L/builds/umnT5qMdKfludrQZT/openapi.json
