# Instagram Reels Transcript Scraper: Reels & Accounts to Text (`fguiraud/instagram-reels-transcript-scraper`) Actor

Instagram transcript scraper: turn Instagram Reels, or the newest Reels of any creator by @handle, into text with views, likes and date, plus SRT subtitles. Open-source Whisper, 99 languages, no login or API key. $0.009 per reel, music-only reels free.

- **URL**: https://apify.com/fguiraud/instagram-reels-transcript-scraper.md
- **Developed by:** [Fernando Guiraud](https://apify.com/fguiraud) (community)
- **Categories:** Videos, AI, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 videos

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 Scraper do?

**Instagram Reels Transcript Scraper** turns **Instagram Reels and video posts into text**: the full **transcript** of what is said, the **author, date, likes and comments**, and optional **SRT/VTT subtitles** and **timestamped segments**, in **99 languages** (or translated to English). Paste Reel links, or just a **creator's handle** (`@zachking`) to get their **newest Reels**, and get one row per Reel.

It runs **open-source Whisper** on Apify, so there is **no Instagram login, no API key and no subscription**. You pay **$0.009 per Reel** (first minute included), and Reels with only music, private Reels and failed downloads are **never billed**.

It runs on the Apify platform, so you also get an API, scheduling, integrations (Google Sheets, Make, Zapier, n8n) and access for **AI agents through the [Apify MCP server](https://mcp.apify.com)**.

![Sample output: real rows from a run of this Actor](https://fernandoguiraud16-coder.github.io/data-tools/assets/outputs/output-instagram-reels-transcript-scraper.png?v=3)

> **Independent tool**, not affiliated with or endorsed by Instagram or Meta. Instagram is a trademark of Meta Platforms, Inc.; it is named only to describe the public data this Actor collects. It only accesses publicly available content.

### Why use it?

- 🎣 **Hooks and scripts**: read what the top Reels in your niche say in their first seconds, at scale.
- 🕵️ **Competitor and creator research**: a searchable log of what brands and creators say in their Reels.
- ✍️ **Repurposing**: turn your own Reels into captions, blog posts, newsletters and threads.
- 🎬 **Subtitles**: SRT/VTT files with readable lines (42 characters, 2 lines) for re-uploading.
- 🤖 **AI pipelines**: clean text ready for ChatGPT, Claude or a vector database.

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

1. Click **Try for free**.
2. Paste **Instagram Reel links** (`instagram.com/reel/...`) or video post links (`instagram.com/p/...`), one per line, **or** type creators in **Instagram accounts** (`@zachking` or `https://www.instagram.com/zachking/`).
3. Optionally choose the **spoken language** (or `auto`) and extra outputs (SRT, segments, Markdown).
4. Click **Start**, then download the results as JSON, CSV or Excel.

### Transcribe a creator's newest Reels (by account)

Put one or more creators in **Instagram accounts** (`profiles`): `@username` or the profile link. The Actor opens the account's public Reels tab, takes the **newest Reels** (up to 12 per account, what Instagram shows without login; choose how many in **Reels per account**) and transcribes them. Pinned Reels are ordered by their real date, so "newest" means newest.

**Watch creators on a schedule:** with **Only new reels** on (the default), Reels already transcribed in earlier runs are skipped and not billed. Schedule the Actor daily or weekly and you get only each creator's new Reels. No login, cookies or other scraper needed.

```json
{ "profiles": ["@zachking", "https://www.instagram.com/nasa/"], "maxVideosPerProfile": 5, "onlyNewVideos": true }
```

### Output

One record per Reel. Real result (October 2026):

```json
{
  "source": "https://www.instagram.com/reel/C0hQSaMpD97/",
  "status": "ok",
  "language": "en",
  "durationSeconds": 60.02,
  "billedMinutes": 1,
  "text": "Hey Space Nerds, I got a special delivery for you. So picture this. You're on a military range in the middle of the Utah desert. …",
  "video": {
    "platform": "instagram",
    "author": "NASA Goddard",
    "uploadDate": "2023-12-06",
    "likes": 8391,
    "comments": 17
  }
}
```

When Reels come from an account (`profiles`), `views` (plays) are included, taken from the profile page. For pasted links Instagram does not always make the view count public, so `views` can be empty; likes and comments are always included.

### Input

| Field | Description | Default |
|---|---|---|
| `sources` | Instagram Reel or video post links (TikTok, X, Facebook and MP4 links also work) | - |
| `profiles` | Instagram creators: `@username` or profile link; their newest Reels are transcribed | - |
| `maxVideosPerProfile` | Newest Reels per account (1 to 12) | 5 |
| `onlyNewVideos` | Skip Reels transcribed by earlier runs (for schedules) | `true` |
| `language` | Spoken language code, or `auto` | `auto` |
| `task` | `transcribe` or `translate` (to English) | `transcribe` |
| `model` | `base` (recommended), `small` (most accurate) or `tiny` | `base` |
| `outputs` | `text`, `markdown`, `segments`, `srt`, `vtt`, `chunks` | `text` |
| `vocabulary` | Names and jargon to spell correctly | - |

### How much does it cost?

| Event | Price |
|---|---|
| **Reel** (first minute included) | **$0.009** |
| Each extra minute (base or tiny model) | $0.006 |
| Each extra minute (small model) | $0.012 |
| Run start (per GB of memory, default 4 GB) | $0.0005 |
| AI insights per Reel (optional; Claude usage billed to your own key) | $0.01 |

**100 Reels cost about $0.90.** Most Reels are under a minute, so they cost exactly $0.009. Reels with only music, private Reels and failed downloads are free; each result explains why.

### Use it with AI agents (MCP)

Add `https://mcp.apify.com?tools=fguiraud/instagram-reels-transcript-scraper` to Claude, Cursor or any MCP client and ask: *"Transcribe the newest reels of @zachking and list the hooks he uses."*

**Agent-friendly input**: common field names such as `url`, `urls`, `startUrls`, `query` or `keywords` are accepted, and an empty input runs a small sample from the input form (with a note in the results) instead of failing.

### FAQ and limitations

- **How many Reels per account?** Up to the 12 newest, which is what Instagram shows on a public profile without a login. To follow a creator over time, schedule the Actor with **Only new reels**; for older Reels, paste their links in `sources`. Private accounts cannot be read.
- **Private Reels and Reels that need a login** cannot be read; they come back with an explanation and are not billed.
- **Music-only Reels** come back as "no speech" and are not billed.
- **Is it legal?** The Actor reads public Reels. Respect the rights of the creators when you reuse their content.
- Found a problem or need a feature? Open an issue on the **Issues** tab. Replies within 48 hours.

### Related tools

- [TikTok Transcript Scraper](https://apify.com/fguiraud/tiktok-transcript-scraper): TikTok videos and whole accounts to text.
- [Video to Text Transcriber](https://apify.com/fguiraud/video-to-text-transcriber): any video file or social link, priced per minute (better for long videos).
- [YouTube Transcript Scraper](https://apify.com/fguiraud/youtube-transcript-scraper): YouTube videos, channels and playlists.

# Changelog

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

# Actor input Schema

## `sources` (type: `array`):

Links to public Instagram Reels or video posts (instagram.com/reel/..., instagram.com/p/...). TikTok, X and Facebook video links and direct MP4 links work too. For a creator's newest reels use 'Instagram accounts'.

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

Instagram creators to transcribe, as '@username' or a profile link (https://www.instagram.com/username/). The newest reels of each account are transcribed, up to 12 per account (what Instagram shows without login; see 'Reels per account'). No login or cookies needed.

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

How many of the newest reels to transcribe from each account (1 to 12).

## `onlyNewVideos` (type: `boolean`):

Skip reels already transcribed by previous runs of this Actor in your account (remembered in a key-value store named 'transcriber-state-instagram'). Ideal for a daily or weekly schedule: you only pay for new reels.

## `base64Files` (type: `array`):

Short media files without a URL, e.g. from an AI agent: \[{"fileName": "memo.m4a", "content": "<base64>"}]. Keep the total input under ~9 MB; use URLs for longer recordings.

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

'base': good accuracy, fast (recommended). 'small': best accuracy, especially for accents, noisy audio and non-English speech; slower and billed at a higher per-minute price. 'tiny': fastest draft quality.

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

ISO code of the spoken language (en, es, de, fr, pt, it, ja, zh, ...) or 'auto' to detect it. Setting it avoids misdetection on short clips.

## `task` (type: `string`):

'transcribe': text in the spoken language. 'translate': translate the speech to English text.

## `vocabulary` (type: `array`):

Words the speech recognition should favour: people and company names, product names, technical terms (e.g. 'Kubernetes', 'Dr. Nguyen', 'Apify'). Improves spelling of rare words.

## `outputs` (type: `array`):

'text': full transcript split into paragraphs at pauses. 'segments': timestamped segments. 'srt' / 'vtt': ready-to-use subtitle files. 'chunks': ~chunkSize-character passages with start/end times and a token estimate, ready for vector databases. 'markdown': paragraphs prefixed with their start time, e.g. '**\[00:01:23]** ...'.

## `subtitleMaxChars` (type: `integer`):

Characters per subtitle line in SRT/VTT (42 is the broadcast and YouTube standard; 32-37 for vertical video). 0 keeps Whisper's long raw segments.

## `subtitleMaxLines` (type: `integer`):

Maximum lines shown at once in each subtitle (when line length is set).

## `subtitleMaxDuration` (type: `number`):

Longest time a single subtitle stays on screen (when line length is set).

## `aiInsights` (type: `boolean`):

Analyse each transcript with Claude: title, summary, key points, chapters with start times, action items and topics (in 'insights'). Requires your Anthropic API key; Claude usage is billed to your Anthropic account, plus one small 'AI insights' event per file.

## `anthropicApiKey` (type: `string`):

Your key from console.anthropic.com. Stored as a secret input; used only to call Claude for this run.

## `insightsModel` (type: `string`):

'claude-opus-5': best quality (default). 'claude-sonnet-5': cheaper, great for meetings and podcasts. 'claude-haiku-4-5': cheapest (transcripts up to ~2 hours).

## `insightsInstructions` (type: `string`):

Optional, e.g. 'Summarise in Spanish', 'Focus on decisions and owners', 'Chapters every ~10 minutes'.

## `saveFiles` (type: `boolean`):

Save the transcript (.txt) and subtitles (.srt / .vtt, if selected in outputs) as files in the run's key-value store; the result includes their download links.

## `wordTimestamps` (type: `boolean`):

Add start/end times for every word inside each segment (for karaoke-style captions or precise search). Slightly slower.

## `chunkSize` (type: `integer`):

Target size of 'RAG chunks'.

## `skipSilence` (type: `boolean`):

Detect speech first and skip silent parts. Faster and reduces hallucinated text in long pauses.

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

Only the first N minutes of each file are transcribed (and billed).

## `maxFileSizeMb` (type: `integer`):

Larger files are skipped (not billed).

## `failOnError` (type: `boolean`):

Mark the run as FAILED when a file cannot be transcribed. Useful for pipelines and monitoring.

## Actor input object example

```json
{
  "profiles": [
    "@zachking"
  ],
  "maxVideosPerProfile": 2,
  "onlyNewVideos": true,
  "model": "base",
  "language": "auto",
  "task": "transcribe",
  "outputs": [
    "text"
  ],
  "subtitleMaxChars": 42,
  "subtitleMaxLines": 2,
  "subtitleMaxDuration": 6,
  "aiInsights": false,
  "insightsModel": "claude-opus-5",
  "saveFiles": true,
  "wordTimestamps": false,
  "chunkSize": 1000,
  "skipSilence": true,
  "maxDurationMinutes": 240,
  "maxFileSizeMb": 1000,
  "failOnError": false
}
```

# Actor output Schema

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

No description

## `files` (type: `string`):

No description

# 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 = {
    "profiles": [
        "@zachking"
    ],
    "maxVideosPerProfile": 2,
    "outputs": [
        "text"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fguiraud/instagram-reels-transcript-scraper").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 = {
    "profiles": ["@zachking"],
    "maxVideosPerProfile": 2,
    "outputs": ["text"],
}

# Run the Actor and wait for it to finish
run = client.actor("fguiraud/instagram-reels-transcript-scraper").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 '{
  "profiles": [
    "@zachking"
  ],
  "maxVideosPerProfile": 2,
  "outputs": [
    "text"
  ]
}' |
apify call fguiraud/instagram-reels-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fguiraud/instagram-reels-transcript-scraper"
        }
    }
}
```

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/gPGdiucxwRKA3Bsu7/builds/ctDNmCkU2DzEBNTSQ/openapi.json
