# Instagram Reels Transcript - Speech to Text for Reels & TikTok (`aidnurs/instagram-reels-transcript`) Actor

Turn Instagram Reels, TikTok and any video or audio link into text with Whisper. Feed it the dataset of any Instagram or TikTok scraper or paste media URLs. Language auto-detect, optional timestamps. Music-only clips and failed links are free.

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

## Pricing

from $30.00 / 1,000 transcripts

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

### What does Instagram Reels Transcript do?

**Instagram Reels Transcript** turns Instagram Reels, TikTok videos, Facebook ad videos and any video or audio file into text. It runs OpenAI's Whisper speech-to-text model and returns a clean **transcript with punctuation, the detected language, duration and optional timestamps** for every video.

Use it as an **Instagram transcript API**: feed it the dataset of any Instagram or TikTok scraper, or paste direct media links, and get a table of transcripts you can search, analyze or feed into ChatGPT and Claude.

Typical uses: repurposing reels into posts and blogs, studying competitors' hooks and scripts, content research at scale, subtitles, and building AI datasets from short-form video.

### Why use this Instagram transcript tool?

- 🎧 **Downloads audio only when it can.** Instagram serves the soundtrack separately, so we fetch a ~300 KB audio file instead of a full video. Fast and cheap.
- 🌍 **99 languages, auto-detected per video.** English, Spanish, German, Russian, Portuguese and more, with punctuation. Force a language with one field if you need to.
- 🎵 **Music-only clips are free.** No speech, no charge. Expired links, photos and failed downloads are free too.
- 🔁 **No duplicates.** The same reel listed twice is transcribed and billed once.
- ⏱️ **Timestamps on demand.** Segments with start and end seconds for subtitles and clipping.
- 🔗 **Works with any scraper.** Instagram Scraper, Instagram Reel Scraper, TikTok scrapers, Facebook Ads Library scrapers or your own dataset: we pick up `audioUrl`, `videoUrl`, `mediaUrls` or the ad's `snapshot.videos` automatically and keep `shortCode`, `ownerUsername` and `caption`.
- 📢 **Facebook ad scripts.** The same creative running in many ads is transcribed and billed once; the copies get the text for free.
- 🛟 **No charge for garbage.** If the language is unclear or the audio can't be transcribed reliably, the row is marked `lowConfidence` and is free. Set *Language* and retry.

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

You pay per transcript: one price covers a video up to 3 minutes, and longer videos add a small fee per extra minute. Music-only videos, failed links and duplicates cost nothing. Set *Max media* and the run's maximum cost to cap spending.

### How to transcribe Instagram Reels

1. Run an Instagram scraper (for example Instagram Reel Scraper) for the profiles, hashtags or reels you need.
2. Copy the **dataset ID** of that run (Storage tab) and paste it into **Dataset ID**.
3. Optionally set the **Language** or turn on **Timestamps**.
4. Click **Start** and download the transcripts as JSON, CSV or Excel, or get them via the Apify API.

Tip: Instagram media links expire after 1-3 days, so transcribe a fresh scraper run. You can also chain both Actors with an integration so transcripts arrive automatically after every scrape.

Have direct links instead? Paste `.mp4`, `.m4a`, `.mp3`, `.wav` or `.ogg` URLs into **Direct video or audio URLs**.

### Input example

```json
{
  "datasetId": "qxDjaSDiNnwncv9c3",
  "maxItems": 100,
  "language": "",
  "includeTimestamps": false
}
```

### Output example

```json
{
  "mediaUrl": "https://scontent.cdninstagram.com/o1/v/t2/f2/m78/....mp4",
  "sourceUrl": "https://www.instagram.com/p/DeRiH7QITmd/",
  "shortCode": "DeRiH7QITmd",
  "ownerUsername": "example_creator",
  "caption": "Sharding vs replication #backend",
  "durationSec": 97.97,
  "transcript": "How do you scale a database that can't handle the load? Replicate it or shard it? ...",
  "hasSpeech": true,
  "language": "en",
  "languageProbability": 0.99,
  "wordCount": 276,
  "model": "small",
  "transcribedAt": "2026-10-12T18:40:12Z"
}
```

### Fields you get

| Field | Description |
|---|---|
| `transcript` | Full text with punctuation (empty when there is no speech) |
| `hasSpeech` | `false` for music-only or silent clips (not charged) |
| `language`, `languageProbability` | Detected language code and confidence |
| `durationSec`, `wordCount` | Audio length and number of words |
| `segments` | `[{start, end, text}]` when *Timestamps* is on |
| `sourceUrl`, `shortCode`, `ownerUsername`, `caption`, `timestamp` | Copied from the scraper item |
| `mediaUrl`, `error` | File that was transcribed and, if it failed, why |
| `lowConfidence`, `duplicateOf` | Unreliable audio (free) / same video already transcribed in this run (free) |
| `adArchiveId` | Facebook Ad Library ID for ad datasets |

### FAQ

**Can I paste a reel link like instagram.com/reel/...?**
Not directly. A reel page is not a media file. Scrape the reels first with any Instagram scraper and pass its dataset ID. This keeps the transcription step simple, cheap and independent of Instagram's page changes.

**Which model is used?**
Whisper `small` by default (good accuracy, punctuation). `base` is faster for rough drafts.

**Does it work for Facebook ads?**
Yes. Run a Facebook Ads Library scraper and pass its dataset ID: every ad with a video gets its script transcribed.

**Does it work for TikTok and YouTube Shorts?**
Yes, for any scraper that saves a downloadable video or audio link, or for direct file URLs.

**Is it legal?**
The Actor transcribes media files you provide. It does not log in anywhere. Make sure you have the right to process the content you transcribe.

**Something broke?**
Open an issue on the Issues tab. We usually reply within a day.

# Actor input Schema

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

Run any Instagram or TikTok scraper, copy its dataset ID and paste it here. Every item with a videoUrl or audioUrl is transcribed; photos and carousels are skipped. Instagram media links expire after 1-3 days, so use a fresh run.

## `mediaUrls` (type: `array`):

Direct links to .mp4, .m4a, .mp3, .wav, .ogg and similar files. A reel page link (instagram.com/reel/...) is not a media file: scrape it first and pass the dataset ID.

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

Maximum number of videos to transcribe. You only pay for transcripts that contain speech.

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

ISO code such as en, de, ru, es. Leave empty to auto-detect per video.

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

base is fastest, small is more accurate (recommended).

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

Add segments with start/end seconds, useful for subtitles and clipping.

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

Longer videos are skipped and not charged. One transcript covers up to 3 minutes; each started minute beyond that is billed as an extra minute.

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

Usually not needed: media CDNs serve files to any IP.

## Actor input object example

```json
{
  "mediaUrls": [
    "https://upload.wikimedia.org/wikipedia/commons/d/dd/Armstrong_Small_Step.ogg"
  ],
  "maxItems": 20,
  "model": "small",
  "includeTimestamps": false,
  "maxDurationMinutes": 15,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Transcripts (table view).

## `transcriptsFull` (type: `string`):

All fields including timestamps.

# 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 = {
    "mediaUrls": [
        "https://upload.wikimedia.org/wikipedia/commons/d/dd/Armstrong_Small_Step.ogg"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("aidnurs/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 = {
    "mediaUrls": ["https://upload.wikimedia.org/wikipedia/commons/d/dd/Armstrong_Small_Step.ogg"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("aidnurs/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 '{
  "mediaUrls": [
    "https://upload.wikimedia.org/wikipedia/commons/d/dd/Armstrong_Small_Step.ogg"
  ],
  "maxItems": 20
}' |
apify call aidnurs/instagram-reels-transcript --silent --output-dataset

```

## MCP server setup

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