# Instagram Reel Transcript Scraper (`fetchfinch/instagram-reel-transcript-scraper`) Actor

Transcribe public Instagram Reels and video posts with accurate timestamps, WebVTT and SRT subtitles, word-level confidence, optional speaker diarization, content analysis, and post metadata.

- **URL**: https://apify.com/fetchfinch/instagram-reel-transcript-scraper.md
- **Developed by:** [Fetch Finch](https://apify.com/fetchfinch) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 2 total users, 1 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 transcript results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Reel Transcript Scraper

Turn public Instagram Reels and video posts into accurate, structured transcripts with timestamps, subtitles, word-level timing, confidence scores, and post metadata.

### What you get

- Clean transcript text with sentence-like timestamped segments
- Word-level start/end times, confidence, and optional speaker labels
- WebVTT and SRT subtitle files
- Transcript quality scoring with low-confidence word spans
- Optional paragraphs, entities, topics, sentiment, summaries, and intents
- Instagram caption, author, publication date, engagement metrics, and media dimensions
- One result record for every submitted URL, including structured error details when processing fails

### How to use

#### Individual Reels

Add one or more public Reel URLs to `reelUrls`. Public `/reel/`, `/reels/`, `/p/`, and `/tv/` links are supported, as well as bare Instagram shortcodes.

#### Creator batches

Add public usernames to `usernames` to discover and transcribe recent video posts. Use `resultsLimitPerProfile`, `onlyPostsNewerThan`, and `skipPinnedPosts` to control discovery.

#### Advanced transcription

The default settings are ready for most videos. Optional controls let you:

- Include or omit word-level data and quality scoring
- Detect and label multiple speakers
- Boost recognition of brand, product, or domain-specific terms with `keyterms`
- Request content analysis with topics, sentiment, summaries, intents, and custom categories
- Enable filler-word handling, numerals, measurements, profanity filtering, or redaction
- Choose a language or use automatic language detection
- Save the downloaded video to the run's key-value store when a reusable copy is needed

### Output

Each dataset item contains the original input, canonical post URL, transcript, segments, subtitles, word count, detected language, duration, quality information, and available Instagram metadata.

When enabled, `words` contains precise word timings and confidence values. Speaker numbers are included for diarized transcripts. Optional analysis is returned under `analysis`.

### Pricing

- `$0.0025` per successfully completed transcript
- `$0.008` per started audio minute
- Additional `$0.003` per started minute when keyterm boosting, entity detection, or redaction is requested
- Actor start: `$0.00005` per run

The Actor charges only for successfully completed transcript work. The final amount is shown in the run output under `billing`.

### Example tasks

- [Transcribe one Instagram Reel](https://apify.com/fetchfinch/instagram-reel-transcript-scraper/examples/transcribe-one-instagram-reel)
- [Analyze Instagram Reel content](https://apify.com/fetchfinch/instagram-reel-transcript-scraper/examples/analyze-instagram-reel-content)
- [Transcribe recent creator Reels](https://apify.com/fetchfinch/instagram-reel-transcript-scraper/examples/transcribe-recent-creator-reels)
- [Create a speaker-labeled transcript](https://apify.com/fetchfinch/instagram-reel-transcript-scraper/examples/speaker-labeled-reel-transcript)

### Input example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/Dcbru9ZIF-B/"
  ],
  "includeWords": true,
  "includeQuality": true,
  "includeSrt": true
}
```

Only publicly accessible Instagram posts can be processed.

# Actor input Schema

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

One or more public Instagram Reel URLs or bare shortcodes. /p/, /reel/, /reels/, and /tv/ URLs are accepted.

## `postUrls` (type: `array`):

Optional alias for reelUrls, useful when chaining the downloader Actor.

## `usernames` (type: `array`):

Optional public profiles. Recent video posts are discovered and transcribed using the profile options below.

## `resultsLimitPerProfile` (type: `integer`):

Maximum recent video posts to transcribe from each public profile.

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

Optional filter such as 7 days, 2 weeks, or 2026-08-01.

## `skipPinnedPosts` (type: `boolean`):

Avoid older pinned videos when discovering profile content.

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

Speech-to-text model used for the downloaded video.

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

Use auto for detection or a BCP-47 language tag such as en, es, or pt.

## `smartFormat` (type: `boolean`):

Add punctuation, capitalization, and readable formatting.

## `diarize` (type: `boolean`):

Include speaker numbers on words and utterance segments.

## `includeWords` (type: `boolean`):

Return word-level timing and confidence data in addition to segments.

## `includeQuality` (type: `boolean`):

Return confidence score, low-confidence spans, speech detection, and speech duration.

## `lowConfidenceThreshold` (type: `number`):

Words below this confidence value are grouped into low-confidence spans.

## `includeSrt` (type: `boolean`):

Return an SRT subtitle document in addition to WebVTT.

## `deepgramFeatures` (type: `array`):

Optional topics, sentiment, summary, and intent analysis. Some analysis features are English-focused.

## `customTopics` (type: `array`):

Optional topics to look for when topic analysis is enabled.

## `customIntents` (type: `array`):

Optional intents to look for when intent analysis is enabled.

## `fillerWords` (type: `boolean`):

Preserve filler words such as uh and um when recognized.

## `numerals` (type: `boolean`):

Convert spoken numbers to numerical form where supported.

## `measurements` (type: `boolean`):

Convert spoken measurements to abbreviated form where supported.

## `profanityFilter` (type: `boolean`):

Filter recognized profanity.

## `redact` (type: `array`):

Optional entity types to redact, such as pii, phone\_number, or email\_address.

## `keyterms` (type: `array`):

Optional brand or product terms to improve recognition with Nova-3.

## `maxVideoDurationSeconds` (type: `integer`):

Reject videos longer than this before or after transcription.

## `maxDownloadBytes` (type: `integer`):

Safety limit for the temporary video download sent for transcription.

## `maxRetries` (type: `integer`):

Number of retries for transient Instagram, media, or transcription errors.

## `saveVideoToStorage` (type: `boolean`):

Also save the downloaded MP4 in the run Key-Value Store.

## `mipOptOut` (type: `boolean`):

Opt out of model improvement where supported.

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

Optional Apify Proxy configuration for Instagram access.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/Dcbru9ZIF-B/"
  ],
  "resultsLimitPerProfile": 12,
  "skipPinnedPosts": true,
  "model": "nova-3",
  "language": "auto",
  "smartFormat": true,
  "diarize": false,
  "includeWords": true,
  "includeQuality": true,
  "lowConfidenceThreshold": 0.8,
  "includeSrt": true,
  "fillerWords": false,
  "numerals": false,
  "measurements": false,
  "profanityFilter": false,
  "maxVideoDurationSeconds": 900,
  "maxDownloadBytes": 200000000,
  "maxRetries": 2,
  "saveVideoToStorage": false,
  "mipOptOut": false
}
```

# Actor output Schema

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

One result per submitted URL, including successful transcripts and structured errors.

# 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/Dcbru9ZIF-B/"
    ]
};

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

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

```

## MCP server setup

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