Loom Transcript Scraper - Captions to Text
Pricing
from $10.00 / 1,000 loom transcripts
Loom Transcript Scraper - Captions to Text
Extract public Loom video transcripts as clean text, timestamped segments, VTT, and SRT. Use public share or embed URLs only; no login, cookies, or video download.
Pricing
from $10.00 / 1,000 loom transcripts
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
a month ago
Last modified
Categories
Share
What is Loom Transcript Scraper - Captions to Text?
Loom Transcript Scraper - Captions to Text extracts the captions Loom already publishes for public share and embed videos and returns one dataset row per video. Each row has the full transcriptText, timestamped transcriptSegments, ready-made WebVTT and SRT caption strings, and, when metadata is on, the video title, owner name, duration, view and comment counts, privacy label, creation time and thumbnail. Product, support and enablement teams, documentation writers, researchers and AI agents use it to turn public Loom walkthroughs and demos into searchable text for RAG, summaries, docs and subtitles, with no Loom login, cookies or video download.
Best fit for this Actor
- Designed for public Loom captions. Use it when you have public Loom links and need the words, with timestamps, in a clean format.
- Three formats in one row. Plain text for prompts and embeddings, timed segments for answers that cite a moment, and VTT or SRT for subtitles.
- Share links, embed links or IDs. Paste
loom.com/share/...,loom.com/embed/...or a 32-character video ID; duplicates are merged. - Pipeline-friendly.
startUrlsaccepts request objects from another Actor or an API workflow, merged withloomUrls. - Video files as well. When you also want playable stream links for the same videos, then pass the links to Loom Video Downloader.
What people and AI agents ask this Actor to do
Get the transcript of this Loom video. Turn these 20 product demo Looms into text I can search. Give me SRT subtitles for this Loom walkthrough.
| Request | Input to send |
|---|---|
| One video, full detail | {"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4"]} |
| Text only for an LLM | {"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4"], "includeCaptionFiles": false} |
| A batch with a cap | {"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4", "https://www.loom.com/embed/002508e86fde4232bb8de474eb5c65c4"], "maxVideos": 25} |
Workflow example: a searchable help center from support Looms
A support lead starts with 40 public Loom links the team has posted in help articles over the past year and pastes them into loomUrls with maxVideos set to 40. The dataset returns each video's title, transcriptText and transcriptSegments. The lead exports the rows, feeds transcriptText into the help center's search index, and uses transcriptSegments so the chatbot can link answers to the exact second in each video. A monthly schedule with new links keeps the index current.
How to extract Loom transcripts
- Paste public Loom share or embed links in Loom URLs.
- Choose whether to include metadata and caption files, and set Max videos.
- Click Start, then export the dataset or read it through the API.
Input
{"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4"],"maxVideos": 25,"includeMetadata": true,"includeCaptionFiles": true}
| Field | Type | What it controls |
|---|---|---|
loomUrls | array (required) | Public Loom share or embed URLs, or 32-character video IDs. |
startUrls | array | Optional request objects such as [{"url": "https://www.loom.com/share/..."}] from another workflow, merged with loomUrls. |
maxVideos | integer | Unique videos processed and charged, 1 to 200. Default 25. |
includeMetadata | boolean | Add title, description, owner, duration, views, comments, thumbnail, creation time and privacy. Default true. |
includeCaptionFiles | boolean | Add transcriptVtt and transcriptSrt strings. Default true. |
Output
| Field | What it contains |
|---|---|
videoId, sourceUrl | Loom video ID and the link you supplied |
status, transcriptStatus | Row state, such as transcript_extracted, and transcript status |
transcriptText | Full clean transcript, one caption phrase per line |
transcriptSegments | Array of { startSeconds, endSeconds, text } caption units |
transcriptVtt, transcriptSrt | Subtitle strings built from the segments |
language | Caption language when Loom labels it |
title, description, ownerName, createdAt, privacy | Public video context |
durationSeconds, viewCount, commentCount, thumbnailUrl | Length, engagement and thumbnail |
scrapedAt | Collection time |
Example record (transcript shortened, names fictional):
{"videoId": "002508e86fde4232bb8de474eb5c65c4","sourceUrl": "https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4","status": "transcript_extracted","transcriptText": "Hey, Loom community. Today I want to share how I keep viewers engaged during a software walkthrough.\nIn the beginning, I like to make my camera bubble large so it feels like a conversation.","transcriptSegments": [{ "startSeconds": 0.31, "endSeconds": 9.53, "text": "Hey, Loom community. Today I want to share how I keep viewers engaged during a software walkthrough." },{ "startSeconds": 9.53, "endSeconds": 19.97, "text": "In the beginning, I like to make my camera bubble large so it feels like a conversation." }],"transcriptVtt": "WEBVTT\n\n00:00:00.310 --> 00:00:09.530\nHey, Loom community. Today I want to share how I keep viewers engaged during a software walkthrough.\n\n00:00:09.530 --> 00:00:19.970\nIn the beginning, I like to make my camera bubble large so it feels like a conversation.","transcriptSrt": "1\n00:00:00,310 --> 00:00:09,530\nHey, Loom community. Today I want to share how I keep viewers engaged during a software walkthrough.\n\n2\n00:00:09,530 --> 00:00:19,970\nIn the beginning, I like to make my camera bubble large so it feels like a conversation.","language": null,"transcriptStatus": "success","scrapedAt": "2026-10-01T01:43:09.684Z","title": "Screen and engagement tips (2:30)","description": null,"ownerName": "Dana Whitfield","createdAt": "2022-08-05T21:16:35.487Z","privacy": "public","durationSeconds": 151,"viewCount": 95093,"commentCount": 720,"thumbnailUrl": "https://cdn.loom.com/sessions/thumbnails/002508e86fde4232bb8de474eb5c65c4-1659734506699.jpg"}
A public video without captions is kept as a free row with status no_transcript, so your list stays complete. Every run writes OUTPUT and RUN_SUMMARY with an outcome of COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT or UPSTREAM_FAILED.
Pricing
This Actor uses Pay per event plus Apify platform usage. Two events apply: Actor Start once per run, and Loom Transcript once per video whose transcript is saved. Videos without captions add no transcript event. For example, a batch of 25 public Looms that all have captions creates 25 Loom Transcript events and one Actor Start event, plus the platform usage for the run. maxVideos caps the transcript events. The live Pricing tab on this page shows the current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~loom-transcript-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4"], "includeCaptionFiles": false}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/loom-transcript-scraper").call(run_input={"loomUrls": ["https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4"],"maxVideos": 10,})for video in client.dataset(run["defaultDatasetId"]).iterate_items():print(video["title"], video["status"], len(video.get("transcriptText") or ""))
Use with AI agents through Apify MCP
Connect this Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP, then ask:
Get the transcript of https://www.loom.com/share/002508e86fde4232bb8de474eb5c65c4, summarize it in five bullet points, and cite the start time of the segment behind each point.
Agent checklist:
- Pass public Loom links in
loomUrlsand setmaxVideosas the cost ceiling. - Set
includeCaptionFilestofalsewhen only text is needed, for shorter rows. - Read rows with
get-dataset-items; usetranscriptTextfor summaries andtranscriptSegmentsfor timestamp-aware answers. - Check
statusper row andOUTPUT.outcomefor the run.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Feeding an LLM or vector store | Use transcriptText and turn off caption files | Compact, clean text rows |
| Answers that cite a moment | Use transcriptSegments | Start and end seconds per phrase |
| Subtitles for a player | Keep includeCaptionFiles on | VTT and SRT strings ready to save |
| Links from another Actor | Pass them as startUrls request objects | One merged, deduplicated list |
| A large library | Batch up to 200 videos with maxVideos | Predictable cost per batch |
Builder's note
I built this transcript-first, because most teams want the words in their Looms rather than the video files. I found that public Loom pages already carry timestamped captions, so the Actor reads those over plain HTTP with no browser or speech-to-text step and turns them into text, segments, VTT and SRT. My goal was fair billing, which is why videos without captions stay in the dataset as free rows.
FAQ
Do I need a Loom account?
No. The Actor reads public share and embed pages and needs no login, cookies or API key.
Does it transcribe videos that have no captions?
It extracts captions Loom has already published. Videos without captions come back as free no_transcript rows.
Can it download the video?
This Actor returns text. For playable stream links, use Loom Video Downloader.
Which links work?
Public share links, embed links and raw 32-character Loom video IDs. Password-protected and workspace-only videos stay private.
Responsible use
Process only public Loom videos you are entitled to use, with a lawful basis under privacy laws such as the GDPR and CCPA, since transcripts and owner names can include personal data. Respect Loom's terms and the rights of the people who recorded the videos. Loom is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Loom or Atlassian.