# Instagram Reels Transcript Scraper | Audio to Text (`scraping_solutions/instagram-reels-transcript-scraper-audio-to-text`) Actor

Transcribe public Instagram Reels into clean text, timestamped segments, and WebVTT subtitles. Process Reel URLs or entire public profiles and export transcripts with creator, post, and engagement metadata.

- **URL**: https://apify.com/scraping\_solutions/instagram-reels-transcript-scraper-audio-to-text.md
- **Developed by:** [Scraping Solutions](https://apify.com/scraping_solutions) (community)
- **Categories:** Social media, Automation, AI
- **Stats:** 43 total users, 36 monthly users, 98.6% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.50 / 1,000 results

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/platform/actors/running/actors-in-store#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 Reels Transcript Scraper & Profile Transcriber

Turn public Instagram Reels into clean, searchable text with timestamps. Paste individual Reel URLs or enter public Instagram profiles to discover and transcribe recent Reels automatically, without cookies or an Instagram login.

Get the complete transcript, timestamped segments, WebVTT subtitles, creator information, post caption, publication date, and engagement metrics in one structured dataset. Export to JSON, CSV, Excel, XML, RSS, or access results through the Apify API.

### What can you do with this Actor?

- Transcribe one Instagram Reel from its URL.
- Process a batch of up to 100 Reel URLs in one run.
- Enter public profiles and collect recent Reel transcripts automatically.
- Filter profile Reels by a relative date such as `7 days` or an exact UTC date.
- Obtain sentence-level timestamps and WebVTT subtitles.
- Translate spoken audio into English.
- Combine transcripts with captions, creator data, dates, and engagement metrics.
- Send Instagram video content to LLMs, RAG pipelines, embeddings, or semantic search.
- Schedule profile monitoring and deliver new transcripts through webhooks or integrations.

### Why this Instagram transcript scraper?

Most Instagram downloaders stop at a video file or post metadata. This Actor turns the spoken content inside Reels into structured data that can be searched, analyzed, summarized, subtitled, and automated.

| Capability | Value |
| --- | --- |
| Reel URL to transcript | Convert a public Reel into text without manually downloading or uploading media. |
| Profile to transcripts | Discover and process recent Reels from one or more public accounts in the same run. |
| Cost-aware captions strategy | Reuse Instagram subtitles when available and invoke AI only when needed. |
| Timestamped segments | Connect every sentence to its start and end time. |
| WebVTT output | Use ready-to-export subtitle timing in video and publishing workflows. |
| English translation | Transcribe with Whisper Turbo first, then translate the resulting text while preserving the original. |
| Incremental results | Each completed item is saved immediately, so successful work remains available if a later item fails. |
| Budget protection | The Actor checks the Apify run spending limit before metadata collection and paid audio processing. |

### Verified result

In a real public Reel test, the Actor processed `35.78` seconds of Spanish audio and returned:

- `118` transcribed words
- `9` sentence-level timestamp segments
- word-level WebVTT timing
- creator, caption, date, duration, and media metadata
- one result event and one audio-minute event

Actual accuracy depends on audio quality, music, accents, overlapping speakers, and language.

### Input options

You can use direct Reel URLs, public profiles, or both in the same run.

#### Transcribe direct Reel URLs

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/SHORTCODE_1/",
    "https://www.instagram.com/reel/SHORTCODE_2/"
  ],
  "transcriptionMode": "captions-first",
  "language": "auto"
}
```

#### Transcribe recent Reels from profiles

```json
{
  "usernames": ["natgeo", "bbcnews"],
  "resultsLimitPerProfile": 25,
  "onlyPostsNewerThan": "30 days",
  "skipPinnedPosts": true,
  "transcriptionMode": "captions-first",
  "language": "auto",
  "includeMetadata": true
}
```

#### Translate a Reel into English

```json
{
  "reelUrls": ["https://www.instagram.com/reel/SHORTCODE/"],
  "transcriptionMode": "captions-first",
  "translateToEnglish": true
}
```

Translation uses two AI operations: Whisper Turbo creates the source-language transcript, then a text translation model produces English. The original remains in `transcript` and the English version is returned in `translatedTranscript`. It is incompatible with `captions-only` mode.

### Input reference

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `reelUrls` | string array | `[]` | Public Reel, video, or supported Instagram post URLs. Maximum 100 per run. |
| `usernames` | string array | `[]` | Public profiles whose recent Reels should be discovered. Maximum 20 per run. |
| `resultsLimitPerProfile` | integer | `12` | Maximum matching Reels collected from each profile. |
| `onlyPostsNewerThan` | string | empty | Relative or absolute UTC filter such as `7 days`, `2 weeks`, or `2026-08-01`. |
| `skipPinnedPosts` | boolean | `true` | Skip pinned Reels that may be older than recent profile content. |
| `transcriptionMode` | string | `captions-first` | Choose `captions-first`, `ai-only`, or `captions-only`. |
| `language` | string | `auto` | Automatic detection or an ISO-639-1 code such as `en`, `es`, `pt`, or `fr`. |
| `translateToEnglish` | boolean | `false` | Add an English text translation after AI transcription while preserving the original. |
| `maximumVideoDurationSeconds` | integer | `900` | Reject unexpectedly long media before it consumes additional run budget. |
| `includeMetadata` | boolean | `true` | Include creator, caption, engagement, date, and duration. |

At least one Reel URL or public username is required.

### Transcription modes

#### `captions-first` (recommended)

Uses native Instagram subtitles when available. If no usable subtitle file exists, the Actor transcribes the Reel audio with AI. This normally provides the best balance of speed, coverage, and price.

#### `ai-only`

Always processes the audio with AI. Use this when you want consistent AI transcription or when translating speech into English.

#### `captions-only`

Returns transcripts only when Instagram provides usable subtitles. It never charges an `audio-minute` event. Items without captions are returned as uncharged item-level errors.

### Output example

```json
{
  "url": "https://www.instagram.com/reel/SHORTCODE/",
  "shortcode": "SHORTCODE",
  "mediaId": "3894730192563454128",
  "username": "creator",
  "fullName": "Creator Name",
  "profileUrl": "https://www.instagram.com/creator/",
  "caption": "Original post caption",
  "publishedAt": "2026-08-01T18:30:00Z",
  "durationSeconds": 35.78,
  "language": "es",
  "transcript": "Complete spoken content from the Reel...",
  "translatedTranscript": "Complete spoken content translated into English...",
  "translationLanguage": "en",
  "segments": [
    {
      "start": 0.08,
      "end": 2.62,
      "text": "First timestamped sentence."
    },
    {
      "start": 2.66,
      "end": 6.56,
      "text": "Second timestamped sentence."
    }
  ],
  "vtt": "WEBVTT\n\n00:00.080 --> 00:02.620\nFirst timestamped sentence.",
  "wordCount": 118,
  "transcriptionStatus": "succeeded",
  "errorMessage": null,
  "audioMinutesCharged": 1,
  "likeCount": 1250,
  "commentCount": 48,
  "playCount": 34000,
  "shareCount": 75,
  "saveCount": 320,
  "repostCount": 18,
  "extractedAt": "2026-08-03T12:00:00Z"
}
```

### Output fields

| Category | Fields |
| --- | --- |
| Reel identity | `url`, `shortcode`, `mediaId` |
| Creator | `username`, `fullName`, `profileUrl` |
| Transcript | `transcript`, `segments`, `vtt`, `wordCount`, `language`, `translatedTranscript`, `translationLanguage` |
| Post metadata | `caption`, `publishedAt`, `durationSeconds`, `isPinned` |
| Engagement | `likeCount`, `commentCount`, `playCount`, `shareCount`, `saveCount`, `repostCount` |
| Collection | `extractedAt` |
| Processing status | `transcriptionStatus`, `errorMessage`, `audioMinutesCharged` |

Metadata and engagement fields depend on what Instagram makes available for each Reel.

### Pay-per-event pricing

The Actor uses two transparent events:

| Event | Charged when |
| --- | --- |
| `result` | One complete Reel transcript is successfully delivered. |
| `audio-minute` | One started minute of audio is processed with AI. |

Native Instagram subtitles do not trigger `audio-minute`. A 61-second Reel without usable captions triggers one `result` and two `audio-minute` events. Failed items do not trigger a successful `result` charge.

Set `maxTotalChargeUsd` when starting a run through the API to control the maximum allowed spend. Before any provider request, the Actor verifies that the remaining run budget can fund at least one `result` plus one `audio-minute` whenever AI is enabled. Before each AI call, it reserves the `result` price and every started audio minute required by that Reel. If the combined amount does not fit, the Actor stops without downloading the media or calling the transcription API.

With the recommended no-discount prices, use a run limit of at least `$0.0100` for an AI-enabled run. This includes the first `$0.0095` result-and-audio bundle plus the automatic Actor-start event.

### API example

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_API_TOKEN>")

run = client.actor("YOUR_USERNAME/instagram-reels-transcript-scraper").call(
    run_input={
        "usernames": ["natgeo"],
        "resultsLimitPerProfile": 12,
        "onlyPostsNewerThan": "30 days",
        "transcriptionMode": "captions-first",
    },
    max_total_charge_usd=1.00,
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

You can also run the Actor from Apify Tasks, schedules, webhooks, Make, Zapier, or any HTTP client.

### Popular use cases

- **Competitor content analysis:** compare spoken hooks, offers, products, topics, and calls to action.
- **Creator monitoring:** schedule profiles and collect transcripts from newly published Reels.
- **LLM and RAG datasets:** turn video speech into text for summarization, question answering, and semantic search.
- **Subtitle generation:** export timestamped segments or WebVTT for editing and publishing workflows.
- **Content repurposing:** transform Reel speech into articles, newsletters, scripts, briefs, or social posts.
- **Campaign research:** combine spoken claims with captions, dates, creators, and available engagement metrics.
- **Searchable archives:** make large collections of public Instagram videos searchable by their spoken content.
- **Multilingual research:** transcribe supported languages or translate audio into English.

### FAQ

#### Can I transcribe an Instagram Reel without logging in?

Yes. The Actor processes public Instagram content without requiring your Instagram cookies, password, or `sessionid`.

#### Can I transcribe all recent Reels from an Instagram profile?

Yes. Enter one or more public usernames, choose a result limit, and optionally add a date filter. The Actor discovers and processes matching Reels automatically.

#### Does the output include timestamps?

Yes. Results include sentence-level `start` and `end` timestamps. AI results can also include WebVTT timing suitable for subtitle workflows.

#### Can it translate Instagram Reels into English?

Yes. Enable `translateToEnglish`. Whisper Turbo first returns the original-language transcript, and a second AI operation returns English in `translatedTranscript`. The detected source language remains in `language`.

#### Why are some metadata fields empty?

Instagram does not expose every engagement metric publicly for every Reel. In particular, save and repost counts are commonly unavailable. The Actor omits unavailable metrics instead of returning a misleading zero; use the **All fields** dataset view to inspect every field that was supplied for a Reel.

#### Are private profiles supported?

No. Only publicly accessible Instagram content is supported.

### Responsible use and limitations

- Process only public Instagram content you are legally permitted to use.
- Respect copyright, privacy, Instagram's terms, Apify's terms, and applicable law.
- Do not use the Actor for harassment, invasive profiling, or unlawful surveillance.
- Transcription accuracy varies with audio quality, noise, music, accents, and overlapping speech.
- Instagram and upstream data structures can change, which may temporarily affect availability.
- Media and subtitle links are temporary and may expire.

# Actor input Schema

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

Add public Instagram Reel, video, or supported post URLs. Use bulk edit to paste a prepared list.

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

Add public usernames or Instagram profile URLs. The Actor discovers and transcribes their recent Reels automatically.

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

Maximum number of matching Reels collected from each profile.

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

Optional UTC date filter. Examples: 7 days, 2 weeks, 3 months, 2026-08-01, or a full ISO timestamp.

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

Exclude pinned Reels that may be older than the profile's recent content.

## `transcriptionMode` (type: `string`):

Captions first uses Instagram subtitles when available and AI as fallback. AI only always transcribes audio. Captions only never uses paid AI transcription.

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

Select the language spoken in the Reels. Auto detect is recommended when profiles may contain more than one language.

## `translateToEnglish` (type: `boolean`):

After transcription, translate the resulting text into English with a second AI request. The original transcript is preserved; use captions-first or ai-only.

## `maximumVideoDurationSeconds` (type: `integer`):

Safety limit that prevents unexpectedly long videos from consuming the run budget.

## `includeMetadata` (type: `boolean`):

Include creator, caption, engagement, duration, and publication information.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/Da_ZgEaPvCN/"
  ],
  "usernames": [],
  "resultsLimitPerProfile": 12,
  "onlyPostsNewerThan": "",
  "skipPinnedPosts": true,
  "transcriptionMode": "captions-first",
  "language": "auto",
  "translateToEnglish": false,
  "maximumVideoDurationSeconds": 900,
  "includeMetadata": true
}
```

# Actor output Schema

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

Successful, billable transcripts in the default dataset. Uncharged item-level errors are available in the run summary.

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

Result counts, uncharged item-level errors, processing usage, request totals, and run-budget status.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scraping_solutions/instagram-reels-transcript-scraper-audio-to-text").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scraping_solutions/instagram-reels-transcript-scraper-audio-to-text").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 '{}' |
apify call scraping_solutions/instagram-reels-transcript-scraper-audio-to-text --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraping_solutions/instagram-reels-transcript-scraper-audio-to-text"
        }
    }
}

```

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/lBbqJ878VY4NnOsof/builds/aBM2Bs67CCjrbpNnW/openapi.json
