Instagram Reels Transcript Scraper: Speech to Text
Pricing
from $8.00 / 1,000 reel transcribeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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.

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
| Field | What it is |
|---|---|
url, shortcode | Reel link and Instagram's short code |
profile | The profile from your input this reel came from; null for reel links you gave directly |
ownerUsername | Account that posted the reel (a collab reel on a profile can belong to another account) |
caption, postedAt | Caption and posting time (UTC) |
durationSec | Audio length in seconds |
viewCount, likeCount | Counts when Instagram shows them to logged-out visitors |
status | ok or the reason there's no transcript (below) |
language, languageProbability | Spoken language and detection confidence (null when you set the language) |
text | Full transcript |
segments | Transcript in timestamped pieces: start, end (seconds), text |
srt, vtt | Subtitles in SRT and WebVTT |
error | Why 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
| Status | Meaning | Charged |
|---|---|---|
ok | Transcribed | Yes |
no_speech | Silence or music only | No |
no_video | A photo or carousel post | No |
unsupported_language | Auto-detect found a language outside the supported list; language shows which | No |
private_or_removed | The reel is private, deleted or the link is wrong | No |
login_required | Instagram showed this reel or profile only to logged-in visitors | No |
unreachable | Instagram kept refusing the request after retries | No |
too_long | Longer than your Longest video setting | No |
skipped_budget | Not processed because the run reached your maximum cost | No |
failed | Something else went wrong; error says what | No |
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
okrows. 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 (
maxTotalChargeUsdin the API). Reels the Actor doesn't get to are listed asskipped_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 osfrom apify_client import ApifyClientclient = 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_speechwhen 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.