Instagram Transcript Scraper โ€” Reels to Text, No Login avatar

Instagram Transcript Scraper โ€” Reels to Text, No Login

Pricing

from $4.00 / 1,000 transcripts

Go to Apify Store
Instagram Transcript Scraper โ€” Reels to Text, No Login

Instagram Transcript Scraper โ€” Reels to Text, No Login

Instagram Reel transcripts in bulk, no login: paste Reel links or whole profiles and get each Reel as text with timestamps, the spoken language, the caption, hashtags and engagement. Transcription included, no API key needed; Reels without speech aren't charged. Export JSON or CSV, or call the API.

Pricing

from $4.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

Richard Feng

Richard Feng

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

๐ŸŽ™๏ธ Instagram Transcript Scraper โ€” Reels to Text ยท No Login

This Instagram transcript scraper turns any public Reel or Instagram video into text โ€” no Instagram account, no login, no browser.

Point it at an account and get one clean row per Reel: the transcript, its timestamps, the language, plus the caption, hashtags and the Reel's engagement โ€” ready to analyse, search or feed to an LLM.

๐ŸŽ™๏ธ Reels โ†’ text๐Ÿ”“ No login, no account
โฑ๏ธ Timestamps per passage๐ŸŒ Language detection
๐Ÿ“Š Caption, hashtags, plays, likes๐Ÿงพ Clean JSON, ready for AI

๐Ÿ“‘ Table of contents


โœจ What can this Actor do?

๐Ÿงฒ Collectโš™๏ธ Built in
๐ŸŽ™๏ธ Transcripts โ€” the spoken words of every Reel, as one string๐ŸŽฏ Per-account caps, so a run's size is predictable
โฑ๏ธ Timestamped segments โ€” start, end, text per passage๐ŸŒ Language detection, or give it a hint
๐Ÿ‘ค Creator context โ€” username, full name, verified๐Ÿ”— Canonical public Reel URL on every row
๐Ÿ“Š Engagement โ€” plays, likes, comments๐Ÿ“… The Reel's date and caption
๐Ÿท๏ธ Hashtags & mentions โ€” parsed out of the caption๐Ÿšฆ Hard request cap and concurrency control
๐ŸŽฌ The audio track itself โ€” the URL that was transcribed๐ŸŒ Apify Proxy residential by default

Point it at a profile or a Reel link. That's the whole interface.


๐Ÿš€ Quick start

  1. Create a free Apify account ๐Ÿ™‹
  2. Open this Actor and paste a profile or a Reel link ๐Ÿ‘‡
  3. Set Max Reels per profile to how many you want
  4. Save & Start, then download the dataset as JSON, CSV or Excel ๐Ÿ“ฆ
{
"startUrls": [{ "url": "https://www.instagram.com/natgeo/" }],
"maxReelsPerProfile": 10
}
Paste thisAnd you get
instagram.com/natgeo/That profile's Reels, transcribed
instagram.com/reel/DeeUUHNAqQj/That one Reel, transcribed
@natgeo or natgeoSame as the profile link

The account can also sit in front of a Reel (instagram.com/natgeo/reel/<code>/), and instagr.am links work the same way. A share link (instagram.com/share/โ€ฆ or instagram.com/s/โ€ฆ) carries a code that is not the Reel's own: open it and paste the address it leads to. The run log names every link it could not use, and why.

๐Ÿ’ก Add Include the timeline to also pick up videos from the posts grid, not only the Reels tab.


โฌ‡๏ธ Input reference

FieldTypeDefaultDescription
Start URLsarrayโ€”Profile or Reel addresses.
Usernamesarrayโ€”Extra accounts, with or without @.
Max Reels per profileinteger10How many of each profile's videos to transcribe. Each one is a download plus a transcription, so this is also the main cost control.
Include the timelinebooleanfalseAlso transcribe videos from the posts grid, not only the Reels tab.
Include timestampsbooleantrueKeep segments[]. Turn off for a smaller record with just the full transcript.
Languagestring(detect)Optional hint, e.g. en, es, pt.
Max concurrencyinteger3How many Reels to transcribe at once.
Max requests per runinteger(API only)Hard stop after this many requests.
Proxy configurationobjectResidentialApify Proxy's RESIDENTIAL group, selected in the form and used when the field is left out: Instagram answers logged-out readers far more readily from residential addresses. Audio files are downloaded without it unless a download fails.

โฌ†๏ธ Output reference

One record per Reel. (See the limitations for the two cases where a row can be duplicated or missing.)

FieldTypeNotes
typestringtranscript
urlstringThe public Reel page โ€” what to join on
sourceobject{id, canonicalUrl, crawlUrl?, username}
id / shortcodestringInstagram's media id and the short code in the URL
ownerobject{id, username, fullName, isVerified}
takenAtstringISO 8601
captionstringThe Reel's caption
hashtags / mentionsarrayParsed from the caption, without # / @
transcriptstringThe whole transcript. Empty for a Reel without speech
segmentsarray{start, end, text} โ€” seconds from the start of the audio
languagestringAs detected by the engine
wordCountinteger
hasSpeechbooleanfalse for a Reel without speech โ€” its audio held only music, or it was posted without sound. Beside a transcriptError it means the transcription did not happen
durationSecondsnumberThe Reel's length
playCount / likeCount / commentCount / viewCountintegerEngagement at the time of the run
audioUrlstringInstagram's audio-only track of the Reel (a signed link that expires)
audioBytesintegerSize of the audio that was transcribed โ€” a few hundred KB for a short Reel, about 1 MB for two minutes. 0 for a Reel posted without sound
transcriptModelstringThe model that produced the text. none for a Reel posted without sound: there was nothing to send to one
transcriptErrorstringSet only when the Reel was read but could not be transcribed. A failure worth retrying is retried by the Actor first; what lands here is final
scrapedAtstringISO 8601

๐Ÿ“ฆ Output example

{
"type": "transcript",
"source": {
"id": "instagram",
"canonicalUrl": "https://www.instagram.com/reel/DcozHIETCd9/",
"username": "nasaadmin"
},
"id": "3974651461224900477",
"shortcode": "DcozHIETCd9",
"url": "https://www.instagram.com/reel/DcozHIETCd9/",
"owner": { "id": "79712351002", "username": "nasaadmin", "fullName": "NASA Administrator Jared Isaacman", "isVerified": true },
"takenAt": "2026-08-29T20:31:28.000Z",
"caption": "An unforgettable day at @nasajohnson. โ€ฆ",
"hashtags": [],
"mentions": ["nasajohnson", "potus"],
"durationSeconds": 114.566,
"likeCount": 51113,
"commentCount": 409,
"audioUrl": "https://โ€ฆmp4",
"audioBytes": 1019785,
"transcript": "โ€ฆ 250,000 miles from Earth. Please join me in congratulating Commander Reed Weissman, Pilot Victor Glover, Mission Specialist Christina Koch, and Mission Specialist Jeremy Hansen. โ€ฆ",
"segments": [
{ "start": 30.12, "end": 32.7, "text": "250,000 miles from Earth." },
{ "start": 32.7, "end": 44.64, "text": "Please join me in congratulating Commander Reed Weissman, Pilot Victor Glover, Mission Specialist Christina Koch, and Mission Specialist" },
{ "start": 44.64, "end": 45.98, "text": "Jeremy Hansen." }
],
"language": "en",
"wordCount": 204,
"hasSpeech": true,
"transcriptModel": "whisper-large-v3-turbo",
"scrapedAt": "2026-10-20T01:52:23.613Z"
}

โญ Why choose this Actor?

๐ŸŽ™๏ธ It only fetches the audioA Reel's sound is well under a megabyte, against several megabytes for the video. That is ~10ร— less to move and transcribe โ€” cheaper and faster than tools that pull whole videos.
โฑ๏ธ Timestamps, not just textsegments[] gives you start/end per passage, so you can clip, align or subtitle.
๐ŸŒ Language detectedNo need to tell it what it is listening to.
๐Ÿ”“ No login, no accountPublic Reels only. Nothing to rotate, nothing to leak, no account to get banned.
๐Ÿ“Š Engagement alongside the textPlays, likes, comments and the caption on the same row โ€” join performance to content without a second Actor.
๐Ÿค– LLM-readyPlain JSON with stable field names; feed transcript straight into your model.
๐Ÿงน Honest about silenceA Reel with only music, or posted without sound, produces a row with hasSpeech: false rather than being silently dropped โ€” and this Actor does not charge for it. A transcription that failed says so in transcriptError.

๐Ÿ’ฐ How much does it cost?

You pay per transcript, pay-per-event. A Reel that turns out to have no speech is stored and not charged.

EventFreeStarterScaleBusiness and up
๐ŸŽ™๏ธ Transcript, per 1,000 Reels that produced text$5.00$4.50$4.00$4.00
โ–ถ๏ธ Actor start, per run$0.00005$0.00005$0.00005$0.00005

The event price includes the platform usage this Actor generates โ€” compute and proxy. Apify bills usage on top only if the publisher has switched to "pay per event + usage"; the Actor's page shows which applies.

๐Ÿ’ก A worked example. 100 Reels transcribed โ‰ˆ $0.50 on the Free plan, $0.40 from Scale up. The same 100 Reels as full videos would move roughly 10ร— the data before transcription even starts.

Cost levers: โฌ‡๏ธ lower Max Reels per profile (the only real one โ€” one Reel is one charge), ๐Ÿšฆ set Max requests per run, and use Apify's own maximum cost per run โ€” the Actor stops starting new work when it is reached; a download already in flight finishes. Turning timestamps off makes the record smaller but not cheaper: the timings come back from the same transcription call.


๐Ÿ’ก Use cases

  • ๐Ÿ“ Content research at scale โ€” search what creators actually say, not just what they caption
  • ๐Ÿ”Ž Keyword & topic monitoring โ€” find every Reel in a niche that mentions your brand, your competitors or a trend
  • ๐Ÿค– LLM & RAG pipelines โ€” turn Reels into a text corpus for summarising, clustering or Q&A
  • ๐ŸŽฌ Subtitling & repurposing โ€” segments with start/end times, straight into an editor
  • ๐Ÿ“ˆ Creator analytics โ€” does talking about a topic correlate with plays? The engagement is on the same row
  • ๐Ÿ—ฃ๏ธ Multilingual monitoring โ€” language detection tells you what you are looking at

๐Ÿค– Automation & AI agents

  • ๐Ÿ”Œ Apify API โ€” start a run and read the dataset from any language
  • ๐Ÿงฉ No-code โ€” Make, n8n, Zapier and the Apify integrations
  • ๐Ÿค– MCP / LLM agents โ€” callable as an MCP tool from Claude, ChatGPT or any agent that speaks MCP
  • ๐Ÿ“ค Exports โ€” JSON, CSV, Excel and XML straight from the dataset

Connect over MCP

https://mcp.apify.com?tools=autofacts/instagram-transcript-scraper

In a client that reads an mcpServers configuration block:

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

The agent reads this Actor's parameters and their descriptions straight from the input schema, and the hosted server infers the result field types from the dataset schema โ€” so a model knows what to send and what comes back before it ever calls anything.

Or call the API directly

curl -X POST "https://api.apify.com/v2/acts/autofacts~instagram-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"startUrls": [{"url": "https://www.instagram.com/reel/DeeUUHNAqQj/"}]}'

The response body is the dataset records described above: one row for that Reel, with its transcript.


โ“ FAQ

How do I get the transcript of an Instagram Reel? ๐Ÿ“‹ Paste the Reel's link (https://www.instagram.com/reel/<code>/) into Start URLs and start the run. The text is in transcript, and its timed passages in segments[]. A video post (/p/<code>/) or an old IGTV link (/tv/<code>/) works the same way.

Can I transcribe Instagram Reels in bulk? ๐Ÿ“ฆ Yes. Give it as many Reel links as you like, or profiles: each profile's Reels tab is transcribed up to Max Reels per profile, plus its timeline if you turn that on. Every Reel is one row.

Is there an Instagram transcript API? ๐Ÿ”Œ This is one. Start a run through the Apify API, or call it from an AI agent over MCP, and read the transcripts back as JSON; see Automation & AI agents above.

Do I need an Instagram or an AI account? ๐Ÿ™… Neither. Nothing is logged in, and the transcription engine is provided by the Actor โ€” you do not need your own API key.

Which Reels get transcribed? ๐ŸŽž๏ธ The videos of the accounts you give it: the Reels tab (the one page it serves) up to Max Reels per profile, plus the timeline โ€” paged until the cap is reached โ€” if you turn that on. Images have no speech and are skipped; a carousel contributes the first of its videos that has sound.

What about Reels that are only music, or have no sound? ๐ŸŽต They produce a row with hasSpeech: false, an empty transcript, and no charge from this Actor. A Reel posted without sound is recognised before anything is downloaded; its row has audioBytes: 0 and transcriptModel: "none". A Reel whose transcription failed has a transcriptError instead, and is not charged either.

How accurate is the transcript? ๐ŸŽฏ It is Whisper-class speech recognition on the original audio. Music, heavy accents, overlapping speakers and very noisy scenes are where any engine struggles; segments[] lets you spot and trim those. The filler such engines are known to invent over music or silence (a lone "Thank you.") is recognised and dropped, and so are words guessed into sound the engine could not make out, such as a stadium crowd, which it reports with very low confidence. A Reel with nothing else in it is reported as having no speech โ€” and not charged.

Which languages does it transcribe, and can it translate? ๐ŸŒ The speech model covers about 100 languages, Hindi, Spanish, Portuguese and Arabic among them. It returns the text in the language spoken and names that language in language; it does not translate. If you know the language, set Language to skip the guess.

How long can a Reel be? โฑ๏ธ Reels are short by nature; the Actor handles them as they come.

Can it read Stories or followers? โŒ No. Instagram only serves those to logged-in users, and this Actor deliberately stays logged out.

The record says transcriptError โ€” what happened? โš ๏ธ The Reel was read but the transcription failed for that one item. Anything that could have been a passing glitch โ€” a rate limit, a server error, a timeout โ€” is retried by the Actor before the row is written, so what you see here is final for that Reel. Everything else in the run is unaffected.

A run returned 0 items โ€” why? ๐Ÿค” Usually the account is private, the link is wrong, or it has no videos.


โš ๏ธ Notes and limitations

  • ๐Ÿ“– Reads publicly visible Instagram Reels only, without logging in.
  • ๐Ÿšซ Not available without a login, and therefore not implemented: Stories, highlights, followers, following, hashtag pages, keyword search.
  • ๐ŸŽต A Reel with only music, or without sound, has no transcript โ€” that is a property of the Reel, not a failure.
  • ๐Ÿ–ผ๏ธ audioUrl is a signed link that expires. If you want the audio yourself, download it soon after the run.
  • ๐Ÿ—ฃ๏ธ One transcript per Reel: the whole audio, no speaker separation.
  • ๐Ÿ” A retried request can leave a duplicate row. If Instagram's answer to a record write is lost in transit and the request is retried, the same Reel can appear twice โ€” the Actor cannot tell a lost acknowledgement from a lost write. Rare, but possible on a flaky connection.
  • ๐Ÿ’ณ A charge is per stored record, and this Actor's "not charged" for a silent Reel assumes the account's own per-item charging is off. If the platform's default per-result event is priced on the account, every stored row is charged for it whatever this Actor's own events say.
  • โณ Instagram changes its surface from time to time. The Actor runs a start-up check and fails loudly rather than returning empty results.

๐Ÿงฐ Other Actors by autofacts

Apify only auto-recommends Actors in the same category, so here are the ones that actually pair with this scraper:

ActorWhat it's for
Instagram ScraperProfiles, posts and comments of the same accounts โ€” tagged users, co-authors, topics and engagement, without transcription
TikTok Subtitle & Transcript ScraperTikTok captions and transcripts
YouTube Subtitle & Transcript ScraperVideo captions as clean text
Google Trends Trending NowWhat is trending on Google right now, in 125 countries, to find the Reels worth transcribing

All of them: apify.com/autofacts


๐Ÿ’ฌ Feedback and support

Found a bug, or a Reel that transcribed badly? Open an issue on the Actor's page โ€” it's read, and it's what decides what gets built next.