Instagram Reels Transcript — Reel to Text + Stats avatar

Instagram Reels Transcript — Reel to Text + Stats

Pricing

from $7.00 / 1,000 reel transcript (fast)s

Go to Apify Store
Instagram Reels Transcript — Reel to Text + Stats

Instagram Reels Transcript — Reel to Text + Stats

Transcribe Instagram Reels from their URLs with Whisper: spoken text, timestamps, SRT, 99 languages, plus caption, views, likes, comments and creator. One flat row per reel, never null. Only reels with speech are billed.

Pricing

from $7.00 / 1,000 reel transcript (fast)s

Rating

0.0

(0)

Developer

Sumitr Mardy

Sumitr Mardy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Give it Instagram reel links, get back what is said in each reel as text, with timestamps, optional SRT/VTT subtitles and the spoken language, plus the reel's caption, views, likes, comments, audio track and creator. One flat row per reel, every field always present, never null. Built for content research, repurposing and AI agents.

$10 per 1,000 reels (fast) or $20 (accurate), less on higher Apify plans. Photo posts, music-only reels, reels without speech and failures are free.

Why this one

  • Pay only for reels with speech. Reels set to a licensed song are detected from Instagram's own audio attribution and skipped before any download (free, and you can turn the skip off). Reels where Whisper hears no speech are free too.
  • Transcript and stats in one row. Views, likes, comments, caption, creator, follower count and the audio track come with every transcript, no second actor needed.
  • One row for every URL. A deleted post, a photo post or a profile link instead of a reel still comes back as a row with a machine-readable subStatus.
  • Two quality tiers. fast (Whisper base) for clear talking-head reels, accurate (Whisper small) for names, slang, accents and speech over music.
  • Measured on Apify: a 9-second reel in 2.6 s, a 71-second NASA reel in under 8 s; a Nike reel detected as Spanish automatically. No proxy is needed to read public reels, so there is no proxy cost hidden in the price.

Input

FieldDefaultWhat it does
urls—Reel or post links (instagram.com/reel/…, /p/…, /tv/…) or bare shortcodes. Required. Profile links are not supported yet.
qualityfastfast = Whisper base. accurate = Whisper small.
languageautoISO code (en, es, pt, hi…). Helps on very short reels.
skipMusicOnlytrueSkip reels whose audio is a licensed song (free). Turn off for lyrics or voice-over on music.
includeSegmentstruesegments[] with start/end seconds per phrase.
includeSubtitlesfalsesrt and vtt subtitle text.
maxMinutesPerVideo10Caps long video posts (max 30).
{
"urls": ["https://www.instagram.com/p/DS46KJNjva9/", "https://www.instagram.com/reel/Da_ZgEaPvCN/"],
"quality": "fast"
}

Output

One row per URL, in completion order. A real row (shortened):

{
"inputIndex": 0,
"url": "https://www.instagram.com/p/DS46KJNjva9/",
"shortcode": "DS46KJNjva9",
"status": "ok",
"subStatus": "complete",
"error": "",
"text": "One of my favorite quotes from Zig Ziglar is, you don't have to be great to start, but you have to start to be great.",
"charCount": 117, "wordCount": 25,
"language": "en", "languageProbability": 0.984,
"segments": [{ "start": 0, "end": 2.8, "text": "One of my favorite quotes from Zig Ziglar is," }],
"srt": "", "vtt": "",
"videoDurationSeconds": 8.81, "transcribedSeconds": 8.8, "billedUnits": 1,
"quality": "fast", "model": "base",
"caption": "2026 mindset ✨ It’s simple really. You’ll never become great at something you don’t try…",
"ownerUsername": "jayshetty", "ownerVerified": true, "ownerFollowers": 18908765,
"viewCount": 440217, "likeCount": 50879, "commentCount": 342,
"productType": "clips", "isVideo": true,
"musicArtist": "jayshetty", "musicSong": "Original audio", "usesOriginalAudio": true,
"thumbnailUrl": "https://scontent…cdninstagram.com/…jpg",
"videoUrl": "https://scontent…cdninstagram.com/…mp4",
"notes": [],
"processingMs": 2631
}

Strings are "" when absent, numbers 0, arrays []. No field is ever null or missing. Stats are as Instagram shows them at scrape time; videoUrl and thumbnailUrl are signed CDN links that expire within hours.

Status

statussubStatusCharged
okcomplete, or truncated (video longer than maxMinutesPerVideo)billedUnits
no_speechmusic_only_skipped (licensed song), no_speech_detectedfree
no_videonot_a_video: a photo or carousel post; metadata is still returnedfree
failedinvalid_url (e.g. a profile link), not_found (deleted/private), no_post_data, blocked, network_error, download_error, download_timeout, too_large, corrupt_media, no_audio_track, empty_audio, cost_limit_reached, free_work_limit, transcription_errorfree

Pricing

EventPriceWhen
reel-transcript$0.010 (free plan), $0.009 Bronze, $0.008 Silver, $0.007 Goldquality: "fast", a reel with speech
reel-transcript-accurate$0.020 (free plan), $0.018 Bronze, $0.016 Silver, $0.014 Goldquality: "accurate"

One event per reel, or per started 3 minutes for longer video posts (billedUnits). The only other charge is a start fee of $0.0005 per GB per run ($0.002 at the default 4 GB). No platform usage on top.

Fair use

Free rows cost compute, so a run that spends its budget on reels that fail or have no speech stops starting new ones; the rest come back free_work_limit, uncharged. Up to 5,000 URLs per run.

What it does not do (yet)

  • No profile scraping. Give reel links, not @handles; listing a profile's reels needs a logged-in session, which this actor does not use.
  • Public posts only. Private, age-restricted and deleted posts fail as not_found.
  • Speech over loud music can trip the fast tier (repeated or misheard phrases). Use accurate for music-heavy reels.
  • No on-screen text (OCR) and no speaker labels.

Use it from AI agents (MCP)

This Actor is a tool on the Apify MCP server, so Claude, Cursor, VS Code or any MCP client can call it to read what a reel says. Load only this tool: a short tool list keeps the agent from picking the wrong one.

Recommended: hosted server, OAuth sign-in (nothing secret on disk).

{
"mcpServers": {
"instagram-reels-transcript": {
"url": "https://mcp.apify.com?tools=sumitr_mardy/instagram-reels-transcript"
}
}
}

With an API token instead:

{
"mcpServers": {
"instagram-reels-transcript": {
"url": "https://mcp.apify.com?tools=sumitr_mardy/instagram-reels-transcript",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Local server (stdio):

{
"mcpServers": {
"instagram-reels-transcript": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server@latest", "--tools", "sumitr_mardy/instagram-reels-transcript"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}

The hosted server also gives the agent this Actor's output schema. Get a token at Apify Console → API & Integrations, and never commit it.

Tips for agents:

  • "What is this reel about?": pass the link, read text and caption together.
  • "Which hooks work?": compare the first segments of reels against viewCount.
  • Check status first: no_speech with music_only_skipped means the reel is set to a song.
  • A few reels finish well inside the MCP call-actor 45-second wait.

Use it from code

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("sumitr_mardy/instagram-reels-transcript").call(run_input={
"urls": ["https://www.instagram.com/p/DS46KJNjva9/"],
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["ownerUsername"], row["viewCount"], row["status"], row["text"][:100])
curl -X POST "https://api.apify.com/v2/acts/sumitr_mardy~instagram-reels-transcript/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://www.instagram.com/p/DS46KJNjva9/"]}'

This actor is not affiliated with or endorsed by Instagram or Meta.