# Instagram Reels Transcript Scraper: Reels to Text, No Login (`zaiq/instagram-transcript-scraper`) Actor

Turn Instagram reels and videos into text: what is said in every reel of a public account, or in any reel by its link, plus caption, plays, likes, comments, date and video link. Any language. No login, no cookies. Pay per post and per transcribed minute.

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

## Pricing

from $2.40 / 1,000 posts

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 Reels Transcript Scraper: reels to text, no login

Turn **Instagram reels and videos into text**. Give it public accounts or reel links and get back **what is said in every reel**, word for word and in the language it is spoken in, together with each post's **caption, plays, likes, comment count, date, hashtags, mentions, audio and video link**. No Instagram account, no cookies, no login.

It is built for people who need the words, not just the numbers: content teams studying what works, brands checking what creators say about them, researchers and AI pipelines that need reel content as text.

### What you get

| Field | What it holds |
|---|---|
| `transcript` | Everything said in the reel or video, word for word (empty for music-only reels) |
| `hook`, `hookStartSeconds` | The opening line: what is said in the first 3 seconds of speech, run on to the end of its sentence, and the second it starts |
| `segments`, `srt` (Timestamps on) | Each sentence with its start and end in seconds, and an SRT subtitle file |
| `translation` (optional) | The transcript in the language you pick, with `transcriptLanguage` and `translationLanguage` |
| `caption`, `hashtags`, `mentions` | The post's own text |
| `videoPlayCount`, `likesCount`, `commentsCount` | Engagement as shown publicly |
| `timestamp`, `type`, `videoDuration` | When it was posted, Video/Image/Sidecar, length in seconds |
| `url`, `shortCode`, `videoUrl`, `displayUrl` | Links to the post, the video file and the cover image |
| `ownerUsername`, `coauthors`, `taggedUsers` | Who posted it and who is in it |
| `audio`, `locationName` | The sound used and the tagged place |
| Profile row | Name, bio, links, followers, following, verified, private or not |
| `comments` (optional) | The first ~15 comments of each post |

### What people use it for

- **Content research:** read what the best reels in your niche actually say, then reuse the hooks and structure
- **Creator and influencer vetting:** check what a creator says on camera before you pay them
- **Brand monitoring:** find out what creators say about your brand or product in their videos
- **Repurposing:** turn your own reels into blog posts, captions, threads and newsletters
- **Competitor analysis:** track what a competitor's reels promise, every week on a schedule
- **AI and research datasets:** feed reel transcripts to an AI summariser, a classifier or a search index

### How to use it

1. Add one or more public **accounts** (username, @handle or profile link) and/or **reel or post links**.
2. Choose how many of each account's latest posts to read, and keep **Transcripts** on.
3. Click **Start**. A few reels take under a minute; a hundred take a few minutes.
4. Download the results as JSON, CSV or Excel, or connect them to Sheets, Make, Zapier or your app.

### Input

| Field | Example | Notes |
|---|---|---|
| Accounts | `username` | Public accounts; their latest posts and reels |
| Reel or post links | `https://www.instagram.com/reel/...` | Any public reel or post |
| Latest posts per account | `12` | Up to 200 |
| Transcripts | on | Speech written down, any language |
| Timestamps and subtitles | on | Segments and an SRT file; no extra charge |
| Translate transcripts to | English | Optional, 19 languages; no extra charge from this Actor |
| First comments | off | Adds the first ~15 comments, free |

### Output

Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):

```json
{
  "kind": "post",
  "type": "Video",
  "url": "https://www.instagram.com/reel/DdG4RIxIPyf/",
  "ownerUsername": "example.creator",
  "timestamp": "2026-09-10T13:00:14+00:00",
  "videoDuration": 72.61,
  "videoPlayCount": 3348780,
  "likesCount": 80007,
  "commentsCount": 584,
  "caption": "Welcome to Africa 🌍 … takes you deep into the heart of our wildest continent…",
  "transcript": "Welcome to Africa. Welcome to Earth's wild home. See a new side to animals you know, and meet some you've neve…",
  "transcriptLanguage": "en",
  "hook": "Welcome",
  "hookStartSeconds": 3.0,
  "segments": [
    {
      "start": 3.0,
      "end": 4.1,
      "text": "Welcome"
    },
    {
      "start": 5.9,
      "end": 7.3,
      "text": "to Africa."
    },
    {
      "start": 8.0,
      "end": 9.2,
      "text": "Welcome"
    }
  ],
  "srt": "1\n00:00:03,000 --> 00:00:04,100\nWelcome\n…",
  "translation": "Bienvenido a África. Bienvenido al hogar salvaje de la Tierra. Descubre una nuev…",
  "translationLanguage": "Spanish",
  "videoUrl": "https://instagram.fna.fbcdn.net/...mp4"
}
```

A record named `SUMMARY` in the run's key-value store says what each account or link returned, with notes (for example a private account), what was charged and how much traffic the run used. The example row is from a run on 17 October 2026 (account name and caption shortened): a 73-second reel, written down in 11 timed segments with a Spanish translation; 1 post and 2 transcript minutes were charged.

### Pricing

- **$0.003 per post** (each reel, video, image post or profile row returned)
- **$0.005 per started minute of speech** written down, with timestamps, SRT, the opening line and the translation (only with Transcripts on)
- Music-only reels, image posts and missing or private accounts cost nothing for transcripts
- The AI model that writes the speech down (Google's Gemini Flash) is billed by Apify at its exact cost: about $0.004 a minute with timestamps on paid Apify plans (measured 17 October 2026); Apify charges free-plan accounts 10 times that

What typical jobs cost at the list price:

| Job | Cost |
|---|---|
| 10 reels of about 1 minute, with transcripts | about $0.08 |
| An account's latest 50 posts, half of them 1-minute reels | about $0.28 |
| 100 reel links of 30-60 seconds | about $0.80 |

On Apify's Scale and Business plans the per-event prices are lower (Store discounts). Set **Maximum cost per run** and the Actor stops cleanly when it is reached: you never pay more than that.

### Tips

- Use **reel links** when you already know the videos: it is faster and you pay only for those.
- Leave **Transcripts** off for a quick engagement export, then run again on the reels you care about.
- Schedule it weekly on a list of accounts to build a running library of what they say.
- Pair it with an AI summariser to turn 100 transcripts into one page of patterns.

### Use it through the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zaiq/instagram-transcript-scraper").call(run_input={"profiles": ["<instagram username>"], "maxPostsPerAccount": 10, "transcripts": true})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

**JavaScript**

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zaiq/instagram-transcript-scraper').call({"profiles": ["<instagram username>"], "maxPostsPerAccount": 10, "transcripts": true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**HTTP (one call, results back)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/zaiq~instagram-transcript-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"profiles": ["<instagram username>"], "maxPostsPerAccount": 10, "transcripts": true}'
```

### Integrations and schedules

- **Schedules:** run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- **Make, Zapier, n8n, Google Sheets, Slack, Airtable:** connect it through Apify's integrations, or send each finished run to a **webhook**.
- **Datasets:** results stay in the run's dataset; export them or read them by API whenever you need them.

### Use it with AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "the transcripts of this account's last 10 reels". AI agents can also pay for runs directly through Apify's agentic payments.

### Limits

- Public accounts and posts only; private accounts return nothing (and cost nothing).
- Instagram shows signed-out visitors the first ~15 comments of a post.
- Videos up to 30 minutes are written down in full: long speech goes to the AI in 2-minute pieces, so it is not cut off.
- Public data only: you are responsible for how you use it under Instagram's terms and the privacy laws that apply to you.

### FAQ

**Do I need an Instagram account or cookies?**

No. It reads public pages signed out, from residential addresses.

**Which languages work?**

Any language: the speech is written down in the language spoken. Ask an AI tool to translate it if you need English.

**How accurate are the transcripts?**

They are written by Google's newest Gemini Flash model from the reel's own audio track, word for word. Music and heavy background noise can drop words.

**Is there a limit on reels?**

Up to 200 latest posts per account per run, and as many reel links as you like.

**Why are some transcripts empty?**

The reel has no speech (only music), or it is an image post.

**Can I get older posts?**

Yes, raise Latest posts per account. Instagram serves them 12 at a time.

### Related Actors from Zaiq

- [tiktok-transcript-scraper](https://apify.com/zaiq/tiktok-transcript-scraper): the same for TikTok videos
- [youtube-transcript-scraper](https://apify.com/zaiq/youtube-transcript-scraper): YouTube transcripts and subtitles
- [x-video-transcript-scraper](https://apify.com/zaiq/x-video-transcript-scraper): X posts and what is said in their videos
- [facebook-ads-library-scraper](https://apify.com/zaiq/facebook-ads-library-scraper): the ads behind the reels

### Support

Questions, a site that changed, or a field you need? Open an issue on this Actor's **Issues** tab: we answer there, usually within a day.

***

Also found as: instagram transcript, instagram reel transcript, instagram video to text, reels transcript scraper, instagram transcription api, instagram reels scraper.

# Actor input Schema

## `profiles` (type: `array`):

Public Instagram usernames, @handles or profile links, one per line. Their latest posts and reels are returned.

## `postUrls` (type: `array`):

Instagram reel or post links (or short codes), one per line.

## `maxPostsPerAccount` (type: `integer`):

How many of each account's latest posts and reels.

## `transcripts` (type: `boolean`):

Write down what is said in each reel and video, with its opening line ($0.005 per started minute of speech; music-only reels are free).

## `timestamps` (type: `boolean`):

Split each transcript into timed segments (start and end in seconds) and add an SRT subtitle file. No extra charge.

## `translateTo` (type: `string`):

Also give each transcript in this language (skipped when it is already in it). No extra charge from this Actor; the AI model's own cost is billed by Apify, a fraction of a cent a transcript.

## `comments` (type: `boolean`):

Include each post's first ~15 comments (no extra charge).

## Actor input object example

```json
{
  "profiles": [
    "natgeo"
  ],
  "maxPostsPerAccount": 12,
  "transcripts": true,
  "timestamps": true,
  "translateTo": "",
  "comments": false
}
```

# Actor output Schema

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

Dataset: the results.

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

What each input returned, and notes.

# 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 = {
    "profiles": [
        "natgeo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaiq/instagram-transcript-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "profiles": ["natgeo"] }

# Run the Actor and wait for it to finish
run = client.actor("zaiq/instagram-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 '{
  "profiles": [
    "natgeo"
  ]
}' |
apify call zaiq/instagram-transcript-scraper --silent --output-dataset

```

## MCP server setup

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