# Instagram Transcript Scraper: Reels Transcript API (`meridianlabs/instagram-reels-transcript`) Actor

Instagram Reels to text: each reel's transcript in its original language with timestamps, SRT subtitles and the first 3 seconds of speech. Links, creators or a dataset. $3 per 1,000 reels; music-only reels free.

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

## Pricing

from $3.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

Turn Instagram Reels into text. Paste reel links, creator usernames or another scraper's dataset and get one row per reel: everything said in it, in the language it was spoken, with timed segments, the first 3 seconds of speech and the reel's caption, views, likes and posting date. Need subtitles? Switch on SRT or WebVTT. You pay **$3 per 1,000 reels** ($0.003 each, first 60 seconds included), and music-only or silent reels are free.

The input form is pre-filled with two reels, so the quickest way to try it is to click **Start** (about $0.006).

### What do you get for each reel?

| Field | What it means |
|---|---|
| `status` | `ok` = transcript delivered (charged). `no_speech` = music, sound effects or silence (free). Anything else = couldn't be read (free) |
| `transcript` | Everything said in the reel, in its original language. Never translated |
| `segments` | Each spoken line with `start` and `end` in seconds |
| `hook3s` | The words spoken in the first 3 seconds |
| `subtitles` | The transcript as SRT or WebVTT text, if you switch it on |
| `language`, `speech` | Spoken language (`en`, `es`, `pt`, `hi`...) and how clear the speech was (`clear`, `faint`, `none`) |
| `reelUrl`, `creator`, `caption`, `hashtags`, `postedAt` | The reel and its public details |
| `views`, `likes`, `comments`, `durationSeconds` | Public numbers when the reel was read |
| `audio` | Sound title and artist, and whether it is the creator's original audio |
| `charged`, `chargedUsd`, `errorCode`, `errorMessage` | Exactly what the row cost, and why a reel has no transcript |

### What can you use Instagram transcripts for?

- **Hook research and swipe files:** collect the first 3 seconds of hundreds of reels in a niche and see which openings get views.
- **Script and UGC research:** read how creators and brands structure a 30-second pitch before you write your own.
- **Competitor monitoring:** schedule it daily on a list of accounts and get the text of every new reel.
- **Repurposing:** turn your own reels into captions, blog posts, newsletters or subtitles.
- **AI pipelines and RAG:** clean text with timestamps, ready for search, summaries and chatbots.

### Why use this Instagram transcript scraper?

- **You pay for transcripts, not for tries.** No start fee and no charge per row. Music-only reels, faint speech, copyright-blocked, deleted or failed reels cost nothing.
- **Honest about music.** Speech models invent "Thank you." over songs. We detect that and return a free `no_speech` row instead of junk text. Quiet dialogue under music comes back as a free `faint` transcript.
- **The original language.** Each reel is transcribed in the language it is spoken in (English, Spanish, Portuguese, French, Hindi, Korean and 90+ more). You can force a language when auto-detection guesses wrong.
- **Hooks, subtitles and timestamps built in.** `hook3s`, timed segments and SRT/WebVTT at no extra cost.
- **No login, no cookies, no Instagram account.** It reads the public reel only.

### How much does it cost?

| Reel | Price |
|---|---|
| Up to 60 seconds | $0.003 |
| 90 seconds | $0.005 |
| 3 minutes | $0.007 |
| Music only, silent or faint speech | free |
| Deleted, private, copyright-blocked, too long or failed | free |

That is $3 per 1,000 reels for typical reels; longer videos add $0.002 per extra minute. Your spending limit is always respected: reels past it come back as free `skipped` rows. On the Apify free plan you get 100 reels a month with this Actor. To keep free rows fair for everyone, a run stops after 50 free rows or twice as many free rows as transcripts, whichever is more; a normal mix of reels never reaches it.

### How do I transcribe an Instagram Reel?

Paste the link under **Reel links** and click **Start**. Reel, post, tv and share links all work, one per line, up to 1,000 per run. Each reel takes a few seconds, and 6 run at a time on the default memory, so 100 reels take about 7 minutes.

#### How do I get a creator's new reels every day?

Add usernames or profile links under **Creators**. The Actor reads each creator's newest posts (about the latest 6) and transcribes the videos. Put it on an Apify schedule once a day to catch every new reel. For a creator's older reels, list them with an Instagram profile scraper first and use the dataset option below.

#### How do I transcribe reels found by another scraper?

Put that run's dataset ID under **Dataset ID**. The Actor reads the `url` or `shortCode` of each row, removes duplicates and transcribes each reel once.

#### How do I get SRT subtitles for an Instagram Reel?

Set **Subtitle file text** to SRT or WebVTT. Each row then has a `subtitles` field you can save as a `.srt` or `.vtt` file.

### Input example

```json
{
  "reelUrls": ["https://www.instagram.com/reel/DfIfj7vS3qt/"],
  "creators": ["hubermanlab"],
  "subtitleFormat": "srt"
}
```

### Output example

Shortened, with illustrative text:

```json
{
  "status": "ok",
  "reelUrl": "https://www.instagram.com/reel/EXAMPLE123/",
  "creator": "examplecreator",
  "postedAt": "2026-10-31T13:38:34+00:00",
  "durationSeconds": 41.5,
  "views": 54144,
  "likes": 3120,
  "language": "en",
  "speech": "clear",
  "hook3s": "Stop scrolling, here is",
  "transcript": "Stop scrolling, here is the one habit that fixed my mornings...",
  "segments": [
    {"start": 0.0, "end": 2.4, "text": "Stop scrolling,"},
    {"start": 2.4, "end": 6.1, "text": "here is the one habit that fixed my mornings"}
  ],
  "wordCount": 112,
  "charged": true,
  "chargedUsd": 0.003
}
```

### How do I use Instagram transcripts with an AI agent or LLM?

Add the Actor to any MCP client (Claude, Cursor, VS Code and others) with `https://mcp.apify.com?tools=meridianlabs/instagram-reels-transcript`, then ask in plain words, for example: *"Transcribe the newest reels from these three creators and list the hooks they open with."*

From code, call the run-sync endpoint and read the rows straight back:

```bash
curl -X POST "https://api.apify.com/v2/acts/meridianlabs~instagram-reels-transcript/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reelUrls": ["https://www.instagram.com/reel/DfIfj7vS3qt/"]}'
```

It also works from n8n, Make, Zapier, Google Sheets and Apify schedules.

### Error codes (all free)

| Code | Meaning |
|---|---|
| `NO_SPEECH` | Music, sound effects, silence, or only faint speech |
| `COPYRIGHT_BLOCKED` | Instagram keeps this reel's video in the app because of its music |
| `NOT_FOUND` | Deleted, private, or a wrong link |
| `NOT_A_VIDEO` | A photo or carousel post |
| `NO_VIDEO_LINK` | Instagram didn't provide the video file this time |
| `TOO_LONG` | Over 10 minutes |
| `BLOCKED` | Instagram didn't answer this time. We never work around a block; run it again later |
| `CREATOR_NOT_FOUND` | Unknown or private creator |
| `INVALID_INPUT` | Not an Instagram reel or post link |
| `SPENDING_LIMIT`, `RUN_TIME_LIMIT`, `FREE_PLAN_LIMIT`, `FREE_ROW_LIMIT` | Skipped because a limit was reached |

### FAQ

#### Which languages does it transcribe?

Any of the 90+ languages Whisper large-v3-turbo understands. The spoken language is detected per reel and the transcript stays in it. Set **Spoken language** if a reel mixes languages or detection guesses wrong.

#### Do I need an Instagram account or cookies?

No. It reads only what a logged-out visitor can see. Private accounts can't be transcribed.

#### Why do some reels come back as `unavailable`?

Instagram doesn't release some reels with licensed music outside its app. Those rows are free.

#### Can it translate transcripts?

No. You get the original words. Translate them afterwards with any tool or LLM if you need to.

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

The Actor reads public reels only, logged out, and keeps no video files. Transcripts are someone else's words: use them for research, analysis, accessibility or your own content, and respect creators' rights and Instagram's terms. You are responsible for how you use the data.

#### Does it collect personal data?

It returns the creator's username with each reel and nothing else about people: no followers, comments, bios or contact details. Emails and phone numbers spoken in a reel are masked by default. To ask for a removal, write to admin@meridianlabssoftware.com.

#### What happens if a run times out or restarts?

Reels already delivered are not fetched or charged again after a restart. When the time limit gets close, unstarted reels become free `skipped` rows and the run still succeeds.

### More from Meridian Labs

- **[AI Visibility Tracker](https://apify.com/meridianlabs/ai-visibility-tracker)**: whether ChatGPT, Perplexity, Gemini and Claude name your brand, with share of voice vs competitors. From $0.008 per answer.
- **[YouTube Transcript API & Scraper](https://apify.com/meridianlabs/youtube-transcripts)**: transcripts of YouTube videos and Shorts in their original language. $3 per 1,000 transcripts.
- **[Facebook Ads Library Scraper](https://apify.com/meridianlabs/facebook-ads-library-scraper)**: every ad a competitor runs on Facebook and Instagram. $0.10 per 1,000 ads.
- **[Keyword Search Volume & CPC API + Google Trends](https://apify.com/meridianlabs/keyword-search-volume)**: search volume, CPC and trends for keyword lists. From $5 per 1,000 keywords.
- **[Backlink Checker](https://apify.com/meridianlabs/backlink-checker)**: referring domains, backlinks and domain rank for up to 1,000 domains a run.
- **[Google Jobs Scraper: Salaries, Apply Links & API](https://apify.com/meridianlabs/google-jobs-scraper)**: every job Google Jobs shows for a search, up to 200, with full descriptions, every apply link and salary normalised to yearly and hourly. $1.50 per 1,000 jobs.

### Support

Found a reel that comes back wrong? Open an issue on the **Issues** tab with the link. We read every one.

If this saved you time, a rating helps others find it; if something's off, open an issue and we'll fix it fast.

# Actor input Schema

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

Instagram reel or video post links, one per line (reel, p, tv and share links all work). Duplicates are removed.

## `creators` (type: `array`):

Instagram usernames or profile links. Transcribes each creator's newest video posts (about the latest 6 posts on their public profile, so it suits a daily schedule). Public profiles only.

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

Transcribe the reels listed in another Actor's dataset, for example a run of an Instagram profile or hashtag scraper. Reads the url / shortCode fields. Each reel is charged once.

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

Two-letter code such as en, es, pt or hi. Leave empty to detect each reel's language (recommended). Transcripts are never translated.

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

Adds each spoken line with its start and end time in seconds.

## `subtitleFormat` (type: `string`):

Adds the transcript as SRT or WebVTT subtitle text to each row.

## `maskContactDetails` (type: `boolean`):

Replaces emails and phone numbers said in a reel with \[email removed] / \[phone removed].

## `maxReels` (type: `integer`):

Stops after this many reels. Your run's spending limit is respected too.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/DfIfj7vS3qt/",
    "https://www.instagram.com/reel/DfApXJOpopz/"
  ],
  "includeSegments": true,
  "subtitleFormat": "none",
  "maskContactDetails": true,
  "maxReels": 1000
}
```

# Actor output Schema

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

One row per reel: status, creator, length, language, first 3 seconds and the transcript (dataset view 'overview').

## `runStats` (type: `string`):

Counts, timing and charges for the run.

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

Every field of every row, including timed segments and subtitles.

# 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 = {
    "reelUrls": [
        "https://www.instagram.com/reel/DfIfj7vS3qt/",
        "https://www.instagram.com/reel/DfApXJOpopz/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("meridianlabs/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 = { "reelUrls": [
        "https://www.instagram.com/reel/DfIfj7vS3qt/",
        "https://www.instagram.com/reel/DfApXJOpopz/",
    ] }

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

```

## MCP server setup

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