# Instagram Reel Script Extractor & API: Reels to Text (`quarra/instagram-reel-script-scraper`) Actor

Get the Instagram reel script from the link of a reel, without login: full text, timestamped segments, SRT and VTT, language, likes, caption, sound. Music-only reels are not charged. From $0.0175 for a 40-second reel, start fee included.

- **URL**: https://apify.com/quarra/instagram-reel-script-scraper.md
- **Developed by:** [Quarra Labs](https://apify.com/quarra) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 1 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Reel Script Scraper: Reels to Text

Paste Instagram reel links and get what is said in each reel as a script: the full text, timestamped segments, the
language, and SRT or WebVTT subtitles if you want them, with the reel's details (account, date, likes, comments,
caption, sound). No Instagram account, no API key. Export as JSON, CSV or Excel, or read it through the Apify API.

- **Scripts you can reuse**: study the hooks and scripts of a niche, quote creators, turn your own reels into posts and
  captions, or feed hundreds of reels to an LLM.
- **Music is not a script**: a reel with only music or sounds comes back as a free `no_speech` record instead of
  invented words.
- **A free record that says why** for every reel that cannot be transcribed (deleted, private, age-restricted, photo
  post). You pay only for scripts delivered.

**$0.0075 per reel plus $0.006 per started minute** on the Free plan (a 40-second reel: $0.0135), less per reel on the higher
Apify plans, plus a start fee of $0.004 per run at the default memory.

### Quick start

1. Paste one reel link per line into **Reels** (`instagram.com/reel/…`, `/p/…`, share links). An account
   (`@natgeo`) works too: you get its latest videos.
2. Click **Start**.
3. Read the scripts in the run's **Output** tab, or export them as JSON, CSV or Excel.

Through the API:

```json
{
  "urls": ["https://www.instagram.com/reel/DbIdlf0j6uA/"],
  "transcriptFormat": "text",
  "includeSrt": true
}
```

Like any Apify Actor, it can be scheduled, connected to webhooks, Make, Zapier, n8n, or called by AI agents through
Apify's MCP server.

### Output

One record per reel. A script (`status: "ok"`), shortened here:

```json
{
  "status": "ok",
  "platform": "instagram",
  "videoId": "DbIdlf0j6uA",
  "url": "https://www.instagram.com/reel/DbIdlf0j6uA/",
  "author": { "username": "natgeo", "fullName": "National Geographic", "isVerified": true },
  "caption": "Describe Pompeii: Out of Time in 3 words? It's Now Streaming. …",
  "publishedAt": "2026-07-23T13:00:03Z",
  "likeCount": 28343,
  "commentCount": 320,
  "sound": { "title": "Original audio", "author": "natgeo", "isOriginal": true },
  "durationSeconds": 36.2,
  "language": "en",
  "hasSpeech": true,
  "transcript": "Three words to describe this series about Pompeii. History. There's something you're going to want to see. …",
  "segments": [
    { "start": 0, "end": 4, "duration": 4, "text": "Three words to describe this series about Pompeii." }
  ]
}
```

### What we measured

On the Apify platform on 8 October 2026, on 43 reel links shared on Reddit plus two accounts: 25 scripts in 6
languages (English, Spanish, French, Russian, Portuguese, Hindi), 17 reels without clear speech returned as free
records, 5 deleted or age-restricted reels returned as free errors, all in 2 minutes 30. One reel runs in about 6
seconds.

Instagram shows no captions to visitors, so every reel goes through speech-to-text: ElevenLabs Scribe v2, the most
accurate model in our tests, for most reels, and OpenAI's Whisper run by Groq for the first reels of some runs and as
a backup. The audio is sent to them only to
be transcribed; we delete the transcript ElevenLabs keeps as soon as we have read it.

### Pricing

| Apify plan | Per reel | Per started minute |
|---|---|---|
| Free | $0.0075 | $0.006 |
| Bronze | $0.0066 | $0.006 |
| Silver | $0.00525 | $0.006 |
| Gold and above | $0.003 | $0.006 |

Plus a start fee of $0.004 per GB of memory per run ($0.004 at the default 512 MB). Reels without speech, incomplete
scripts, deleted or private posts, errors and duplicates are free; platform usage is included. Your maximum charge
per run is never exceeded, and `maxItems` caps the scripts of a run.

### Limits

- **Speech or music.** A reel is charged only when its speech is clear; short or distant speech over loud music may
  come back as a free `no_speech` record.
- **Accounts:** the 12 latest posts only (Instagram's limit without an account).
- Private accounts and age-restricted reels need a signed-in account; we do not use accounts.
- Longest video: 60 minutes (30 by default).

### FAQ

**Do I need an Instagram account?** No account and no cookies. Leave the Connection setting on its default
(automatic): it is included in the price.

**Is it legal?** It reads reels any visitor can watch without signing in. Scripts reproduce what people say, which
may be protected by copyright and may contain personal data: your use must comply with the laws and terms that apply
to you, including the GDPR in Europe.

**Is anything different on Apify's free plan?** Runs started from an Apify free-plan account are transcribed by our Whisper models only, never by the ElevenLabs model we pay for per use. Everything else is the same.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

### Related tools from Quarra

- [Instagram Transcript Scraper](https://apify.com/quarra/instagram-transcript-scraper): reels, video posts and
  accounts to text.
- [TikTok Transcript Scraper](https://apify.com/quarra/tiktok-transcript-scraper) and
  [YouTube Video Transcript](https://apify.com/quarra/youtube-video-transcript): the same for TikTok and YouTube.

# Actor input Schema

## `urls` (type: `array`):

One per line: reel or post URLs (instagram.com/reel/…, /p/…, /tv/…, share links). An account (@name or profile URL) works too and gives its latest videos.

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

Optional. The language you expect, as a code or a name (en, es, hi, English…). It is a preference, not an instruction: each video comes back in the language actually spoken, never translated (requestedLanguageFound: false when it differs). With Hindi, Urdu or Punjabi, a video heard as English is a free uncertain_language record (the model may have translated it). Empty: detected for each video.

## `transcriptFormat` (type: `string`):

transcript is the whole text in one string; segments is a list of {start, end, duration, text} in seconds.

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

Add an srt field: the transcript as a ready-to-save .srt subtitle file.

## `includeVtt` (type: `boolean`):

Add a vtt field: the transcript as a ready-to-save .vtt subtitle file.

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

Longer videos get a free too_long record instead of a transcript. Their length is read before anything is transcribed.

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

Optional cap for the whole run, counted in charged transcripts. Respected exactly. Free records (no speech, deleted, private) do not count; they are bounded separately (100 plus 2 per transcript).

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

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/reel/DbIdlf0j6uA/"
  ],
  "transcriptFormat": "both",
  "includeSrt": false,
  "includeVtt": false,
  "maxDurationMinutes": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every video: transcript, segments, metadata, and the free missing/error records with their reason.

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

One line per video: status, account, language, words, reason.

## `summary` (type: `string`):

Per-input counts, videos without speech, errors and speech-to-text statistics.

# 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/DbIdlf0j6uA/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/instagram-reel-script-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 = {
    "urls": ["https://www.instagram.com/reel/DbIdlf0j6uA/"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/instagram-reel-script-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 '{
  "urls": [
    "https://www.instagram.com/reel/DbIdlf0j6uA/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/instagram-reel-script-scraper --silent --output-dataset

```

## MCP server setup

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