# Instagram Transcript Generator (`karamelo/instagram-transcript`) Actor

Instagram Transcript Generator, extract clean, timestamped transcripts and transcribe video speech from Instagram reels with accurate & fast speech to text AI transcription and get structured JSON. Built for AI agents, LLM pipelines, RAG, and content repurposing. NO Login NO Cookie No Api Key

- **URL**: https://apify.com/karamelo/instagram-transcript.md
- **Developed by:** [karamelo](https://apify.com/karamelo) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 extracted 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 Transcript Scraper

Extract clean, timestamped speech-to-text transcripts from any public Instagram reel as structured JSON. Built for AI agents, Large Language Model (LLM) workflows, Retrieval-Augmented Generation (RAG) pipelines, content repurposing, influencer monitoring, and digital marketing intelligence.

***

### What does Instagram Reel Transcript Scraper do?

Instagram Reel Transcript Scraper takes a public Instagram reel URL, analyzes the audio content, and returns an ordered sequence of spoken caption segments. Each segment contains the exact start time in seconds, the duration of the speech segment, and the transcribed text.

Unlike manual listening or video-editing transcript tools that require uploading video files from your desktop, this Actor operates entirely in the cloud. You provide the reel URL, and within moments you receive clean, machine-readable data ready for downstream automations, vector databases, or editorial review.

The output is published directly to your Apify dataset. You can download the results in JSON, CSV, Excel, or XML format, or fetch them programmatically through the Apify API, official Python and JavaScript clients, or the Apify Model Context Protocol (MCP) server.

***

### Pricing & Pay-Per-Event (PPE) Model

This Actor operates on a fair, transparent **Pay-Per-Event (PPE)** pricing model. You do not pay for Apify platform usage costs (compute units, memory consumption, or residential proxy data transfer). You are only charged a fixed price for delivered transcript events.

- **Zero charge for empty or non-speech audio ($0.00)**: If a reel contains only background music, sound effects, silence, or if transcription cannot be completed, you are never charged ($0.00).
- **Fair duration-based charging**: Billed per started minute of reel audio. For example, a 45-second reel counts as 1 started minute, and an 80-second reel counts as 2 started minutes.
- **Store plan discounts**: If your account has an upgraded Apify subscription plan, discounted event rates are automatically applied.

| Event | Event Name | Billing Unit | Pricing |
|---|---|---|---|
| **Transcript** | `addon-transcript` | Charged per started minute of reel audio | $45.00 / 1,000 min ($0.045 / min) |

***

### Why extract transcripts from Instagram Reels?

Instagram reels represent one of the highest-density sources of spoken information on the internet today. Millions of creators, educators, journalists, business leaders, and influencers share tutorials, product breakdowns, market analyses, commentary, and news through short-form video.

However, video and audio are notoriously difficult to search, index, summarize, and monitor at scale:

- **Invisible to text search**: Search engines, internal databases, and document management systems cannot read the spoken audio inside a video file without text transcription.
- **Time-consuming manual review**: A human listening to dozens of 60-second or 90-second reels spends hours taking notes on talking points, product recommendations, or customer sentiment.
- **Unstructured creator workflows**: Repurposing a reel into a blog post, social media thread, or newsletter requires manually dictating or rewinding the video multiple times.
- **RAG and AI indexing challenges**: Feeding video into an AI assistant or Retrieval-Augmented Generation pipeline requires converting speech into accurately timestamped chunks that an LLM can cite and reference.

Instagram Reel Transcript Scraper eliminates these bottlenecks by transforming spoken reel audio into high-fidelity, timestamped JSON text in seconds.

***

### Key Features

- **Segment-Level Timestamps**: Every spoken sentence or phrase includes an exact `start` time and `dur` (duration) in seconds, making it easy to cite specific moments, sync with playback, or align with video editing tools.
- **Structured JSON Architecture**: Clean JSON output formatted specifically for developer tools, AI frameworks, LangChain, LlamaIndex, vector databases, and spreadsheet imports.
- **Background Music & Silence Filtering**: Built-in audio intelligence distinguishes meaningful human speech from background instrumentals, sound effects, and silent intervals, returning only genuine dialogue.
- **Direct Cloud Processing**: No need to download heavy video files to your computer or run local speech-to-text software. Simply pass the URL and retrieve the data.
- **Flexible Export Formats**: Instant download as JSON, CSV, Excel (XLSX), XML, or an interactive table directly within the Apify Console.
- **API & Webhook Integrations**: Easily integrate runs into your existing tech stack using official Apify Python, JavaScript, and TypeScript SDKs, or trigger runs automatically via webhooks.
- **AI Agent & MCP Compatibility**: Fully callable as an autonomous tool by Claude, ChatGPT, Cursor, and other agentic assistants using the Apify MCP server.

***

### Core Use Cases

#### 1. Retrieval-Augmented Generation (RAG) & AI Assistants

Modern AI agents and conversational assistants need access to real-time, real-world knowledge. By indexing reel transcripts into vector databases such as Pinecone, Weaviate, Qdrant, or Chroma, your RAG pipeline can retrieve precise creator quotes, product feedback, and niche tutorials to answer user queries with verifiable citations.

#### 2. Content Repurposing & Editorial Production

Content creators, digital agencies, and marketing teams often spend substantial effort brainstorming new content. With automated transcripts, you can instantly turn your own or client reels into:

- In-depth articles and blog posts
- Long-form newsletter sections
- Engaging Twitter/X threads and LinkedIn thought-leadership posts
- Search-engine-optimized video descriptions and show notes

#### 3. Influencer Campaign Auditing & Brand Safety

Brands and marketing agencies partnering with creators must verify whether sponsored reels accurately mention the agreed key talking points, promotional codes, disclaimers, or campaign hashtags. Rather than paying reviewers to watch hundreds of videos manually, you can search automated transcripts for required keywords and compliance statements in seconds.

#### 4. Competitive Intelligence & Social Listening

Monitor competitors, trending industry topics, and viral products across Instagram. Analyze recurring patterns, frequently mentioned problem statements, and consumer objections by performing sentiment analysis and keyword extraction over batches of reel transcripts.

#### 5. Accessibility & Multilingual Subtitling

Ensure your media reaches broader audiences, including individuals who are deaf or hard of hearing, as well as viewers watching videos on silent in public environments. Use the extracted timestamps and text as a baseline for generating closed captions (SRT/VTT) and translation workflows.

***

### Input Parameters

The Actor accepts a single straightforward input object configured in the Apify Console or passed via API.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `reelUrl` | String | Yes | Full URL of the public Instagram reel you want to transcribe. Accepts standard reel links, share links, and post links. |

#### Supported URL Formats

The Actor automatically recognizes and processes all standard public Instagram video URL patterns:

- Direct reel URLs: `https://www.instagram.com/reel/SHORTCODE/`
- Plural reels path: `https://www.instagram.com/reels/SHORTCODE/`
- Standard post URLs: `https://www.instagram.com/p/SHORTCODE/`
- Long-form video URLs: `https://www.instagram.com/tv/SHORTCODE/`
- Profile-nested reel URLs: `https://www.instagram.com/username/reel/SHORTCODE/`
- Mobile tracking links containing query parameters (e.g. `?utm_source=ig_web_copy_link`)
- Raw shortcode identifiers (e.g. `DdJomaZFWkW`)

#### Example Input

```json
{
  "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
}
```

***

### Output Data Structure

Every run pushes a single structured dataset item containing the ordered transcript segments.

#### Field Specifications

| Field | Type | Description |
|---|---|---|
| `data` | Array of Objects | Ordered list of caption segments spoken throughout the reel. |
| `data[].start` | String | Start time of the spoken segment in seconds from video start (e.g. `"0.000"`), formatted to three decimal places. |
| `data[].dur` | String | Duration of the speech segment in seconds (e.g. `"4.320"`), formatted to three decimal places. |
| `data[].text` | String | The spoken text transcribed for that segment. |

#### Real Verified Output Sample

Here is an actual record extracted by the Actor from a public Instagram reel:

```json
{
  "data": [
    {
      "start": "0.000",
      "dur": "4.320",
      "text": "I always tell people, it isn't me, it's we."
    },
    {
      "start": "4.660",
      "dur": "3.740",
      "text": "And the heroes of that day are the guys that never made it out."
    },
    {
      "start": "8.840",
      "dur": "5.640",
      "text": "Without Jan, without the last second sticking his hand in that elevator door,"
    },
    {
      "start": "15.080",
      "dur": "2.020",
      "text": "we wouldn't be talking right now, guaranteed."
    },
    {
      "start": "17.780",
      "dur": "1.920",
      "text": "I say to them, why you call me hero?"
    },
    {
      "start": "20.600",
      "dur": "1.240",
      "text": "That's not only me hero."
    },
    {
      "start": "22.780",
      "dur": "2.640",
      "text": "Firefighters, police, there's a lot of hero."
    },
    {
      "start": "25.420",
      "dur": "5.760",
      "text": "My biggest word that I've used since 9-11 is resilience."
    },
    {
      "start": "31.800",
      "dur": "3.920",
      "text": "Even though you will go through terrible things, you can do this."
    },
    {
      "start": "36.220",
      "dur": "0.280",
      "text": "You lived."
    },
    {
      "start": "36.500",
      "dur": "1.360",
      "text": "How do you thank people like you?"
    },
    {
      "start": "37.960",
      "dur": "0.500",
      "text": "You lived."
    },
    {
      "start": "38.780",
      "dur": "1.040",
      "text": "You lived a good life."
    },
    {
      "start": "40.120",
      "dur": "0.900",
      "text": "That's how you thank us."
    },
    {
      "start": "41.260",
      "dur": "2.700",
      "text": "My hopes, my dreams is because of Stefan."
    },
    {
      "start": "44.560",
      "dur": "2.980",
      "text": "It makes me think about this movie called Saving Private Ryan."
    },
    {
      "start": "48.040",
      "dur": "3.100",
      "text": "Private Ryan looks to his family and he says,"
    },
    {
      "start": "51.140",
      "dur": "6.920",
      "text": "have I lived well enough to deserve this life?"
    },
    {
      "start": "58.880",
      "dur": "10.880",
      "text": "And my hope is that all my efforts will prove to just be good enough to deserve him saving my life."
    },
    {
      "start": "69.760",
      "dur": "7.240",
      "text": "We have a responsibility to those who didn't make it to make a good life out of what we have."
    },
    {
      "start": "77.440",
      "dur": "2.380",
      "text": "You get a second chance, live life."
    },
    {
      "start": "80.380",
      "dur": "0.580",
      "text": "You know, live it."
    }
  ]
}
```

#### Table View Representation

In the Apify Console **Dataset** tab, the data is also visualized in a clean table format:

| start | dur | text |
|---|---|---|
| 0.000 | 4.320 | I always tell people, it isn't me, it's we. |
| 4.660 | 3.740 | And the heroes of that day are the guys that never made it out. |
| 8.840 | 5.640 | Without Jan, without the last second sticking his hand in that elevator door, |
| 15.080 | 2.020 | we wouldn't be talking right now, guaranteed. |
| 17.780 | 1.920 | I say to them, why you call me hero? |
| 20.600 | 1.240 | That's not only me hero. |
| 22.780 | 2.640 | Firefighters, police, there's a lot of hero. |
| 25.420 | 5.760 | My biggest word that I've used since 9-11 is resilience. |
| 31.800 | 3.920 | Even though you will go through terrible things, you can do this. |
| 36.220 | 0.280 | You lived. |
| 36.500 | 1.360 | How do you thank people like you? |
| 37.960 | 0.500 | You lived. |
| 38.780 | 1.040 | You lived a good life. |
| 40.120 | 0.900 | That's how you thank us. |
| 41.260 | 2.700 | My hopes, my dreams is because of Stefan. |
| 44.560 | 2.980 | It makes me think about this movie called Saving Private Ryan. |
| 48.040 | 3.100 | Private Ryan looks to his family and he says, |
| 51.140 | 6.920 | have I lived well enough to deserve this life? |
| 58.880 | 10.880 | And my hope is that all my efforts will prove to just be good enough to deserve him saving my life. |
| 69.760 | 7.240 | We have a responsibility to those who didn't make it to make a good life out of what we have. |
| 77.440 | 2.380 | You get a second chance, live life. |
| 80.380 | 0.580 | You know, live it. |

***

### How to Integrate and Automate

Because this Actor runs on the Apify platform, you can invoke it from any programming language, cloud environment, or automation tool.

#### 1. JavaScript & TypeScript (`apify-client`)

Install the official client via npm:

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

Execute a run and consume the transcript data:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({
    token: 'YOUR_APIFY_API_TOKEN',
});

// Run the actor and wait for it to finish
const run = await client.actor('karamelo/instagram-transcript').call({
    reelUrl: 'https://www.instagram.com/reel/DdJomaZFWkW/',
});

// Fetch results from the default dataset
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log('Transcript segments:', items[0]?.data);
```

#### 2. Python (`apify-client`)

Install the official Python client via pip:

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

Run the actor and iterate over segments:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run_input = {
    "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/",
}

    # Run the actor synchronously
run = client.actor("karamelo/instagram-transcript").call(run_input=run_input)

    # Fetch results from dataset
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    for segment in item.get("data", []):
        print(f"[{segment['start']}s -> {segment['dur']}s]: {segment['text']}")
```

#### 3. Direct REST API via cURL

Trigger the Actor asynchronously or synchronously via standard HTTP POST:

```bash
curl --request POST \
  --url "https://api.apify.com/v2/acts/karamelo~instagram-transcript/runs?token=YOUR_APIFY_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
  }'
```

To run synchronously and wait for the dataset item in a single request, append `&waitForFinish=120`:

```bash
curl --request POST \
  --url "https://api.apify.com/v2/acts/karamelo~instagram-transcript/run-sync-get-dataset-items?token=YOUR_APIFY_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
  }'
```

#### 4. AI Agents & Model Context Protocol (MCP)

This Actor is fully compatible with the [Apify MCP Server](https://mcp.apify.com). AI agents in Claude Desktop, Cursor, Open WebUI, and custom LangChain agents can invoke `instagram-transcript` on demand as an external tool to fetch the spoken dialogue of any Instagram reel during interactive chat sessions.

***

### Downstream Data Workflows & Pipelines

Once your transcript is captured, you can route the structured text into a variety of downstream production environments:

- **Vector Ingestion**: Chunk the segment objects by combined token length or paragraph breaks, compute vector embeddings using OpenAI or Cohere models, and store them alongside the reel URL metadata for semantic search.
- **Zapier & Make Automations**: Set up an Apify Webhook that triggers whenever an Actor run succeeds. Pass the transcript text directly into Notion, Airtable, Slack, Google Docs, or email alerts.
- **Google Sheets & Excel**: Export the dataset as a `.csv` or `.xlsx` spreadsheet for quick tabular analysis, content review, and keyword filtering with stakeholders.
- **Automated Summary Generation**: Feed the extracted text directly into an LLM prompt (e.g. GPT-4o, Claude 3.5 Sonnet) with instructions to generate a concise 3-bullet summary, actionable tips, or product lists mentioned by the speaker.

***

### Performance, Reliability & Limitations

#### Performance Profile

- **Processing Speed**: A typical 30-to-90-second reel is processed and transcribed in approximately 1 to 3 seconds.
- **Resource Footprint**: Minimal platform memory and compute required, providing fast turnaround times and low overhead.

#### Content Boundaries

- **Public Content Only**: The target reel must be hosted on a public Instagram account. Reels from private profiles, restricted business accounts, or age-gated media that require user login cannot be accessed.
- **Spoken Speech Required**: The Actor analyzes spoken human voice. If a reel contains only background music, sound effects, ambient nature noise, or silence, the Actor will finish cleanly with an empty `data: []` array rather than generating erroneous hallucinations.
- **Reel Length**: Built for standard short-form reels (typically up to several minutes in length).

***

### Frequently Asked Questions (FAQ)

#### Can I transcribe reels from private accounts?

No. This Actor is designed strictly for public reels accessible without login. Attempting to pass a reel from a private account will result in a clean error notifying you that the content is unavailable or private.

#### How accurate are the segment timestamps?

Timestamps are calculated with high precision and formatted to milliseconds (three decimal places). The `start` parameter reflects when the vocal segment commences, and `dur` records how long the speech segment lasted before the next pause or transition.

#### What happens if a video has loud background music?

The speech recognition engine is robust against background instrumentals and moderate ambient noise. However, if background music completely drowns out the vocal audio, or if the speaker is inaudible, transcription quality may vary or segments may be excluded to avoid noisy approximations.

#### What happens if the reel contains no speech at all?

If a video contains only music, sound effects, or silence, the Actor detects the absence of speech and outputs `{ "data": [] }`. It does not fail or crash, allowing your automated batch pipelines to continue without disruption. Furthermore, because no speech transcript was produced, zero transcript fee is assessed ($0.00).

#### Does this Actor transcribe Instagram Stories?

No. Instagram Stories expire after 24 hours and have different access mechanics. This Actor is specifically tailored for permanent public Instagram Reels and video posts.

#### Can I pass multiple reel URLs in a single run?

Currently, each run processes one target reel URL specified in the `reelUrl` field. For batch operations, you can easily loop through a list of URLs using the Apify API, Python/JS SDK, or Apify CLI, triggering concurrent runs as needed.

#### Where can I find the results after the run completes?

Results are available immediately under the **Storage** tab in your Apify Console run overview. You can view and download the data in the default **Dataset** (available as JSON, CSV, Excel, XML, or Table).

#### How can I connect this to Slack or Notion?

Under your Actor settings in the Apify Console, go to the **Integrations** tab. You can configure a webhook that triggers when a run succeeds and sends the output payload directly to Zapier, Make, or a custom webhook endpoint that posts to Slack or creates a Notion page.

#### Why did my run output show empty segments?

An empty segment array (`"data": []`) typically occurs when:

1. The video contains non-vocal background music or sound effects without spoken human dialogue.
2. The speech is inaudible or masked by excessive audio distortion.
3. The video audio was muted or restricted by Instagram copyright policies in certain regions.

#### Can I use this Actor in an automated AI agent workflow?

Yes. You can connect this Actor to any AI agent supporting MCP (Model Context Protocol) via the Apify MCP server (`https://mcp.apify.com`), or call it directly using the Apify Python or Node.js SDK inside an autonomous tool-calling loop.

***

### Responsible & Ethical Use

When using Instagram Reel Transcript Scraper, users should respect the intellectual property rights of content creators, public copyright laws, and Instagram's terms of service:

- Transcripts should be utilized for lawful research, fair-use analysis, accessibility enhancements, monitoring, and legitimate content curation.
- Always attribute original creators when quoting or repurposing spoken ideas and insights from their videos.
- Do not use this tool to scrape or distribute confidential, sensitive, or copyrighted material without appropriate authorization from the content rights holder.

# Actor input Schema

## `reelUrl` (type: `string`):

The URL of the Instagram reel to transcribe (e.g. https://www.instagram.com/reel/DdJomaZFWkW/).

## Actor input object example

```json
{
  "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
}
```

# Actor output Schema

## `transcript` (type: `string`):

The full ordered transcript dataset view for the requested Instagram reel.

# 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 = {
    "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("karamelo/instagram-transcript").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 = { "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/" }

# Run the Actor and wait for it to finish
run = client.actor("karamelo/instagram-transcript").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 '{
  "reelUrl": "https://www.instagram.com/reel/DdJomaZFWkW/"
}' |
apify call karamelo/instagram-transcript --silent --output-dataset

```

## MCP server setup

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

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/yhdaWr3HNjUwroDkA/builds/eyVwORYci80TyeNHO/openapi.json
