Instagram Reels Transcript Scraper: Speech to Text avatar

Instagram Reels Transcript Scraper: Speech to Text

Pricing

from $8.00 / 1,000 reel transcribeds

Go to Apify Store
Instagram Reels Transcript Scraper: Speech to Text

Instagram Reels Transcript Scraper: Speech to Text

Transcribe Instagram reels to text, timestamped segments, SRT and VTT from reel URLs or a profile's newest reels, logged out. Music-only, private, removed and unsupported-language reels are never charged.

Pricing

from $8.00 / 1,000 reel transcribeds

Rating

0.0

(0)

Developer

Vanja V

Vanja V

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Turn Instagram reels into text. Paste reel links or profile handles and get each reel's spoken words as plain text, timestamped segments, SRT and WebVTT subtitles, with the caption, posting time and like count. No Instagram account or cookies needed.

$0.008 per transcribed reel up to 3 minutes, plus $0.003 for each started minute beyond that. No start fee. Music-only reels, photo posts, private or removed reels and reels in an unsupported language cost nothing.

Output rows from a real run: reel code, account, status, language, length, transcript, and the reason a reel wasn't charged

What it's for

  • Repurpose video into text. Turn your own or a client's reels into blog posts, newsletters, captions or show notes.
  • Study what works in a niche. Pull a creator's newest reels and read what they say, next to likes and posting time.
  • Subtitles. Get SRT or VTT files ready to load into a video editor or upload with a re-post.
  • Search and analysis. Feed transcripts to an LLM, a search index or a spreadsheet.
  • Give an AI agent Instagram video content, through Apify's MCP server or the API (examples below).

Example

Input:

{
"profiles": ["natgeo"],
"maxReelsPerProfile": 5
}

One output row (shortened):

{
"url": "https://www.instagram.com/reel/De1S3KpCXf0/",
"shortcode": "De1S3KpCXf0",
"profile": "natgeo",
"ownerUsername": "natgeo",
"caption": "…@joelsartore loves these little creatures, and so do we…",
"postedAt": "2026-10-23T10:01:35Z",
"durationSec": 23.75,
"viewCount": null,
"likeCount": 67508,
"status": "ok",
"language": "en",
"languageProbability": 0.999,
"text": "You are looking at nudibranx. You've never seen anything that crazy looking? Every color in the rainbow. These are marine snails basically that have lost their shells over time…",
"segments": [
{ "start": 0, "end": 2, "text": "You are looking at nudibranx." },
{ "start": 2, "end": 3.76, "text": "You've never seen anything that crazy looking?" }
],
"srt": "1\n00:00:00,000 --> 00:00:02,000\nYou are looking at nudibranx.\n\n2\n…",
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:02.000\nYou are looking at nudibranx.\n\n…",
"error": null
}

What you get

FieldWhat it is
url, shortcodeReel link and Instagram's short code
profileThe profile from your input this reel came from; null for reel links you gave directly
ownerUsernameAccount that posted the reel (a collab reel on a profile can belong to another account)
caption, postedAtCaption and posting time (UTC)
durationSecAudio length in seconds
viewCount, likeCountCounts when Instagram shows them to logged-out visitors
statusok or the reason there's no transcript (below)
language, languageProbabilitySpoken language and detection confidence (null when you set the language)
textFull transcript
segmentsTranscript in timestamped pieces: start, end (seconds), text
srt, vttSubtitles in SRT and WebVTT
errorWhy there's no transcript, in a plain sentence

Every reel gets a row, including the ones that fail, so you can see what happened to each link. The dataset has two views: Transcripts (reel, account, status, transcript) and Subtitles.

Statuses

StatusMeaningCharged
okTranscribedYes
no_speechSilence or music onlyNo
no_videoA photo or carousel postNo
unsupported_languageAuto-detect found a language outside the supported list; language shows whichNo
private_or_removedThe reel is private, deleted or the link is wrongNo
login_requiredInstagram showed this reel or profile only to logged-in visitorsNo
unreachableInstagram kept refusing the request after retriesNo
too_longLonger than your Longest video settingNo
skipped_budgetNot processed because the run reached your maximum costNo
failedSomething else went wrong; error says whatNo

Input

  • Reel URLs: links to reels or video posts (/reel/, /reels/ or /p/). Duplicates are removed.
  • Profiles: handles (natgeo, @natgeo) or profile links. The Actor transcribes the newest reels of each public profile.
  • Reels per profile (default 12, up to 200): how many of the newest reels to take from each profile. A pinned reel counts only if it's among the newest.
  • Language (default auto-detect): English, Spanish, German, Portuguese, French, Italian, Indonesian or Arabic. With auto-detect, reels in any other language are marked unsupported_language. Setting a language skips detection and transcribes every reel in that language.
  • Output formats (default all four): plain text, timestamped segments, SRT, WebVTT. Formats you leave out are null.
  • Longest video (minutes) (default 15, up to 60): longer videos are marked too_long.

You can mix reel links and profiles in one run.

Pricing

Reels (up to 3 minutes each)Price
100$0.80
1,000$8.00
10,000$80.00
  • A reel longer than 3 minutes adds $0.003 for each started minute past 3. A 4-minute reel costs $0.011, and a 10-minute video costs $0.029.
  • Apify's platform usage is included, and there's no start fee.
  • You pay only for ok rows. Every other status is free, so a profile full of music reels costs nothing.
  • To cap what a run can cost, set a maximum cost when you start it (maxTotalChargeUsd in the API). Reels the Actor doesn't get to are listed as skipped_budget, free.

Use it through the API

Run it and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/wheaten_steelpan~instagram-reel-transcript-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reelUrls": ["https://www.instagram.com/reel/DehZj9wggt0/"], "outputFormats": ["text"]}'

That call waits at most 5 minutes. For bigger runs, the Apify clients start the run and wait for it to finish.

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wheaten_steelpan/instagram-reel-transcript-scraper').call({
profiles: ['natgeo', 'nasa'],
maxReelsPerProfile: 10,
outputFormats: ['text', 'srt'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const reel of items) console.log(reel.url, reel.status, reel.text);

Python (pip install apify-client):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wheaten_steelpan/instagram-reel-transcript-scraper").call(run_input={
"reelUrls": ["https://www.instagram.com/reel/DehZj9wggt0/"],
"language": "en",
})
for reel in client.dataset(run["defaultDatasetId"]).iterate_items():
print(reel["url"], reel["status"], reel["text"])

Use it from an AI agent (MCP)

Add Apify's MCP server with this Actor as its tool, for example in Claude Desktop, Cursor or VS Code:

{
"mcpServers": {
"instagram-transcripts": {
"url": "https://mcp.apify.com?tools=wheaten_steelpan/instagram-reel-transcript-scraper"
}
}
}

Clients that support OAuth sign you in to Apify on first use. Other clients can send your token in a header: "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.

Speed and limits

  • In our tests on Apify, 52 reels took about 11 minutes, roughly 12 seconds per reel. Rows appear in the dataset as each reel finishes.
  • Every run downloads and transcribes each reel fresh, with no cached results.
  • Instagram reels carry no subtitle tracks for logged-out visitors, so the Actor transcribes the audio itself with OpenAI's Whisper model. Clear speech comes out well. Rare words and names can be misspelled (in the example, "nudibranchs" became "nudibranx"), and heavy background music lowers accuracy.
  • Reels with music and a few spoken words can come back as no_speech when the speech is too short or unclear to transcribe reliably. That keeps song lyrics and noise out of your data, and those reels are free.
  • The Actor reads Instagram logged out. Some accounts and reels are shown only to logged-in visitors; those come back as login_required, free.
  • Profiles list reels newest first. Profile mode needs a public profile.
  • Captions, likes and views are what Instagram shows logged-out visitors at run time. Instagram often hides views.

Notes

  • This Actor reads public Instagram pages and isn't affiliated with Meta or Instagram.
  • Transcripts and captions contain personal data (usernames, what people say). You're responsible for using the data lawfully, including data-protection laws such as the GDPR where they apply, and for respecting the creators' copyright when you republish their words.
  • Found a problem or need a field or language? Open an issue in the Issues tab.