# Instagram Reel Transcript Scraper — Reels to Text, SRT & VTT (`memo23/instagram-reel-transcript-scraper`) Actor

Instagram Reel transcripts from any public Reel URL: full spoken text, timestamped segments, SRT & VTT files, creator, caption, likes and comments. On-device Whisper, so Reels without captions still come back as text. No login, 30+ languages. From $0.003 per Reel, billed per minute, capped at 5 min.

- **URL**: https://apify.com/memo23/instagram-reel-transcript-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** AI, Social media, Agents
- **Stats:** 3 total users, 2 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 transcript minutes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Reel Transcript Scraper — Reels to Text, SRT & VTT

Get an accurate **Instagram reel transcript** from any public Reel URL. Paste one link or a whole batch and this Instagram reel transcript extractor returns one row per Reel: the full spoken text, subtitle-style timestamped segments, ready-made SRT & VTT caption files, and creator metadata such as username, caption, likes and comments. On-device Whisper speech-to-text means you get text even when the creator never added captions. No login, 30+ languages, JSON or CSV out. **From $0.003 per Reel:** billed per started minute of video at $0.003, minimum 1 minute, capped at 5 minutes ($0.015) per Reel, plus a $0.01 start per run at the default 2 GB. A Reel that fails or is skipped is never charged.

### Why use this Instagram Reel Transcript Scraper?

- **Works on Reels with no captions** — Instagram exposes no caption track to the public, so the actor downloads each Reel's audio and transcribes the actual speech with Whisper. Captioned or not, you get the text.
- **Batch runs are native** — paste 5 or 500 Reel URLs into a single run and get one clean dataset back, instead of starting a separate run per link.
- **Subtitle files with every row** — full `srt` and `vtt` text plus direct `.srt` / `.vtt` download links, ready for any editor.
- **Timestamped segments** — a `segments` array (`start`, `end`, `text`) for hook analysis, jump-to-moment links or custom captions.
- **No Instagram login or cookies** — works on any public Reel URL, nothing to configure.
- **30+ languages** — set the spoken language or let Whisper detect it per Reel.
- **Per-minute pricing with a hard cap** — $0.003 per started minute, minimum 1, and never more than 5 minutes ($0.015) per video. A typical 30-second Reel is one minute. Nothing is charged for a Reel that fails, is private, or is skipped by your duration limit.
- **The hook on every row** — `hook3s` is the first 3 seconds of speech and `hookStartSeconds` says when the talking starts, so a creator's openers compare side by side without reading transcripts.
- **Chain any Instagram scraper** — pass a finished run's `datasetId` (or paste rows in `datasetItems`) and every Reel URL in those rows is transcribed; the row shape does not matter.
- **Scheduled runs bill only what is new** — name a `watchlistId` and switch on `newReelsOnly`; a Reel transcribed on an earlier run is left out and never charged twice.
- **Every miss on the record** — asked = delivered + reported. What was not delivered is in the run's `ERRORS` record with a reason and what to change, and the status line reconciles the count.

### What does it do?

Give it a list of Instagram Reel URLs. For each one the actor:

1. Resolves the public Reel and its metadata (cookieless).
2. Downloads the audio.
3. Runs on-device Whisper speech-to-text.
4. Pushes one row: metadata + full transcript + timestamped segments + SRT/VTT files.

### Supported input

| Input | Example |
|-------|---------|
| Reel URL | `https://www.instagram.com/reel/Dabg9j1xNHM/` |
| Reels URL | `https://www.instagram.com/reels/Dabg9j1xNHM/` |
| Chained dataset | `datasetId: "nGkT…"` — the default dataset of a finished [Instagram Reel Scraper](https://apify.com/memo23/instagram-reel-scraper), [Reels Search](https://apify.com/memo23/instagram-reels-search-scraper) or [Hashtag Scraper](https://apify.com/memo23/instagram-hashtag-scraper) run |
| Pasted rows | `datasetItems: [ { "url": "https://www.instagram.com/reel/…" } ]` |

Only `/reel/` and `/reels/` links are transcribed; a post (`/p/`) or IGTV (`/tv/`) link is reported as `not_a_reel` and lives in [Instagram Transcript Scraper](https://apify.com/memo23/instagram-transcript-scraper). Chained rows are deep-scanned, so it does not matter which field holds the link.

### Scheduled runs: a Reel is never billed twice

Give the run a `watchlistId` (letters, numbers, hyphens, underscores; for example `nasa-daily`) and switch on `newReelsOnly`. The actor keeps the shortcodes it has transcribed in a named key-value store under that id; every later run with the same id leaves those Reels out of the work and the dataset, so a schedule that re-feeds the same profile or hashtag pays only for what is new. The watchlist uses the same record as [Instagram Transcript Scraper](https://apify.com/memo23/instagram-transcript-scraper), so one id can serve both actors. A run whose input is entirely on the watchlist finishes with "Nothing new" and charges nothing but the run start.

### What was not delivered, and why

Every Reel the input asked for ends as a dataset row or as an entry in the run's `ERRORS` record (key-value store), never neither. The record is written on every run, with an empty `items` list when everything was delivered, so an integration can read it unconditionally. Each entry carries a `reason`, a plain-language `detail` saying what happened and what to change, and a `retryable` flag:

| `reason` | What happened | Re-run as-is? |
|---|---|---|
| `not_a_reel` | A post, IGTV, profile or other non-Reel link | No — use the Instagram Transcript Scraper for posts |
| `private_or_gone` | Instagram would not serve the Reel to a logged-out client: private, deleted, region-locked | No |
| `no_audio` | An image post; nothing to transcribe | No |
| `too_long` | Over your `maxDurationSec` | Raise the limit |
| `transport` | The fetch failed on the network after retries on fresh proxy exits | Yes, in a few minutes |
| `transcription_failed` | Whisper or the audio download failed | Yes |
| `budget_cap` | `maxItems` was reached before this Reel's turn | Raise `maxItems` |

The run's status line carries the same arithmetic, for example *"Delivered 9 of 10 reels. 1 not delivered and not charged: 1 private, removed or not found — see the ERRORS record."* A run that delivers nothing because every fetch failed on the network is marked FAILED so it stands out in your run list; a run whose misses describe the Reels themselves finishes SUCCEEDED.

### Use cases

- **Hook analysis** — read the first two seconds of speech across dozens of Reels and see exactly which openers stop the scroll.
- **Creator & competitor research at scale** — batch-transcribe a creator's whole grid and search the talking points, CTAs and product mentions as text.
- **Caption files for editing** — drop the ready `.srt` / `.vtt` files straight into CapCut, Premiere, DaVinci Resolve or Instagram's own caption upload.
- **Translation & repurposing** — turn winning Reels into blog posts, newsletters, scripts for other platforms, or translated re-records.
- **LLM content pipelines** — clean, timestamped text for RAG indexes, fine-tuning datasets and agent workflows.

### How it works

The actor uses `yt-dlp` to resolve each public Reel and pull its audio without any login, then transcribes the audio locally with **faster-whisper** (a fast CTranslate2 build of OpenAI Whisper). Transcription runs inside the actor itself: there is no external transcript API in the loop, so nothing can run out of credits or throttle your batch mid-run, and your audio never leaves the container. Instagram traffic is routed through residential proxies by default.

### Input configuration

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `startUrls` | array | — | Instagram Reel URLs (`/reel/` or `/reels/`) to transcribe. |
| `datasetId` | string | — | Default dataset of a finished Instagram scraper run; every Reel URL in its rows is transcribed. |
| `datasetItems` | array | — | Rows pasted from a scraper instead of chaining by id. |
| `watchlistId` | string | — | Named memory for scheduled runs; see above. |
| `newReelsOnly` | boolean | `false` | Leave out Reels already on the watchlist. Needs `watchlistId`. |
| `whisperModel` | select | `tiny` | `tiny` (fast, reliable), `base` or `small` (more accurate, slower). |
| `language` | string | `auto` | ISO code (`en`, `es`, `ar`, …) or `auto` to detect per Reel. |
| `includeSegments` | boolean | `true` | Include the `segments` array of timestamped chunks. |
| `maxItems` | integer | `25` | Maximum Reels to transcribe this run. |
| `maxDurationSec` | integer | `300` | Skip videos longer than this (compute guard). `0` disables. |
| `maxConcurrency` | integer | `2` | Reels transcribed in parallel (1–4). |
| `proxy` | object | Residential | Proxy configuration. |

#### Example input

```json
{
    "startUrls": [
        { "url": "https://www.instagram.com/reel/Dabg9j1xNHM/" }
    ],
    "whisperModel": "tiny",
    "language": "auto",
    "includeSegments": true,
    "maxItems": 25
}
```

### What a run costs

Each delivered transcript is billed at **$0.003 per started minute** of video, minimum 1 minute, capped at 5 minutes. The only other charge is the run start: $0.005 per GB of run memory, so **$0.01 per run** at the default 2 GB, charged once however many Reels the run holds. Batch your Reels into one run and the start fee spreads over all of them. Whisper runs on the run's own compute, so Apify platform usage applies as on any actor; there is no third-party transcription API to pay for.

| Reel length | Billed minutes | Transcript charge |
|---|---|---|
| 12 s | 1 | $0.003 |
| 58 s | 1 | $0.003 |
| 2:30 | 3 | $0.009 |
| 4:10 or longer | 5 (cap) | $0.015 |
| 100 Reels averaging 45 s | 100 | $0.30 (+ one $0.01 run start) |

A Reel that cannot be fetched, is private, has no audio, or exceeds `maxDurationSec` produces no row and no transcript charge.

### Output

One row per Reel. Example (abridged):

```json
{
    "id": "Dabg9j1xNHM",
    "shortcode": "Dabg9j1xNHM",
    "url": "https://www.instagram.com/reel/Dabg9j1xNHM/",
    "username": "nasaadmin",
    "userId": "79712351002",
    "fullName": "NASA Administrator Jared Isaacman",
    "caption": "For 250 years, America has inspired generations to dream bigger…",
    "durationSec": 58,
    "thumbnailUrl": "https://instagram.f…/735552979_….jpg",
    "timestamp": 1783294802,
    "uploadDate": "20260705",
    "likeCount": 56053,
    "commentCount": 1923,
    "viewCount": null,
    "isVideo": true,
    "transcript": "For 250 years, the United States of America has been the hope, the promise, the light and the glory of all the nations of the world…",
    "language": "en",
    "hook3s": "For 250 years, the United States of America has been the hope",
    "hookStartSeconds": 0.46,
    "segments": [
        { "start": 0.46, "end": 5.46, "text": "For 250 years, the United States of America has been the hope" }
    ],
    "srt": "1\n00:00:00,460 --> 00:00:05,460\nFor 250 years, the United States of America has been the hope\n",
    "vtt": "WEBVTT\n\n00:00:00.460 --> 00:00:05.460\nFor 250 years, the United States of America has been the hope\n",
    "srtFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/Dabg9j1xNHM.srt",
    "vttFileUrl": "https://api.apify.com/v2/key-value-stores/…/records/Dabg9j1xNHM.vtt",
    "billedMinutes": 1,
    "transcriptSource": "whisper",
    "whisperModel": "tiny",
    "transcribedAt": "2026-07-15T09:49:00.990Z"
}
```

### Key output fields

| Field | Description |
|-------|-------------|
| `transcript` | Full spoken text of the Reel. |
| `hook3s` / `hookStartSeconds` | The first 3 seconds of speech, and when speech starts; empty when the Reel opens silent. |
| `segments` | Array of `{start, end, text}` timestamped chunks (subtitle-ready). |
| `srt` / `vtt` | The transcript as ready-made SubRip and WebVTT subtitle text. |
| `srtFileUrl` / `vttFileUrl` | Direct download links to the `.srt` / `.vtt` files. |
| `billedMinutes` | Minutes billed for this Reel (per started minute, min 1, max 5). |
| `language` | Detected (or specified) spoken language. |
| `username` / `fullName` | Creator handle and display name. |
| `caption` | The Reel's written caption. |
| `likeCount` / `commentCount` | Engagement metrics when available. |
| `durationSec` | Video length in seconds. |
| `transcribedAt` | UTC timestamp of transcription. |

### FAQ

**How is it billed?** $0.003 per started minute of video, minimum 1 minute per Reel, plus one $0.01 run start (2 GB) per run. A 20-second Reel bills 1 minute; a 3:10 Reel bills 4. Billing is capped at 5 minutes per video, so even a very long video never bills more than 5 minutes. Skipped items (private, image-only, over your duration limit) are never charged.

**Can I feed it the output of another scraper?** Yes. Put the finished run's default dataset id in `datasetId` (or paste rows into `datasetItems`); every field is scanned for Reel links. On a schedule, add a `watchlistId` with `newReelsOnly` so the same Reels are not transcribed and billed again.

**Can I transcribe many Reels in one run?** Yes, batching is native. Paste any number of Reel URLs and the run returns one combined dataset. Competing actors take one URL per run, which turns a 50-Reel job into 50 runs.

**Do I need an Instagram account or cookies?** No. The actor works on public Reels without any login.

**Can I get subtitle files?** Yes. Every row carries the full `srt` and `vtt` text plus `srtFileUrl` / `vttFileUrl` download links you can drop straight into CapCut, Premiere, DaVinci Resolve or Instagram's caption upload.

**Why not just read Instagram's captions?** Instagram does not expose a caption track to logged-out clients. This actor transcribes the actual audio, so you get text even for Reels the creator never captioned.

**Does it depend on an external transcription service?** No. Whisper runs inside the actor on Apify's own compute, so there is no third-party transcript API that can run out of credits, change pricing or throttle your batch mid-run.

**What about regular posts or IGTV?** This actor is Reels-only by design. For `/p/` posts and `/tv/` IGTV use [Instagram Transcript Scraper](https://apify.com/memo23/instagram-transcript-scraper), which covers all three formats.

**Which languages are supported?** 30+ via Whisper. Set `language` for best speed and accuracy, or use `auto`.

**Why is `tiny` the default model?** It is ~5× faster than larger models and reliable on Apify's CPU. Use `base`/`small` for higher accuracy on clear speech; they are slower and can time out on long videos.

### Support

- **Found a bug or need a new field?** Open a ticket on the **Issues** tab of this actor — it's the fastest way to reach me and I actively maintain this scraper.
- **Email:** <muhamed.didovic@gmail.com>
- **Website:** [muhamed-didovic.github.io](https://muhamed-didovic.github.io/)

### Additional Services

Need something beyond the standard output? I build and maintain custom scrapers and data pipelines. Happy to help with:

- Transcripts from other platforms (TikTok, YouTube, Douyin) in the same output shape
- Scheduled, incremental transcript feeds wired into your CMS, data warehouse, or vector store
- Custom fields, summaries, translations, or export formats tailored to your workflow
- Private or dedicated actors for high-volume or compliance-sensitive use

Reach out via the Issues tab or email and describe what you need.

### Explore More Scrapers

More of my actors in the same space:

- [Instagram Transcript Scraper](https://apify.com/memo23/instagram-transcript-scraper) — the full-format sibling: Reels **plus** `/p/` posts and IGTV, flat per-video pricing
- [Social Video Transcript Scraper](https://apify.com/memo23/tiktok-profile-videos-cheerio) — transcribe TikTok **and** Instagram videos in one run, same Whisper pipeline
- [YouTube Shorts Scraper](https://apify.com/memo23/youtube-shorts-scraper) — Shorts metadata at scale
- [Instagram Profile Scraper](https://apify.com/memo23/apify-instagram-profile-scraper-ppe) — profiles, followers, bio and contact data

Browse the full catalog of job boards, business directories, review sites and social platforms on my profile: [memo23 on Apify](https://apify.com/memo23).

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/instagram-reel-transcript-scraper`).

**Purpose:** Transcribe public Instagram Reels to text with on-device Whisper AI, returning one row per Reel with metadata plus a full transcript, timestamped segments and SRT/VTT subtitle files.

**Minimal input:**

```json
{
    "startUrls": [
        { "url": "https://www.instagram.com/reel/Dabg9j1xNHM/" }
    ],
    "maxItems": 5
}
```

**Output:** one row per Reel — id, shortcode, url, username, userId, fullName, caption, durationSec, thumbnailUrl, timestamp, uploadDate, likeCount, commentCount, viewCount, isVideo, transcript, language, segments \[{ start, end, text }], srt, vtt, srtFileUrl, vttFileUrl, billedMinutes, transcriptSource, whisperModel, transcribedAt.

**Behaviors an agent should know:**

- Only public `/reel/` and `/reels/` URLs work; posts (`/p/`) and IGTV (`/tv/`) are skipped with a pointer to `memo23/instagram-transcript-scraper`.
- Always set `maxItems`; transcription is the slow, billed step, so start small.
- Billing is per started minute of video (`billedMinutes` in each row): minimum 1, hard cap 5 per video. Skipped items are not charged.
- Batch URLs freely; one run handles the whole list.
- `whisperModel` is `tiny` (default, fastest) / `base` / `small`; `base`/`small` are more accurate but slower and can time out on long videos.
- `language` accepts an ISO code (`en`, `es`, `ar`) or `auto`; setting it is faster and more accurate than auto-detect.
- `maxDurationSec` (default 300) skips videos longer than the limit; `includeSegments` toggles the timestamped `segments` array.

### ⚠️ Disclaimer

This actor collects only publicly available data from Instagram and is intended for lawful uses such as research, accessibility and content analysis. You are responsible for how you use the output, including compliance with Instagram's Terms of Service, applicable copyright, and data-protection laws (e.g. GDPR/CCPA) where relevant. Do not use transcripts to infringe copyright or process personal data unlawfully.

### SEO Keywords

Instagram reel transcript, reel to text, Instagram reel transcript extractor, reel transcript API, transcribe Instagram reels, Instagram reels to text converter, reel speech to text, Instagram reel captions extractor, reel subtitles generator, reel SRT file, reel VTT subtitles, Whisper Instagram transcription, Instagram reel audio to text, bulk reel transcription, Instagram reel hook analysis, extract text from Instagram reels, Instagram video transcription API, Instagram content analysis, reel transcription for LLMs, Instagram NLP dataset, influencer content research, no-code Instagram reel scraper.

# Actor input Schema

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

One or more Instagram <b>Reel</b> URLs (/reel/ or /reels/), e.g. <code>https://www.instagram.com/reel/Dabg9j1xNHM/</code>. Each Reel's audio is downloaded and transcribed. Other Instagram URLs (posts, IGTV) are skipped.

## `datasetId` (type: `string`):

Default dataset ID of a finished Instagram scraper run. Every row is deep-scanned for instagram.com/reel URLs, so the output of memo23/instagram-reel-scraper, instagram-reels-search-scraper, instagram-hashtag-scraper or the official apify/instagram-scraper can feed this actor directly.

## `datasetItems` (type: `array`):

Paste rows from an Instagram scraper instead of chaining by ID. Any field holding an instagram.com/reel or /reels/ URL is picked up.

## `watchlistId` (type: `string`):

Named key-value store that remembers which Reels this run already transcribed. Use the same id on a schedule (for example <code>nasa-daily</code>) and later runs skip them, so a Reel is never billed twice. Shares its format with memo23/instagram-transcript-scraper, so one watchlist can serve both. Letters, numbers, hyphens, underscores.

## `newReelsOnly` (type: `boolean`):

When enabled, Reels already stored on the Watchlist ID are left out of the run and the dataset. Requires <code>watchlistId</code>. Default: false.

## `whisperModel` (type: `string`):

<b>tiny</b> (default) is ~5× faster and reliable on Apify's CPU. <b>base</b>/<b>small</b> are more accurate but slower and can time out on longer videos.

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

Spoken language of the videos as an ISO code (e.g. <code>en</code>, <code>es</code>, <code>ar</code>), or <code>auto</code> to let Whisper detect it per video. Setting the correct language is faster and more accurate than auto-detect.

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

When enabled (default), each row includes a <code>segments</code> array of <code>{start, end, text}</code> chunks (subtitle-style timings) in addition to the full <code>transcript</code> string. Disable for a smaller, text-only output.

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

Maximum number of Reels to transcribe this run. Transcription is the slow/costly step, so start small.

## `maxDurationSec` (type: `integer`):

Videos longer than this are skipped (a guard so one very long video can't burn minutes of compute). Default 300 (5 min); set 0 to disable.

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

How many videos to transcribe in parallel. Each Whisper pass is CPU-heavy, so 1–2 is safest on standard Apify runners; higher can time out.

## `proxy` (type: `object`):

Paid runs use the house residential pool automatically, so this can be left alone. Set it only if you need a specific country or want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.instagram.com/reel/Dabg9j1xNHM/"
    }
  ],
  "newReelsOnly": false,
  "whisperModel": "tiny",
  "language": "auto",
  "includeSegments": true,
  "maxItems": 25,
  "maxDurationSec": 300,
  "maxConcurrency": 2,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All transcribed Reels in the default dataset. Each row carries url, shortcode, username, fullName, caption, durationSec, transcript, language, segments, srt, vtt, srtFileUrl, vttFileUrl, transcriptSource, whisperModel, transcribedAt, likeCount and commentCount.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.instagram.com/reel/Dabg9j1xNHM/"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/instagram-reel-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 = {
    "startUrls": [{ "url": "https://www.instagram.com/reel/Dabg9j1xNHM/" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/instagram-reel-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 '{
  "startUrls": [
    {
      "url": "https://www.instagram.com/reel/Dabg9j1xNHM/"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/instagram-reel-transcript-scraper --silent --output-dataset

```

## MCP server setup

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