Extract AI transcripts from public Instagram Reels and video posts. Add Reel URLs, run the Actor, and export transcript text, timestamped segments, media metadata, and per-URL status rows for research, repurposing, accessibility, compliance review, and content analysis workflows.
What it does
- Transcribes public Instagram Reels/videos into readable text
- Includes timestamped transcript segments when ASR returns segment timing
- Preserves one dataset row per input URL, including classified failures
- Normalizes Instagram URLs and deduplicates repeated inputs
- Reports duration, media bytes, model/source, and scrape timestamp for QA and cost tracking
Who is it for
- Social media teams turning Reels into blog posts, captions, summaries, and briefs
- Researchers reviewing creator messaging, public campaigns, or trends
- Accessibility and compliance teams that need text from public video content
- Developers and AI agents that need transcript text as structured data
Input example
{
"startUrls": [
{ "url": "https://www.instagram.com/reel/DPR-1mcCAqa/" }
],
"maxItems": 1,
"language": "en",
"includeSegments": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
Input settings
| Key | Type | Description |
|---|---|---|
startUrls |
array | Public Instagram Reel/video/post URLs to transcribe. |
maxItems |
integer | Maximum unique URLs to process from the input list. |
language |
string | en for English baseline transcription or auto for auto-detect mode. |
includeSegments |
boolean | Keeps timestamped segment objects in the dataset output. |
proxyConfiguration |
object | Apify Proxy settings. Residential proxy is recommended for Instagram. |
Output example
{
"inputUrl": "https://www.instagram.com/reel/DPR-1mcCAqa/",
"canonicalUrl": "https://www.instagram.com/reel/DPR-1mcCAqa/",
"shortcode": "DPR-1mcCAqa",
"status": "succeeded",
"errorType": null,
"errorMessage": null,
"transcriptText": "When you wake up with all the dreams... You might have a thousand problems until you have one.",
"segments": [
{ "id": 1, "startSeconds": 0, "endSeconds": 5.12, "text": "When you wake up with all the dreams..." }
],
"language": "en",
"requestedLanguage": "en",
"transcriptionSource": "logged-out Instagram browser payload + MP4 download + whisper.cpp",
"asrModel": "ggml-base.en.bin",
"durationSeconds": 47.188,
"ownerUsername": null,
"ownerId": null,
"caption": null,
"mediaType": "clips/reel",
"mediaId": null,
"videoUrlFound": true,
"videoContentLength": 5596476,
"scrapedAt": "2026-08-02T18:58:12.560Z",
"metadata": { "httpStatus": 200, "htmlBytes": 733429 }
}
Input recipes
- Single Reel transcript: set one public Reel URL and
maxItemsto1. - Small batch review: provide 3-10 public Reel URLs and keep
languageasenfor English speech. - Failure audit: include known private/deleted/unsupported URLs to receive classified failure rows without losing successful transcripts from the same run.
Limits and troubleshooting
- Only public Instagram Reel/video URLs are supported. Private, deleted, unavailable, or unsupported URLs return failure rows.
- Transcript quality depends on audio clarity, speech language, background music, and speaker overlap.
- Very long videos take longer because audio must be downloaded and transcribed.
- Instagram may temporarily throttle anonymous access; retry later or keep Apify Proxy enabled.
- No native Instagram transcript is required; the Actor transcribes public media audio.
API usage
JavaScript:
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/instagram-ai-transcript-extractor').call({
startUrls: [{ url: 'https://www.instagram.com/reel/DPR-1mcCAqa/' }],
maxItems: 1,
language: 'en',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].transcriptText);
Python:
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/instagram-ai-transcript-extractor').call(run_input={
'startUrls': [{ 'url': 'https://www.instagram.com/reel/DPR-1mcCAqa/' }],
'maxItems': 1,
'language': 'en',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0]['transcriptText'])
cURL:
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~instagram-ai-transcript-extractor/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://www.instagram.com/reel/DPR-1mcCAqa/"}],"maxItems":1,"language":"en"}'
MCP and agent usage
Use this Actor from agents through Apify MCP with:
https://mcp.apify.com/?tools=fetch_cat/instagram-ai-transcript-extractor
Claude CLI example:
claude mcp add apify-instagram-transcripts https://mcp.apify.com/?tools=fetch_cat/instagram-ai-transcript-extractor
MCP JSON config example:
{
"mcpServers": {
"apify-instagram-transcripts": {
"url": "https://mcp.apify.com/?tools=fetch_cat/instagram-ai-transcript-extractor"
}
}
}
Example prompts:
- "Transcribe these three public Instagram Reel URLs and return transcript text plus timestamps."
- "Run the Instagram AI Transcript Extractor and summarize only rows where
statusissucceeded." - "Check failed rows and group them by
errorType."
Support
Questions or issues? Open an issue on the Actor page in Apify Console and include the run ID plus a sample URL that reproduces the behavior.