# Instagram Reels Transcript Scraper - Profile & Reel to Text API (`tracefetch/instagram-reels-transcript`) Actor

Instagram Reels transcript scraper and extractor: Instagram reel to text with AI transcription, even without captions. Transcribe Instagram Reels from URLs or a creator's profile: IG reel transcripts and scripts with date, plays, likes, comments. Instagram transcript API, no login. $0.006 per Reel.

- **URL**: https://apify.com/tracefetch/instagram-reels-transcript.md
- **Developed by:** [서준 박](https://apify.com/tracefetch) (community)
- **Features:** Limited permissions
- **Stats:** 5 total users, 3 monthly users, 93.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.50 / 1,000 video transcribeds

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 Scraper - Profile & Reel to Text API

Instagram Reels transcript scraper and extractor: turn Instagram Reels into text. This Actor transcribes the spoken audio of public Instagram Reels with AI
speech-to-text, so it works even when a Reel has no captions or subtitles. Paste Reel URLs, or just a creator's
username to transcribe their newest Reels, and get clean transcripts as JSON, CSV or Excel, or pull them straight
into your app through the API. No Instagram login needed.

### What can this Instagram Reels transcript tool do?

- Transcribe Instagram Reels and video posts to text, including Reels without captions
- Transcribe a creator's newest Reels from just their username or profile URL, with the post date, plays, likes
  and comments of every Reel next to its transcript
- Return the full transcript, word count and audio duration for every Reel, plus its post date, likes and comments
  when Instagram reports them
- Optionally return timestamped segments, the detected spoken language and ready-to-use SRT and WebVTT subtitles
- Process many Reels in one run, in parallel, and skip duplicate URLs automatically
- Stop exactly at the spending limit you set for a run
- Charge nothing for Reels that cannot be fetched (private, removed, blocked) or that have no audio track

### Who uses Instagram Reel to text?

- Content and social media teams repurposing Reels into blog posts, threads and captions
- Marketers and researchers analysing what competitors and creators say in their Reels
- Developers and AI agents feeding Reel transcripts into summarisers, classifiers, search indexes or RAG pipelines
- Accessibility work that needs a text version of short videos

### How to transcribe Instagram Reels

1. Add one or more public Reel URLs, for example `https://www.instagram.com/reel/CDUMkliABpa/`.
   Links to `/reel/`, `/reels/` and video posts `/p/` are accepted; tracking parameters are ignored.
2. Optional: set the spoken language (for example `en`, `es`, `pt`, `ko`) to improve accuracy on very short or noisy clips.
3. Optional: turn on Include segment timestamps to get start and end times for each spoken segment.
4. Click Start. Each Reel appears in the dataset as soon as it is done.

### Transcribe all Reels of an Instagram profile

Put usernames or profile URLs in **Profiles** instead of (or next to) Reel URLs:

```json
{
  "profiles": ["natgeo", "https://www.instagram.com/nasa/"],
  "maxReelsPerProfile": 20,
  "onlyPostsNewerThan": "30 days"
}
```

The newest Reels of each profile are listed with Apify's Instagram Reel Scraper, then transcribed. Every row gets
`profile`, `postedAt`, `plays`, `likes`, `comments` and `hashtags`, so you can sort a creator's Reels by
performance and read what was said in each one. Real row from a test run:

```json
{
  "url": "https://www.instagram.com/reel/DehZj9wggt0/",
  "profile": "natgeo",
  "postedAt": "2026-10-15T19:00:02.000Z",
  "plays": 510025,
  "likes": 23846,
  "comments": 179,
  "status": "succeeded",
  "durationSec": 30.0,
  "text": "Hudson Bay, for a wolf, there are dangers everywhere. But their greatest challenge ...",
  "wordCount": 54,
  "charged": true
}
```

Profiles that are private, do not exist, or have no Reels in the date range are returned as a free `failed` row
with `errorCode` `PROFILE_NOT_LISTED`.

### Instagram Reel transcript generator and Instagram transcript API

Use it as an **Instagram Reel transcript generator** in Apify Console (paste Reel links or a username, click Start,
download TXT, CSV, JSON or Excel) or as an **Instagram transcript API** from your code or AI agent. It works in bulk and
returns IG Reel transcripts and scripts together with each Reel's date, plays, likes and comments.

### How to get the transcript of an Instagram Reel

1. In Instagram, open the Reel, tap **Share** and **Copy link**.
2. Paste the link into **Reel URLs**, or put the creator's username in **Profiles** to transcribe their newest Reels.
3. Click **Start**. Each transcript appears in the dataset as soon as it is done. No Instagram login is needed.

It works on Reels **without captions**, because the spoken audio itself is transcribed with AI speech-to-text.

### Input example

```json
{
  "urls": [
    "https://www.instagram.com/reel/CDUMkliABpa/",
    "https://www.instagram.com/reels/CDUMkliABpa/?igsh=abc"
  ],
  "language": "en",
  "includeTimestamps": false,
  "maxDurationMinutes": 10
}
```

The second URL is the same Reel, so it is processed and billed once.

### Output example

Real output from a test run:

```json
{
  "url": "https://www.instagram.com/reel/CDUMkliABpa/",
  "platform": "instagram",
  "videoId": "CDUMkliABpa",
  "status": "succeeded",
  "durationSec": 13.5,
  "text": "Like a woman, ooh. Like a woman, ooh.",
  "wordCount": 8,
  "model": "gpt-4o-mini-transcribe",
  "charged": true,
  "errorCode": null
}
```

| Field | Description |
|---|---|
| `status` | `succeeded`, `no_speech` (music only), `no_audio`, `failed` or `skipped` |
| `text` | Full transcript of the spoken audio |
| `wordCount`, `durationSec` | Transcript length and audio length in seconds |
| `language`, `segments`, `srt`, `vtt` | Present when timestamps are enabled |
| `author`, `caption` | Reel metadata when Instagram provides it |
| `postedAt`, `likes`, `comments`, `plays` | Post date and engagement when available (plays are reported in profile mode) |
| `profile`, `hashtags` | Profile mode only: where the Reel was listed and its hashtags |
| `errorCode`, `errorMessage` | Why a Reel was not transcribed |
| `charged` | Whether the item was billed |

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

Pay per event, no subscription:

| Event | Price |
|---|---|
| Reel transcribed (first minute of audio) | $0.006 |
| Each additional started minute | $0.006 |

1,000 Reels of up to one minute cost $6; longer Reels add $0.006 per extra started minute. Paid Apify plans pay
less (Bronze $0.0058, Silver $0.0056, Gold $0.0055).

Not charged: invalid URLs, private or removed Reels, Reels Instagram blocks, and Reels without an audio track.
A Reel that contains only music is transcribed and returned as `no_speech`; it is billed like any transcription,
because the audio was processed.

Set a maximum charge for the run and the Actor will never exceed it: once the budget is reached, the remaining
Reels are returned as `skipped` without being processed.

**Profile mode:** listing a profile's Reels runs Apify's Instagram Reel Scraper in your account, which Apify bills
separately at about $0.0026 per Reel listed (less on paid plans) plus $0.001 per listing run. A one-minute Reel from
a profile therefore costs about $0.0086 in total. For comparison, the Reel Scraper's own transcript add-on costs
$0.048 per started minute. The Actor never lists more Reels than your run budget can transcribe.

### Use it from the API, integrations and AI agents

Run it like any Apify Actor through the API, schedules, webhooks, Make, Zapier or n8n. Example with the Python client:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<username>/instagram-reels-transcript").call(
    run_input={"urls": ["https://www.instagram.com/reel/CDUMkliABpa/"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["status"], item["text"])
```

AI agents connected to the Apify MCP server can find and call this Actor directly.

### Limits

- Public Reels only. Private accounts and login-only content are not supported.
- Profile mode lists up to 200 of the newest Reels per profile and up to 50 profiles per run.
- Audio longer than *Maximum minutes per video* (default 10) is cut at that length.
- Instagram occasionally rate-limits requests. The Actor retries through the configured proxy before reporting a failure,
  and failed Reels are not billed.

### FAQ

#### Does it read on-screen text or captions?

No. It transcribes what is spoken in the audio, which is why it works
on Reels that have no captions.

#### What happens with background music?

Speech is transcribed. A Reel with music and no speech returns `no_speech`.

#### Which languages are supported?

The speech-to-text model handles most widely spoken languages. Setting the
language explicitly helps on short clips.

#### Can I use the transcripts with my own AI model?

Yes. The output is plain JSON designed to feed your own
summariser, classifier, search index or LLM.

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

The Actor only processes publicly available Reels and does not log in.
You are responsible for how you use the data; check Instagram's terms and the laws that apply to you.

# Changelog

This Actor's version history is a separate document: https://apify.com/tracefetch/instagram-reels-transcript/changelog.md

# Actor input Schema

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

Public Instagram Reel or video post URLs, one per line. Duplicates are processed once. You can leave this empty and use Profiles instead.

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

Instagram usernames or profile URLs, one per line, e.g. natgeo or https://www.instagram.com/natgeo/. The newest Reels of each profile are listed with Apify's Instagram Reel Scraper (billed by Apify at about $0.0026 per Reel listed) and then transcribed. Each output row includes the post date, plays, likes and comments.

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

How many of the newest Reels to transcribe from each profile.

## `onlyPostsNewerThan` (type: `string`):

Only Reels posted on or after this date, e.g. 2026-10-01, or a relative period such as 7 days or 2 months.

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

Two-letter ISO-639-1 code such as en, es, ko. Leave empty to detect automatically. Setting it improves accuracy for short or noisy clips.

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

Adds start/end times for each spoken segment, the detected language, and ready-to-use SRT and WebVTT subtitle files. Same price.

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

Longer audio is cut at this length. The first minute is included in the per-Reel price; each further started minute is billed as an extra minute.

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

How many videos are processed at the same time.

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

Used only when Instagram blocks a direct request. Audio is downloaded directly whenever possible.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/reel/CDUMkliABpa/"
  ],
  "maxReelsPerProfile": 20,
  "includeTimestamps": false,
  "maxDurationMinutes": 10,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All items of this run, including failed ones with an errorCode. Only items with charged=true were billed.

# 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/CDUMkliABpa/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tracefetch/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/CDUMkliABpa/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tracefetch/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/l7fY3UVfBOErcaPwG/builds/2stl4dVTVNNz3cefl/openapi.json
