# Instagram Transcript Scraper (`khadinakbar/instagram-transcript-scraper`) Actor

AI transcript extractor for Instagram Reels and video posts. No cookies, no login.

- **URL**: https://apify.com/khadinakbar/instagram-transcript-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, AI, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 transcript extracteds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Transcript Scraper

**Turn any Instagram Reel or video post into clean, AI-generated text.** Paste one or more Instagram URLs and get back the full spoken-audio transcript of each video — no login, no cookies, no browser extension. Built for content marketers, researchers, and AI agents that need Instagram video turned into searchable, repurposable text.

### What it does

This actor takes Instagram Reel / video-post URLs (or bare shortcodes) and returns an AI-transcribed text of the spoken audio in each video. Carousel posts that contain multiple videos return one transcript per video. Photos, audio-less clips, and videos longer than the provider's 2-minute limit return an empty transcript with a clear explanation instead of failing.

It uses public data only. You never supply Instagram credentials, session cookies, or a `sessionid` — the actor routes requests through managed transcript providers (ScrapeCreators primary, SociaVault fallback) so it stays reliable even when one provider is down or rate-limited.

### When to use it

- Repurpose Reels into blog posts, newsletters, captions, or scripts.
- Build a searchable archive of a creator's spoken content.
- Feed Instagram video content into an LLM / RAG pipeline as text.
- Accessibility: generate readable transcripts of video posts.
- Competitive and trend research across many Reels at once.

**Not for:** scraping whole profiles, hashtags, followers, comments, or photo captions. This actor transcribes the *spoken audio* of specific video posts. For profile, hashtag, or post-metadata scraping, use the matching Instagram actors in the same portfolio.

### Output

One dataset record per input URL:

| Field | Description |
|---|---|
| `shortcode` | Instagram post/reel shortcode (e.g. `DZpQwxqimz2`) |
| `url` | Canonical Instagram URL transcribed |
| `transcript` | Full spoken-audio transcript (carousel parts joined with blank lines); `null` when no speech |
| `transcriptItems` | Array of per-video parts `{ shortcode, mediaId, text }` (length > 1 for carousels) |
| `isCarousel` | `true` when the post had multiple videos |
| `language` | Language hint label you passed in (metadata only) |
| `source` | Provider that produced the transcript (`scrapecreators` or `sociavault`) |
| `status` | `ok`, `no_transcribable_audio`, or `provider_error` |
| `note` | Human-readable explanation for non-`ok` records |
| `scrapedAt` | ISO 8601 extraction timestamp |

#### Example record

```json
{
  "shortcode": "DZpQwxqimz2",
  "url": "https://www.instagram.com/reel/DZpQwxqimz2/",
  "transcript": "We all know the story of Pompeii, right? ... This is the story I want to tell.",
  "transcriptItems": [{ "shortcode": "DZpQwxqimz2", "mediaId": "3920738671208852726", "text": "We all know the story of Pompeii..." }],
  "isCarousel": false,
  "language": "auto",
  "source": "sociavault",
  "status": "ok",
  "scrapedAt": "2026-06-26T03:10:00.000Z"
}
````

### Input

```json
{
  "instagramUrls": [
    "https://www.instagram.com/reel/DZpQwxqimz2/",
    "https://www.instagram.com/p/C9wYv3kSxJ-/"
  ],
  "maxTranscripts": 100,
  "language": "auto"
}
```

- **instagramUrls** (required) — Reel / video-post URLs or bare shortcodes.
- **startUrls** (optional) — alternative request-object form `[{ "url": "..." }]` for chaining from another actor.
- **maxTranscripts** (optional, default 100) — hard cap on transcribed-and-billed videos per run.
- **language** (optional, default `auto`) — metadata label; transcription auto-detects language regardless.

### Pricing

Pay-per-event:

- **Actor start** — $0.00005 per run.
- **Transcript extracted** — **$0.01 per video successfully transcribed** (one charge per post; carousel items share the charge).

You are only charged for videos that produce a transcript. Photos, no-speech clips, over-length videos, and provider errors are **not** billed for the transcript event. Each run prints an upfront cost cap and a final billed amount in the log and status message.

### How it works

1. Each input is normalized to an Instagram shortcode + canonical URL (duplicates removed).
2. For each target, the actor calls ScrapeCreators' Instagram transcript endpoint first (cheapest). If it is out of credits, rate-limited, errors, or returns no transcript, it falls back to SociaVault.
3. Both providers run AI transcription on the video audio (typically 10–30 seconds per video). Videos must be under ~2 minutes; if no speech is detected the transcript is `null`.
4. Results are pushed to the dataset; a run summary is written to the `OUTPUT` key-value record.

### Reliability notes

- **No cookies required** — public data only via managed providers.
- **Graceful degradation** — non-video posts and no-speech clips return a labeled empty record, not a crash.
- **Two-provider redundancy** — one provider outage does not break the run.
- **Honest failure** — if every request fails at both providers (e.g. total provider outage), the run is marked failed with a clear message rather than silently succeeding empty.

### MCP / AI-agent ready

Single-URL-in, structured-JSON-out. Discoverable through Apify MCP as `apify--instagram-transcript-scraper`. Input descriptions and output fields are written for LLM tool-selection.

### Legal

Use this actor only for content you are permitted to access and process. It extracts publicly available Instagram video data. You are responsible for complying with Instagram's Terms of Service, applicable copyright, and data-protection laws (including GDPR/CCPA) in your jurisdiction. This actor does not access private accounts or login-gated content.

# Actor input Schema

## `instagramUrls` (type: `array`):

List of Instagram Reel or video-post URLs (or bare shortcodes) to transcribe. Each item looks like 'https://www.instagram.com/reel/DZpQwxqimz2/' or 'https://www.instagram.com/p/SHORTCODE/'. Photos and non-video posts return an empty transcript with a clear note. This is the main input — NOT a username or hashtag; this actor transcribes specific posts, not whole profiles.

## `startUrls` (type: `array`):

Alternative way to pass targets as request objects, e.g. when chaining from another actor's output: \[{ "url": "https://www.instagram.com/reel/SHORTCODE/" }]. Merged with 'instagramUrls'. Use 'instagramUrls' for simple manual runs; use this for programmatic/agent pipelines that emit URL objects.

## `maxTranscripts` (type: `integer`):

Hard cap on how many videos are transcribed (and billed) in one run. Defaults to 100. Set lower to control spend; carousels still count as one charge per post. NOT a per-post length limit — provider transcription is capped at 2-minute videos regardless of this value.

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

Optional label stored on each output record describing the expected spoken language (e.g. 'en', 'es', 'auto'). Defaults to 'auto'. The AI transcriber auto-detects language regardless; this field is metadata only and does NOT force a translation.

## Actor input object example

```json
{
  "instagramUrls": [
    "https://www.instagram.com/reel/DZpQwxqimz2/",
    "https://www.instagram.com/p/C9wYv3kSxJ-/"
  ],
  "maxTranscripts": 100,
  "language": "auto"
}
```

# Actor output Schema

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

All extracted Instagram video transcripts.

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

Counts and billed amount for this run.

# 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 = {
    "instagramUrls": [
        "https://www.instagram.com/reel/DZpQwxqimz2/"
    ],
    "maxTranscripts": 100,
    "language": "auto"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "instagramUrls": ["https://www.instagram.com/reel/DZpQwxqimz2/"],
    "maxTranscripts": 100,
    "language": "auto",
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/instagram-transcript-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "instagramUrls": [
    "https://www.instagram.com/reel/DZpQwxqimz2/"
  ],
  "maxTranscripts": 100,
  "language": "auto"
}' |
apify call khadinakbar/instagram-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/instagram-transcript-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Transcript Scraper",
        "description": "AI transcript extractor for Instagram Reels and video posts. No cookies, no login.",
        "version": "0.1",
        "x-build-id": "SoUs0U5pXFs3PC3zf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~instagram-transcript-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-instagram-transcript-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~instagram-transcript-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-instagram-transcript-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~instagram-transcript-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-instagram-transcript-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "instagramUrls": {
                        "title": "Instagram Reel / video post URLs",
                        "type": "array",
                        "description": "List of Instagram Reel or video-post URLs (or bare shortcodes) to transcribe. Each item looks like 'https://www.instagram.com/reel/DZpQwxqimz2/' or 'https://www.instagram.com/p/SHORTCODE/'. Photos and non-video posts return an empty transcript with a clear note. This is the main input — NOT a username or hashtag; this actor transcribes specific posts, not whole profiles.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (alternative input)",
                        "type": "array",
                        "description": "Alternative way to pass targets as request objects, e.g. when chaining from another actor's output: [{ \"url\": \"https://www.instagram.com/reel/SHORTCODE/\" }]. Merged with 'instagramUrls'. Use 'instagramUrls' for simple manual runs; use this for programmatic/agent pipelines that emit URL objects.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxTranscripts": {
                        "title": "Max transcripts",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on how many videos are transcribed (and billed) in one run. Defaults to 100. Set lower to control spend; carousels still count as one charge per post. NOT a per-post length limit — provider transcription is capped at 2-minute videos regardless of this value.",
                        "default": 100
                    },
                    "language": {
                        "title": "Language hint",
                        "type": "string",
                        "description": "Optional label stored on each output record describing the expected spoken language (e.g. 'en', 'es', 'auto'). Defaults to 'auto'. The AI transcriber auto-detects language regardless; this field is metadata only and does NOT force a translation.",
                        "default": "auto"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
