Instagram Single Reels Scraper: Transcript Extraction
Pricing
$19.99/month + usage
Instagram Single Reels Scraper: Transcript Extraction
Instagram Single Reels Scraper extracts detailed data from any single public Instagram Reel. Get video URL, captions, audio info, views, likes, comments, and metadata. Ideal for research, content analysis, trend tracking, and workflows needing precise Reel insights.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
14 days ago
Last modified
Categories
Share
Instagram Reel Scraper — Extract Media, Captions & Transcripts
Instagram Single Reels Scraper: Transcript Extraction turns one Instagram Reel URL into structured data — creator info, engagement counts, media URLs, caption language, keywords, and an optional real speech-to-text transcript of the reel's audio. Every response returns typed, normalized JSON — no HTML, no selectors, no parsing. Caption language and keywords run free on every request; the transcript is generated on demand by a self-hosted Whisper model, not by reading any caption track Instagram provides. You'll come away knowing exactly which fields are real and which are AI-generated.
What is Instagram Single Reels Scraper: Transcript Extraction?
Instagram Single Reels Scraper: Transcript Extraction is an Apify Actor that fetches one Instagram Reel per URL, shortcode, or username/shortcode pair and returns its media data, caption analysis, and (optionally) a real audio transcript as a dataset row. It runs fully logged out by default — no Instagram account or session cookie is required — with an optional sessionId input as a fallback only. It is reachable as an HTTP endpoint through the Apify API and through Apify's MCP server, so agent frameworks can call it directly.
- Scrape reel media data — creator identity, engagement counts, video/thumbnail URLs, music metadata
- Scrape caption language and topic keywords — zero extra requests, always on
- Generate a real speech-to-text transcript of the reel's audio — optional, self-hosted Whisper
- Export as JSON, CSV, Excel, or XML
- No proxy management, no login required by default
What data does Instagram Single Reels Scraper: Transcript Extraction collect?
Every run returns three kinds of data per reel: media/engagement data, free caption analysis, and an optional real transcript.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Reel & creator data | owner identity, engagement, media URLs | ownerUsername, ownerFullName, ownerIsVerified, likeCount, commentCount, viewCount, videoUrlBest, thumbnailUrl |
| Caption analysis (free) | detected language, topic keywords | captionText, captionLanguage, captionLanguageConfidence, keywords |
| Audio transcript (optional) | AI speech-to-text of the spoken audio | transcriptText, transcriptLanguage, transcriptConfidence, transcriptDurationSec, transcriptStatus |
| Music & collab signals | trend/rights and sponsorship detection | musicArtistUsername, musicIsOriginalAudio, isPaidPartnership, coauthorsCount, taggedUsersCount |
Need more Instagram data?
If you need to discover reels first rather than scrape one you already have a link for, Instagram Reels Scraper By Hashtag & Keyword Search finds reels by hashtag or keyword before you feed the URLs into this Actor. If you need the full comment thread rather than the small preview sample this Actor returns alongside each reel, Instagram Comments Scraper By Sentiment Analysis pulls complete comment data with sentiment scoring.
Why not build this yourself?
Instagram does not publish a stable, documented endpoint for fetching a single public reel's data or audio by URL, so a DIY script has to reverse-engineer the site's internal web app the same way this Actor does — and that internal surface changes without notice. This Actor's own source history shows one such change already: the reel page stopped shipping usable embedded JSON to logged-out requests, and the fetch mechanism had to be re-derived against a public profile page and Instagram's GraphQL endpoint instead. Maintaining that reverse-engineered path, rotating residential proxies to avoid blocks, and running a local Whisper transcription pipeline (audio download, ffmpeg transcoding, model inference, GPU/CPU fallback) is ongoing engineering work most teams would rather not own. Running the maintained Actor instead means you get a stable output schema without carrying that maintenance burden yourself.
Why do developers and teams scrape Instagram?
For AI engineers and agent builders
A reel's spoken content is often the only place its real information lives — a recipe, a product claim, a tutorial step — and captions alone don't capture it. Requesting generateTranscript=true turns that audio into transcriptText, a plain-text field that indexes directly into a vector store or RAG pipeline alongside captionText and keywords. The output is typed JSON with stable field names, so an agent tool call can pass url, get back transcriptText and captionLanguage, and reason over the content with no HTML-parsing step — useful for building searchable knowledge bases from short-form video at the field level.
For marketers and brand teams
Content and social teams repurposing competitor or influencer reels need the caption, the topic keywords, and ideally the exact words spoken — not just the visible text. Pulling captionText, keywords, and an on-demand transcriptText for a batch of reel URLs turns a watchlist of videos into text assets that can be searched, translated, or rewritten into blog posts and newsletters without re-watching every clip. isPaidPartnership and musicArtistUsername add a quick check for sponsorship disclosure and trending-audio use before featuring or reacting to a reel in a campaign.
For researchers and analysts
Academic and market researchers studying short-form video language, topic trends, or sponsorship disclosure patterns need public data at scale without touching anything login-gated. This Actor only returns what a logged-out visitor can already see on a reel — caption, engagement counts, and (only when requested) an audio transcript — so a batch of public reel URLs can be turned into a dataset of detected languages, keyword frequencies, and paid-partnership flags for a study, without collecting any private or restricted content.
For developers building data products
Products built on top of short-form video data — captioning tools, localization pipelines, or reel-to-blog converters — need a stable, versioned schema more than any single clever field. Because transcriptText, captionLanguage, and the flattened media fields keep the same names and types release to release, a scheduled Apify run can feed a warehouse or downstream API without a reconciliation step every time the Actor is updated, and the always-uncharged errorReason field on failed rows makes it straightforward to detect and retry the reels that didn't resolve.
How to scrape Instagram (step by step)
- Open Instagram Single Reels Scraper: Transcript Extraction on its Apify Store page.
- Provide one or more reel inputs in
reelUrls— a full URL, ausername/shortcodepair, or a bare shortcode. - Optionally set
generateTranscripttotrueand pick awhisperModelsize if you want a real audio transcript; leave itfalsefor the fast, free caption-and-keyword-only path. - Start the run from the Console or via the Apify API.
- Open the Dataset tab to view results, then export as JSON, CSV, Excel, or XML.
What to do when Instagram changes its structure
This Actor is actively maintained: its fetch mechanism has already been rebuilt once after Instagram stopped embedding reel data in logged-out page loads, without changing the output field names or types users depend on. No specific turnaround time is promised for future changes, but the schema is designed to stay stable across maintenance updates.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
reelUrls | No | array | List of Instagram reel inputs — full URL, username/shortcode, or bare shortcode. The base actor's legacy urls field is still accepted if reelUrls is left empty. | ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/", "cristiano/DOEMHa6iPoz"] |
generateTranscript | No | boolean | OFF by default. When ON, downloads the reel's audio (yt-dlp) and transcribes it locally with faster-whisper — a real speech-to-text transcript, not Instagram's accessibilityCaption. Default false. | false |
maxKeywords | No | integer | How many topic/keyword words to extract per caption (zero-request, always runs). Default 10, min 1, max 30. | 10 |
whisperModel | No | string | Whisper model size: tiny (fastest), base (recommended), small (more accurate, slower), medium (most accurate, slowest). Default "base". | "base" |
transcriptLanguage | No | string | ISO 639-1 code (e.g. en, es, pt) to force Whisper's language, or "auto" to auto-detect. Default "auto". | "auto" |
proxyConfiguration | No | object | Proxy settings for the reel data fetch. This Actor always uses the RESIDENTIAL proxy group for reliability regardless of the group selected here — only the chosen country is honored. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"} |
sessionId | No | string | Optional Instagram sessionid cookie value. The fetch runs logged-out by default; supplying this sends it as a Cookie header to recover data on the rare case the logged-out profile page is login-walled. Stored as a secret, never logged. | "" |
No parameters are required — an empty input still fails at runtime with a clear log message if reelUrls (and legacy urls) are both empty.
Example JSON input:
{"reelUrls": ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/","cristiano/DOEMHa6iPoz"],"generateTranscript": true,"maxKeywords": 10,"whisperModel": "base","transcriptLanguage": "auto","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"},"sessionId": ""}
The most common input mistake is turning on generateTranscript and expecting the same run speed as the free path — enabling it adds a real audio download and local Whisper inference per reel, which is noticeably slower than the caption/keyword-only default.
⬆️ Output
Every reel produces one dataset row of typed, normalized JSON, exportable as JSON, CSV, Excel, or XML. The row groups into three distinct kinds of data: reel/creator data, free caption analysis, and an optional real transcript.
Reel & creator data
{"url": "https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/","shortcode": "DOEMHa6iPoz","success": true,"errorReason": null,"ownerUsername": "cristiano","ownerFullName": "Cristiano Ronaldo","ownerId": "173560420","ownerIsVerified": true,"ownerIsPrivate": false,"ownerProfilePicUrl": "https://scontent.cdninstagram.com/...jpg","takenAtIso": "2026-07-10T14:22:00Z","likeCount": 1550000,"commentCount": 19500,"viewCount": 8200000,"commentsFetchedCount": 3,"isPaidPartnership": false,"coauthorsCount": 0,"taggedUsersCount": 2,"videoUrlBest": "https://scontent.cdninstagram.com/...mp4","thumbnailUrl": "https://scontent.cdninstagram.com/...jpg","videoWidth": 1080,"videoHeight": 1920,"hasAudio": true,"mediaType": 2,"musicArtistUsername": "originalsound","musicIsOriginalAudio": true,"musicAssetId": "1234567890123456","accessibilityCaption": null,"proxy_used": "residential","attempts": 1,"scrapedAt": "2026-07-25T00:00:00Z"}
Caption language & keyword analysis (free, always on)
{"captionText": "Great training session with the team ahead of the new season","captionLanguage": "en","captionLanguageConfidence": 0.9999,"keywords": ["training", "session", "team", "season"]}
Audio transcript (optional, self-hosted Whisper)
{"transcriptRequested": true,"transcriptStatus": "success","transcriptText": "Great session today, really happy with how the team is looking ahead of the new season.","transcriptLanguage": "en","transcriptConfidence": 0.9821,"transcriptDurationSec": 14.32,"transcriptSegments": [{"start": 0.0, "end": 3.4, "text": "Great session today,"},{"start": 3.4, "end": 7.1, "text": "really happy with how the team is looking"}],"transcriptError": null}
media_info (the full raw GraphQL media object) and comments (the small preview_comments sample, not the full comment thread) are also included in every row for advanced use, unflattened.
How many results can you scrape with Instagram Single Reels Scraper: Transcript Extraction?
There is no hard cap in the input schema on how many reelUrls you can submit in one run — you provide a finite list of reel inputs, and the Actor processes them one at a time, in order. There's no pagination to configure because this Actor scrapes specific reels you name, not an open-ended feed or search. The Actor waits roughly 1-3 seconds before each fetch attempt and 3 seconds between reels as implemented in the code, and retries up to 3 times on a fresh residential-proxy IP per reel on a soft block before reporting it as failed. Turning on generateTranscript adds a real audio download and local Whisper transcription per reel, which takes longer per item than the caption-only path — there is no published benchmark number for this, since actual time depends on reel length and the whisperModel size chosen.
Integrate Instagram Single Reels Scraper: Transcript Extraction and automate your workflow
Instagram Single Reels Scraper: Transcript Extraction works with any language or tool that can send an HTTP request.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("instagram-single-reels-scraper-transcript-extraction").call(run_input={"reelUrls": ["https://www.instagram.com/cristiano/reel/DOEMHa6iPoz/"],"generateTranscript": True,"whisperModel": "base",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["shortcode"], item["captionLanguage"], item["transcriptText"])
Works in Python, Node.js, Go, Ruby, cURL.
MCP for AI agents
Apify's MCP server (mcp.apify.com) exposes Apify Actors — including this one — as callable tools for MCP-compatible clients such as Claude Desktop, Cursor, and Windsurf. Add the Actor's name (instagram-single-reels-scraper-transcript-extraction, as shown on its Apify Store page) to the server's actor list to call it as an agent tool without custom integration code.
Automation platforms (n8n, Make, LangChain)
In n8n, the community Apify node's "Run Actor" operation can call this Actor by Actor ID, passing reelUrls and generateTranscript as JSON, then feed the resulting dataset items into downstream nodes. In Make, the Apify app's "Run an Actor or Task" module runs the same Actor and lets you map each row's transcriptText or captionLanguage into another scenario step, such as a spreadsheet row or a translation module. Any LangChain agent that can call an HTTP tool can invoke the Actor through the Apify API and consume its dataset items directly as typed JSON, without a parsing step.
Is it legal to scrape Instagram?
Yes — scraping publicly accessible Instagram content is generally lawful, and this Actor only returns data from a public reel that anyone can view logged out, or via the optional sessionId fallback that mirrors what an authenticated viewer sees on the same public content; it never accesses private accounts. Owner identity fields (ownerUsername, ownerFullName, ownerProfilePicUrl, ownerIsVerified) and any preview commenter data returned alongside a reel are personal data, so GDPR (for EU residents' data) and CCPA (for California residents) govern how you may lawfully store, use, and retain them — you need a valid lawful basis, such as legitimate interest, and must honor deletion or access requests. Consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Instagram Single Reels Scraper: Transcript Extraction work without an Instagram account?
Yes. The reel data fetch runs fully logged out by default — a public profile-page token fetch plus a logged-out GraphQL query — with no sessionid cookie required. The optional sessionId input is only a fallback for the rare case where the logged-out profile page itself is login-walled.
How often is the scraped data updated?
Every run performs a live fetch against Instagram at request time — there is no caching layer. Each run returns whatever the reel's public page and GraphQL response show at that moment.
What happens if a reel is private, deleted, or unavailable?
You still get a dataset row for that URL, with success: false and a typed errorReason (for example media_not_found, login_required, challenge_required, or no_csrf_token) instead of no row at all, so you can distinguish "genuinely gone" from "blocked and worth retrying."
Can I scrape private Instagram reels or accounts?
No. Only publicly accessible reels are returned. A private account's reel produces a failed row with an errorReason, not private data.
Does this Actor work for AI agent workflows and LLM pipelines?
Yes. It's callable as a plain HTTP endpoint through the Apify API by any agent framework, and it's also reachable through Apify's MCP server for MCP-compatible clients. Every response is typed JSON — including transcriptText and captionLanguage — with no parsing step before passing it to an LLM.
How does this Actor handle Instagram's anti-bot defenses?
It runs every reel-data request through Apify's residential proxy group, retries up to 3 times on a fresh proxy IP when a request comes back blocked or as a content-level soft block, and checks for the real presence of auth tokens (csrf_token) before falling back to page-content heuristics — reducing false "blocked" reports on pages that actually loaded correctly.
Does this Actor return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names — captionText, keywords, transcriptText, and the rest — pass directly into an LLM context window, a vector store, or an agent tool call, with no HTML or selectors involved.
Can I use this Actor without managing proxies?
Yes. Apify's residential proxy pool is used and rotated by the Actor automatically for the reel data fetch; you only choose a proxy country in proxyConfiguration if you want to.
Is the transcript real captions, or AI-generated speech-to-text?
It's AI-generated speech-to-text, not a real caption or subtitle track — Instagram does not expose one for reels. When generateTranscript is true, the Actor downloads the reel's own audio with yt-dlp and transcribes it locally with a self-hosted faster-whisper model, no external AI API key required. This is entirely separate from accessibilityCaption, which is Instagram's own auto-generated image alt-text for screen readers, not a transcript of spoken audio — the two fields are never conflated in the output.
Is the comments field the full comment thread?
No. It's the small preview_comments sample that rides along with the media response — typically the first few comments, not the reel's full comment thread. commentsFetchedCount reports how many preview comments came back, which is separate from the reel's total commentCount.
What happens when Instagram changes its structure or blocks the scraper?
The Actor is actively maintained, and the output schema is designed to stay stable across maintenance updates — field names and types don't change on your end even when the underlying fetch mechanism does, as already happened once when Instagram stopped embedding reel data in logged-out page loads. No specific turnaround time is promised for future changes.
Your feedback
Found a bug or missing a field? We want to know. Reach out through API-Empire's Apify Store support channel or issue tracker for this Actor so it can be fixed or clarified in the next update — active maintenance is how this Actor's fetch mechanism stayed working through Instagram's last structural change.