# Instagram Reels Transcript - Reel to Text, No Login (`tracefetch/instagram-reels-transcript`) Actor

Transcribe Instagram Reels to text with AI speech-to-text, even when a Reel has no captions. Paste public Reel URLs and get the full transcript, word count, duration and optional timestamps. No login. $0.01 per Reel; Reels that cannot be fetched are free.

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

## Pricing

from $10.00 / 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.

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 - Reel to Text, No Login

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, 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
- Return the full transcript, word count and audio duration for every Reel
- Optionally return timestamped segments and the detected spoken language
- 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.

### 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` | Present when timestamps are enabled |
| `author`, `caption` | Reel metadata when Instagram provides it |
| `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.01 |
| Each additional started minute | $0.01 |

1,000 Reels of up to one minute cost $10; longer Reels add $0.01 per extra started minute.

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.

### 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.
- 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.

## `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, plus the detected language. 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/"
  ],
  "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/ueenPeTBB7I6Fh1DP/openapi.json
