# Instagram Transcript Scraper: Reels & Video to Text (`scrape-lads/instagram-transcript-scraper`) Actor

Instagram Transcript Scraper: turn Instagram Reels and video posts into text with Whisper speech-to-text. Paste Reel URLs or a profile. Timestamped segments, language, caption, author and stats. Pay only per transcript.

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

## Pricing

from $1.20 / 1,000 transcript by speech-to-texts

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

### What does Instagram Transcript Scraper do?

**Instagram Transcript Scraper turns Instagram Reels and video posts into clean text transcripts with timestamps.** Paste video links, or a creator's profile to get their latest videos, and get one row per video with the full transcript, timestamped segments, the language, the author, caption, duration and engagement stats.

Instagram publishes no captions files, so every Reel is transcribed from its audio with Whisper large-v3 turbo (90+ languages).

Run it in Apify Console, call it from the **API**, **schedule** it, or connect it to Make, Zapier, n8n, Google Sheets or your own code.

### What data can you extract from a Instagram video?

| 📝 Full transcript | ⏱️ Timestamped segments | 🗣️ Language |
|---|---|---|
| 👤 Author | 📰 Title and caption | ⏳ Duration |
| 🔢 Word count | 🎙️ Captions or speech-to-text | 👀 Views |
| ❤️ Likes | 💬 Comments | 🔁 Shares |
| 📅 Published at | 🖼️ Thumbnail | 🔗 Video URL |

### Why use this Instagram Transcript Scraper to download transcripts?

- Repurpose Reels into posts, newsletters and captions.
- Research what top creators say in their hooks and calls to action.
- Feed Reels into an AI knowledge base or summarizer.
- Track spoken brand and product mentions.
- **Pay only for transcripts.** Private, deleted and silent videos are free.

### How to get Instagram transcripts (step by step)

1. Click **Try for free** and open the **Input** tab.
2. Paste video URLs or profiles.
3. Click **Start**. A few videos take seconds.
4. Download the results as **JSON, CSV, Excel or HTML**, or read them through the API.

### Input

```json
{
    "urls": [
        "https://www.instagram.com/reel/Dd-VQPnRz0t/"
    ],
    "profiles": [],
    "maxVideosPerProfile": 10,
    "language": "",
    "includeSegments": true
}
```

All fields are described on the Input tab. Only Instagram Reels and video posts are accepted; links from other platforms come back free with a pointer to the matching actor.

### Output

One row per video. Download the dataset as JSON, HTML, CSV or Excel.

| Field | Description |
| --- | --- |
| `url`, `videoId` | The video. |
| `author`, `authorName`, `authorUrl` | Creator handle, display name and profile link. |
| `title`, `caption` | Title or post caption. |
| `durationSec`, `publishedAt`, `thumbnailUrl` | Length, publish date, cover image. |
| `transcript` | The full transcript as one text. |
| `segments` | `{ start, end, text }` with times in seconds. |
| `language` | Two-letter language code of the transcript. |
| `transcriptSource` | `subtitles` (platform captions) or `speech-to-text` (Whisper). |
| `stats` | Views, likes, comments and shares when the platform shows them. |
| `status`, `errorCode`, `message` | `success`, `no_transcript` or `failed`, with a reason such as `private_or_removed` or `no_speech`. |
| `charged` | Whether this row was billed. |

### How much does it cost to get Instagram transcripts?

Pay per transcript, no subscription:

- **$1.50 per 1,000 speech-to-text transcripts**, first minute of audio included. Longer videos add $0.0025 per extra started minute.
- A $0.003 start fee per run.

**Failed, private, removed and silent videos are free.** Higher Apify plans get up to 20% off.

### Subtitle files, filters and budget

- **SRT and WebVTT:** pick them under **Subtitle files** to get ready-to-use subtitle text in the `srt` and `vtt` fields, for video editors, players and translation tools.
- **Profile filters:** **Only videos from the last N days** and **Minimum views** skip older or smaller videos before anything is charged.
- **Speech-to-text budget:** **Speech-to-text budget (minutes)** caps how much audio one run transcribes, so a long video list can never surprise you.
- **AI fallback:** every video is transcribed from its audio with Whisper, so it works even though the platform publishes no captions.

### Run it on a schedule

Save a task with the creators you follow, set **Only videos from the last N days** to 1 or 7, and add a daily or weekly **schedule**: you get every new video transcribed automatically. Connect **Google Sheets**, Slack or a webhook to receive the transcripts as soon as the run finishes.

### Use it with AI tools, n8n and MCP

- **RAG and LangChain:** load the dataset with Apify's LangChain or LlamaIndex loaders and index the `transcript` field.
- **n8n, Make and Zapier:** use the Apify node to run the actor and send each transcript to Google Sheets, Notion or Slack.
- **MCP:** add the Apify MCP server (`https://mcp.apify.com`) to Claude, ChatGPT or Cursor and ask for transcripts in plain language.

### FAQ, limits and support

**Which videos can't be transcribed?** Private accounts, deleted Reels and posts with embedding turned off cannot be read. Photo and carousel posts without a video come back free as `no_video`.

**How accurate is it?** Speech-to-text uses Whisper large-v3 turbo, which is very accurate on clear speech in 90+ languages. Music and heavy background noise lower accuracy.

**Is there an official Instagram API for transcripts? How is this different?** Instagram has no public API that returns the spoken text of any public video. This actor gives you the transcript, timestamps and video stats from a URL or a profile, with no developer account and no app review.

**What are the alternatives to Instagram Transcript Scraper?** Copying captions by hand, uploading videos to a transcription service one by one, or other transcript actors on Apify. This one works in bulk, reads captions first when they exist, and charges nothing for failed or silent videos.

**Is it legal?** The actor only reads public videos that anyone can watch without logging in. Respect copyright, platform terms and privacy laws such as the GDPR.

Found a problem or need a field? Open an **Issue** on the actor page.

### Other transcript scrapers

| Actor | Platform |
| --- | --- |
| [TikTok Transcript Scraper](https://apify.com/scrape-lads/tiktok-transcript-scraper) | TikTok videos |
| [YouTube Transcript Scraper](https://apify.com/scrape-lads/youtube-transcript-scraper) | YouTube videos and Shorts |
| [X (Twitter) Video Transcript Scraper](https://apify.com/scrape-lads/x-twitter-video-transcript-scraper) | X (Twitter) videos |
| [Facebook Video Transcript Scraper](https://apify.com/scrape-lads/facebook-video-transcript-scraper) | Facebook videos and Reels |
| [Douyin Transcript Scraper](https://apify.com/scrape-lads/douyin-transcript-scraper) | Douyin (抖音) videos |
| [Video Transcript Scraper](https://apify.com/scrape-lads/video-transcript-scraper) | TikTok, Instagram, YouTube and X in one actor |

### Privacy

This Actor sends anonymous run inputs (such as video URLs) and a hashed account ID to the developer to see which inputs are useful. Tokens, cookies and proxy settings are never sent. Nothing from your results is collected.

# Actor input Schema

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

Instagram Reels and video posts (instagram.com/reel/..., instagram.com/p/...). One transcript row per video. Add URLs, profiles below, or both.

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

instagram.com/name. Instagram shows at most the 12 newest posts to logged-out visitors.

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

How many of the newest videos to transcribe from each profile.

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

Two-letter code such as en, es or zh. Tells speech-to-text which language is spoken. Leave empty to detect it.

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

Add the transcript split into segments with start and end times in seconds.

## `outputFormats` (type: `array`):

Also add the transcript as ready-to-use subtitle text in the srt and/or vtt field of each row, for video editors and players.

## `postedWithinDays` (type: `integer`):

Profile videos only: skip videos older than this many days, for free. Empty or 0 = no limit.

## `minViews` (type: `integer`):

Profile videos only: skip videos with fewer views, for free. Empty or 0 = no minimum.

## `maxAiMinutes` (type: `integer`):

Stop sending videos to speech-to-text once this many minutes of audio have been transcribed in the run. Caption transcripts are not affected. Empty or 0 = no cap.

## `maxSpeechToTextSec` (type: `integer`):

Longer videos are not sent to speech-to-text, so a long upload cannot add many extra-minute charges.

## `maxConcurrency` (type: `integer`):

How many videos are processed at the same time.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/reel/Dd-VQPnRz0t/"
  ],
  "maxVideosPerProfile": 10,
  "includeSegments": true,
  "outputFormats": [],
  "maxSpeechToTextSec": 1800,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

No description

## `fullResults` (type: `string`):

No description

## `runSummary` (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 = {
    "urls": [
        "https://www.instagram.com/reel/Dd-VQPnRz0t/"
    ]
};

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

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

```

## MCP server setup

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