# Instagram Reels Transcript Scraper (`parseforge/instagram-reels-transcript-scraper`) Actor

Transcribe public Instagram Reels to text with timestamps and language, plus views, likes, caption and owner. No login. Export CSV, Excel, JSON or XML.

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

## Pricing

from $36.10 / 1,000 transcribed reels

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v3.webp)

## 🎙️ Instagram Reels Transcript Scraper

> 🚀 **Export Instagram Reels transcripts in seconds.** 30 fields per Reel, including the full spoken text, timestamped segments, detected language, views, likes, caption and owner, with no Instagram login and no cookies.

Paste Reel links, or give a username and get the transcripts of that profile's latest Reels. The Actor reads the public Reel page, listens to the Reel's own audio track, and writes one flat row per Reel: the words spoken, when each sentence starts and ends, and the language, next to the numbers that tell you how the Reel performed. In our last verified run, 5 Reels in English and Spanish came back fully transcribed in 14 seconds.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Content marketers | Hooks and scripts of top performing Reels in a niche, to repurpose into posts and blogs |
| Social media agencies | Competitor Reel scripts next to their views and likes, for weekly creative reviews |
| Brand and PR teams | What creators actually say about a brand in sponsored and co-authored Reels |
| Researchers and data scientists | Spoken-text datasets from Reels for sentiment, topic and trend analysis |
| AI builders | Clean Reel transcripts with timestamps for search, RAG and summarization |

### 📋 What the Instagram Reels Transcript Scraper does

> 💡 **Why it matters:** captions are often one line and a hashtag. The words spoken in the Reel carry the product names, claims and calls to action.

- Transcribes the audio of public Reels, in the original language and never translated.
- Returns timestamped segments, one `{start, end, text}` entry per sentence or phrase, in seconds from the start of the Reel.
- Detects the main spoken language and returns its ISO 639-1 code (`en`, `es`, `pt`).
- Reports an honest status: `Transcribed`, `No speech` (music or ambience only) or `No audio`.
- Adds the Reel metadata: caption, owner username, name, verified badge and ID, likes, comments, duration, size, posting date, thumbnail and video URL.
- Adds the view count Instagram shows on a profile's reels tab (profile mode).
- Adds hashtags and mentions from the caption, tagged users and co-authors of collab Reels.
- Takes Reel URLs (`/reel/`, `/reels/`, `/p/`, `/tv/`), usernames, or both.
- Filters by posting date, skips pinned Reels and skips Reels longer than a limit you set.

#### 🧱 What Instagram allows without a login

Instagram puts a login wall in front of almost everything except the public Reel page and a profile's reels tab. This Actor reads only those two public, server-rendered pages. It never logs in, so it cannot go past what a logged-out visitor sees:

- The latest 12 Reels of a profile, with no pagination.
- View counts only on a profile's reels tab. For a Reel you paste directly, `viewCount` is `Not Disclosed`.
- No music title, location or comments.
- Private, deleted or age-restricted Reels come back as an error row that is not charged.

If Instagram throttles an exit IP, the Actor retries through residential proxies by itself.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every row is one Reel.

| Field | Type | Description |
| --- | --- | --- |
| 🖼 `imageUrl` | string | Thumbnail |
| 🔖 `shortCode` | string | Instagram short code |
| 🔗 `reelUrl` | string | Reel link |
| 🆔 `id` | string | Media ID |
| 👤 `ownerUsername` | string | Owner handle |
| 🪪 `ownerFullName` | string | Owner display name |
| ✅ `ownerIsVerified` | string | `Yes` or `No` |
| 🆔 `ownerId` | string | Owner ID |
| 📝 `caption` | string | Caption text |
| 📅 `postedAt` | string | ISO 8601 posting time |
| ⏱ `durationSeconds` | number | Reel length |
| 👁 `viewCount` | number | Views, profile mode only, otherwise `Not Disclosed` |
| ❤️ `likeCount` | number | Likes, `Not Disclosed` when the creator hides counts |
| 💬 `commentCount` | number | Comment count |
| 🎞 `videoUrl` | string | Video file URL |
| ↔️ `width` | number | Width in pixels |
| ↕️ `height` | number | Height in pixels |
| 🔊 `hasAudio` | string | `Yes` or `No` |
| 📌 `isPinned` | string | `Yes` or `No` in profile mode, `N/A` otherwise |
| 🎙 `transcriptStatus` | string | `Transcribed`, `No speech`, `No audio` or `Failed` |
| 🌐 `transcriptLanguage` | string | ISO 639-1 code, or `N/A` |
| 🗒 `transcript` | string | Full spoken text, or `N/A` |
| 🔢 `transcriptWordCount` | number | Words in the transcript |
| #️⃣ `hashtags` | array | Hashtags from the caption |
| 📣 `mentions` | array | Mentions from the caption |
| 🏷 `taggedUsers` | array | Tagged users |
| 🤝 `coauthors` | array | Co-authors of a collab Reel |
| ⏲ `transcriptSegments` | array | `{start, end, text}` per sentence |
| 🕒 `scrapedAt` | string | ISO 8601 timestamp of the extraction |
| ❌ `error` | string | Error message on a failed row, `null` on a real Reel |

One row from a verified run on September 24, 2026 (image and video URLs shortened for reading):

```json
[
  {
    "imageUrl": "https://scontent-dfw5-2.cdninstagram.com/v/t51.82787-15/811137741_18700328572019133_5289341061833588239_n.jpg?...",
    "shortCode": "DdotQALCHZz",
    "reelUrl": "https://www.instagram.com/reel/DdotQALCHZz/",
    "id": "3992640081453676147",
    "ownerUsername": "natgeo",
    "ownerFullName": "National Geographic",
    "ownerIsVerified": "Yes",
    "ownerId": "787132",
    "caption": "Phenomenal life lessons from our friend @paige_tingey, part of the Creator Cohort campaign 👏 \n\nCatch the full #NatGeo9 interview with Paige on the Nat Geo YouTube Channel at the link in bio.",
    "postedAt": "2026-09-23T16:10:34.000Z",
    "durationSeconds": 22.31,
    "viewCount": "Not Disclosed",
    "likeCount": 10574,
    "commentCount": 87,
    "videoUrl": "https://scontent-dfw6-2.cdninstagram.com/o1/v/t2/f2/m86/AQPlLaf1n8x-bEzu0VE_wlcSWR-qEFsM8Gn32BenH2_oiDA6MuOnR_lVf-GxwSaxJ0tfBDn0lblgChbanknxQ-N4hwHwU70XhN9_OT8.mp4?...",
    "width": 1080,
    "height": 1920,
    "hasAudio": "Yes",
    "isPinned": "N/A",
    "transcriptStatus": "Transcribed",
    "transcriptLanguage": "en",
    "transcript": "If you're not willing to do the uncomfortable thing today, you're never going to be where you want to be tomorrow. to surround yourself with people that celebrate your wins with you and get rid of relationships that just no longer serve you. And if someone wants you to fail, it's because of their insecurity, not because you don't deserve to succeed.",
    "transcriptWordCount": 62,
    "hashtags": ["NatGeo9"],
    "mentions": ["paige_tingey"],
    "taggedUsers": ["paige_tingey"],
    "coauthors": ["paige_tingey"],
    "transcriptSegments": [
      { "start": 0, "end": 5.5, "text": "If you're not willing to do the uncomfortable thing today, you're never going to be where you want to be tomorrow." },
      { "start": 5.5, "end": 12.5, "text": "to surround yourself with people that celebrate your wins with you and get rid of relationships that just no longer serve you." },
      { "start": 12.5, "end": 18.8, "text": "And if someone wants you to fail, it's because of their insecurity, not because you don't deserve to succeed." }
    ],
    "scrapedAt": "2026-09-24T20:57:31.684Z",
    "error": null
  }
]
```

Reels taken from a profile also carry `viewCount` (for example 1,251,904 for this Reel on the natgeo reels tab) and `isPinned`. A Reel with only music comes back with `transcriptStatus: "No speech"` and an empty transcript.

### ✨ Why choose this Actor

- **Transcript and metadata in one row.** No second tool: the words, the timing, the language and the Reel's numbers side by side.
- **Timestamps on every sentence.** `transcriptSegments` is ready for subtitles or for finding the hook.
- **Original language, detected.** English, Spanish and other languages work without setup. Add a language hint only if you want to.
- **Profile mode.** A username returns the latest Reels of that profile, with their view counts.
- **Fair billing.** A failed transcription is delivered free, and there is no start fee. Reels over 3 minutes pay a small per-minute extra, so short Reels stay cheap.
- **No login.** Public Reels only, no cookies or account at risk.

### 📈 How it compares to alternatives

| | This Actor | Typical Reel transcript Actor | Manual transcription |
| --- | --- | --- | --- |
| Timestamped segments | ✅ | Sometimes | ✅ one Reel at a time |
| Detected language | ✅ | Sometimes | ❌ |
| Views, likes, caption and owner on the same row | ✅ | Sometimes | ❌ |
| Profile mode with view counts | ✅ | Sometimes | ❌ |
| Failed transcription charged | ❌ free | Sometimes | n/a |
| Run-start fee | ❌ none | Often | n/a |
| More than 12 Reels per profile | ❌ login wall | Needs a logged-in session | ✅ |
| Music title, location, comments | ❌ login wall | Needs a logged-in session | ✅ |

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Instagram Reels Transcript Scraper and click **Try for free**.
3. Paste Reel links in **Reel URLs**, or usernames in **Profile usernames**, or both.
4. Set **Max Items**. Optionally set a date filter, skip pinned Reels, or cap the Reel length.
5. Click **Start** and watch the run log.
6. Open the **Storage** tab and download CSV, Excel, JSON or XML, or pull the rows through the Apify API.

Transcribe the latest 5 Reels of two creators, skipping pinned ones:

```json
{ "profileUsernames": ["natgeo", "garyvee"], "maxReelsPerProfile": 5, "skipPinnedReels": true }
```

Transcribe specific Reels, skip anything longer than 3 minutes, and hint that they are in Portuguese:

```json
{ "reelUrls": ["https://www.instagram.com/reel/DdrAGMwowmZ/"], "maxDurationSeconds": 180, "languageHint": "pt" }
```

### 💼 Business use cases

#### Creative research

Transcribe a creator's latest 12 Reels and sort by `viewCount`. The first segment of each transcript is the hook, with its exact timing.

#### Brand monitoring

Search the `transcript` column for your brand and product names. Spoken mentions never show up in captions or hashtags.

#### Content repurposing

Turn your own Reels into blog drafts, newsletter snippets, subtitles or show notes from the timestamped segments.

#### Dataset building

Collect Reel transcripts across creators and languages for classification, sentiment, trend or LLM work.

### 🔌 Automating Instagram Reels Transcript Scraper

- **Make and Zapier**: run the Actor on a schedule and push new transcripts into a spreadsheet or a CRM.
- **Slack**: post an alert when a watched creator publishes a Reel that mentions your brand.
- **Airbyte**: sync the dataset into a warehouse for text analysis.
- **Google Sheets**: send each run straight into a shared sheet for the content team.
- **Apify Scheduler**: run daily or weekly with no external tooling at all.
- **API**: start runs and read the dataset from JavaScript or Python with the Apify client.

### 🌟 Beyond business use cases

- **Research**: study how hooks, topics and languages relate to views across a niche.
- **Accessibility**: get a text version of Reels for people who cannot listen to audio.
- **Education**: build a searchable archive of expert Reels for a course.
- **Experimentation**: feed transcripts to a model for summaries, tagging or translation.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant:

> I am using the Instagram Reels Transcript Scraper on Apify. It returns fields such as shortCode, ownerUsername, caption, durationSeconds, viewCount, likeCount, transcriptStatus, transcriptLanguage, transcript and transcriptSegments. Help me analyze the transcripts of the latest Reels of a creator: find the hooks, the topics and the calls to action.

You can also connect it to an AI agent over MCP:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/instagram-reels-transcript-scraper"
```

### ❓ Frequently Asked Questions

#### 🔑 Do I need an Instagram account or cookies?

No. The Actor reads public Reels as a logged-out visitor.

#### 🌍 Which languages are supported?

The spoken language is detected automatically. English, Spanish, Portuguese, French, German, Hindi and most major languages work. The transcript stays in the original language.

#### 🔤 Does it translate?

No. The transcript is always in the language spoken in the Reel.

#### ⏲ Are timestamps included?

Yes. `transcriptSegments` has start and end seconds for every sentence or phrase.

#### 👥 Can I transcribe a whole profile?

Only the latest 12 Reels of each profile, which is everything Instagram shows a logged-out visitor. Going deeper needs a logged-in session, which this Actor does not use.

#### 👁 Why is `viewCount` "Not Disclosed"?

Instagram shows view counts to logged-out visitors only on a profile's reels tab. Add the creator's username to **Profile usernames** to get views for their latest Reels.

#### 🔇 Why did a Reel come back as "No speech"?

The Reel has only music, sound effects or silence. That is its real state, and the row still carries all its metadata.

#### 🎞 Does it download the video?

No. It listens to the Reel's audio track only, and gives you the `videoUrl` if you want the file.

#### 🎵 Are music and song names included?

No. Instagram hides the audio track name, the location and the comments from logged-out visitors.

#### ⏳ What about long videos?

They work (a 16-minute video was transcribed in testing). Each started minute after the third is billed as an extra. Use **Skip reels longer than** to leave them out.

#### 💵 How much does it cost?

It is pay per event. A transcribed Reel with up to 3 minutes of audio costs $0.018 on the free Apify plan tier, and less on higher tiers (down to $0.0125). Each started minute after the third costs $0.0065. There is no run-start fee, and a Reel whose transcription fails is delivered free.

#### 🛑 Why did a Reel fail?

It may be private, deleted, age-restricted, or Instagram rate-limited the request. The row says which, and failed rows are never charged. Run it again a few minutes later.

#### 📦 How many Reels per run?

Free plan: 10 as a preview. Paid plans: up to 1,000,000.

### 🔌 Integrate with any app

Every run writes to an Apify dataset you can read over the REST API, stream into a webhook, or export as CSV, Excel, JSON or XML. Apify's integrations cover Make, Zapier, Airbyte, Slack, Google Drive, GitHub, Google Sheets and plain HTTP webhooks, so the transcripts can land wherever your team already works.

### 🔗 Recommended Actors

- [Instagram Reel Scraper](https://apify.com/parseforge/instagram-reel-scraper?fpr=vmoqkp) for Reel metadata, views and captions at scale, without transcripts.
- [Audio Transcriber](https://apify.com/parseforge/audio-transcriber?fpr=vmoqkp) for speech to text on any audio file you upload or link.
- [YouTube Transcript Scraper](https://apify.com/parseforge/youtube-transcript-scraper?fpr=vmoqkp) for timestamped transcripts of YouTube videos.
- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper?fpr=vmoqkp) for bio, counts and videos of TikTok creators.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or connected to Instagram or Meta Platforms, Inc. It collects only publicly available data. You are responsible for using the data in compliance with Instagram's terms and applicable laws, including GDPR and CCPA.

# Actor input Schema

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

Public Instagram Reel links to transcribe, one per line. Accepts /reel/, /reels/, /p/ and /tv/ links, e.g. https://www.instagram.com/reel/DdrAGMwowmZ/

## `profileUsernames` (type: `array`):

Instagram usernames or profile URLs (e.g. natgeo, @nasa, https://www.instagram.com/garyvee/). The Actor transcribes each profile's latest public reels. Instagram shows logged-out visitors the latest 12 reels of a profile.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxReelsPerProfile` (type: `integer`):

How many of each profile's latest reels to transcribe (1 to 12, the logged-out ceiling).

## `newerThan` (type: `string`):

Skip reels posted before this date. Absolute (YYYY-MM-DD) or relative (e.g. 7 days, 3 months).

## `skipPinnedReels` (type: `boolean`):

Leave out the reels a creator pinned to the top of the reels tab (usually older ones).

## `languageHint` (type: `string`):

Optional ISO 639-1 code of the language spoken in the reels (en, es, pt, fr, de, hi...). Leave empty to detect it automatically. The transcript is always in the original language, never translated.

## `maxDurationSeconds` (type: `integer`):

Optional. Reels longer than this are skipped and not charged. Useful to keep long videos (and their extra-minute charges) out of a run.

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

Apify Proxy is used by default. If Instagram throttles it, the Actor switches to residential proxies by itself.

## Actor input object example

```json
{
  "reelUrls": [
    "https://www.instagram.com/reel/DdrAGMwowmZ/",
    "https://www.instagram.com/reel/DdpAtTHkvgk/",
    "https://www.instagram.com/reel/DdotQALCHZz/",
    "https://www.instagram.com/reel/DDdIk-csBYv/",
    "https://www.instagram.com/reel/Ddrijb0OqzO/"
  ],
  "maxItems": 10,
  "maxReelsPerProfile": 12,
  "skipPinnedReels": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Key fields

## `fullData` (type: `string`):

Complete dataset with all 30 fields

# 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 = {
    "reelUrls": [
        "https://www.instagram.com/reel/DdrAGMwowmZ/",
        "https://www.instagram.com/reel/DdpAtTHkvgk/",
        "https://www.instagram.com/reel/DdotQALCHZz/",
        "https://www.instagram.com/reel/DDdIk-csBYv/",
        "https://www.instagram.com/reel/Ddrijb0OqzO/"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/instagram-reels-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 = {
    "reelUrls": [
        "https://www.instagram.com/reel/DdrAGMwowmZ/",
        "https://www.instagram.com/reel/DdpAtTHkvgk/",
        "https://www.instagram.com/reel/DdotQALCHZz/",
        "https://www.instagram.com/reel/DDdIk-csBYv/",
        "https://www.instagram.com/reel/Ddrijb0OqzO/",
    ],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/instagram-reels-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 '{
  "reelUrls": [
    "https://www.instagram.com/reel/DdrAGMwowmZ/",
    "https://www.instagram.com/reel/DdpAtTHkvgk/",
    "https://www.instagram.com/reel/DdotQALCHZz/",
    "https://www.instagram.com/reel/DDdIk-csBYv/",
    "https://www.instagram.com/reel/Ddrijb0OqzO/"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parseforge/instagram-reels-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/instagram-reels-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/6dRbXjr0FIFH4Quf7/builds/EBTbPR0hLnyCMvUGW/openapi.json
