Vimeo Transcript Scraper
Pricing
Pay per event + usage
Vimeo Transcript Scraper
Extract every public Vimeo caption track as clean transcript text and timestamped cues, with video and track metadata. No login or speech-to-text required.
Pricing
Pay per event + usage
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract captions and subtitles from public Vimeo videos as clean transcript text and timestamped cues.
Vimeo Transcript Scraper reads the text tracks already exposed by Vimeo's public player.
It does not invent a transcript, run speech-to-text, or require a Vimeo login.
Use it for localization, accessibility, media research, content analysis, and RAG ingestion.
What does Vimeo Transcript Scraper do?
Give the Actor one or more public Vimeo video URLs or numeric IDs.
For every selected caption or subtitle track, it returns:
- 🎬 Vimeo video ID, canonical URL, and title
- 👤 Owner name and owner URL when Vimeo provides them
- ⏱️ Video duration and dimensions
- 🌐 Track language, label, kind, and provenance
- ✅ Whether Vimeo marks the track as default
- 🧩 Ordered
{ start, end, text }cues in seconds - 📝 A clean joined transcript
- 🔗 The signed source WebVTT URL
- 📄 The complete raw VTT document when requested
The source URL is signed and may expire, so save the transcript or raw VTT rather than treating that URL as permanent.
Who is it for?
Accessibility teams
Audit which public Vimeo videos have captions and export timestamped text for remediation workflows.
Localization teams
Collect every language track, compare labels and provenance, and prepare subtitles for translation QA.
Researchers and media intelligence teams
Turn public captioned videos into searchable text while retaining time references to the source.
RAG and LLM engineers
Chunk transcripts using cue boundaries and store timestamps for grounded retrieval and source linking.
Content operations teams
Reuse approved captions in editorial systems, summaries, knowledge bases, and video catalogs.
Why use this Vimeo transcript extractor?
- ⚡ HTTP-first: no browser boot or video download
- 🔐 No credentials: works on caption tracks exposed to anonymous viewers
- 🌍 Multi-language: extracts every track or exact language codes
- 🎯 Track-level records: preserves label, kind, provenance, and default state
- 🕒 Timestamp grounding: numeric start and end seconds are ready for code
- 🧾 Structured gaps: captionless videos are reported, never fabricated
- 💾 Export ready: use Apify datasets as JSON, CSV, Excel, or API responses
What Vimeo data can I extract?
| Field | Type | Meaning |
|---|---|---|
videoId | number | Vimeo's numeric video ID |
videoUrl | string | Canonical public Vimeo URL |
inputUrl | string | URL or ID supplied in the input |
title | string | Video title from player configuration |
ownerName | string | Vimeo owner name when available |
ownerUrl | string | Owner URL when available |
durationSeconds | number | Video duration in seconds |
width, height | number | Source player dimensions |
status | string | ok, no_captions, language_not_found, or error |
availableLanguages | string[] | Every language code Vimeo exposes |
trackId | number | Vimeo caption-track ID |
language | string | Exact Vimeo language code |
label | string | Human-readable track label |
kind | string | Caption, subtitle, or related track kind |
provenance | string | Uploaded or generated provenance when exposed |
isDefault | boolean | Whether Vimeo marks the track as default |
cueCount | number | Number of parsed timestamped cues |
cues | object[] | Ordered start, end, and text objects |
transcript | string | Clean joined transcript text |
sourceVttUrl | string | Temporary signed source VTT URL |
rawVtt | string | Optional complete WebVTT source |
scrapedAt | string | ISO timestamp for extraction |
How much does it cost to extract Vimeo transcripts?
This Actor uses pay per event pricing.
A $0.005 start event covers run initialization, then each saved transcript-track or structured video-status record is charged as one result.
The BRONZE result price is $0.000099639 (about $0.0996 per 1,000 records). Current result prices are FREE $0.00011458, SILVER $0.000077718, GOLD $0.000059783, PLATINUM $0.000039856, and DIAMOND $0.000027899.
Because the Actor reads existing captions instead of downloading media or running ASR, it is designed for low compute use. A one-video run returning seven language tracks costs the start fee plus seven result events.
To estimate a batch, multiply your tier's result price by the number of selected caption tracks, then add $0.005.
How to extract a Vimeo transcript
- Open Vimeo Transcript Scraper.
- Paste one or more public Vimeo video URLs or IDs into Vimeo video URLs or IDs.
- Leave Language codes empty to keep every track, or enter exact codes such as
enorpt. - Enable Include raw WebVTT only when you need the original file content.
- Click Start.
- Open the default dataset to inspect transcript-track records.
- Export JSON, CSV, Excel, or connect the dataset to your workflow.
Input parameters
videoUrls
Required array with 1-100 entries.
Supported examples include:
https://vimeo.com/980152407https://player.vimeo.com/video/980152407- common Vimeo channel or group paths containing a numeric video ID
- a numeric string such as
980152407
Non-Vimeo domains fail validation rather than being crawled.
languageCodes
Optional array of exact, case-insensitive Vimeo language codes.
An empty array extracts every available track.
If none match, the Actor emits language_not_found with availableLanguages so you can correct the filter.
includeRawVtt
Optional boolean, default false.
Enable it when preserving cue settings, headers, or original line breaks matters.
maxConcurrency
Optional integer from 1 to 10, default 5.
Lower it when running large batches conservatively.
Example input
{"videoUrls": ["https://vimeo.com/980152407"],"languageCodes": ["en-x-autogen"],"includeRawVtt": false,"maxConcurrency": 1}
To collect every language, omit languageCodes or set it to an empty array.
Example output
{"videoId": 980152407,"videoUrl": "https://vimeo.com/980152407","inputUrl": "https://vimeo.com/980152407","title": "How to add captions or subtitles to your video","ownerName": "Vimeo","durationSeconds": 142,"status": "ok","availableLanguages": ["en-x-autogen", "pt", "fr"],"trackId": 182243678,"language": "en-x-autogen","label": "English (auto-generated)","kind": "captions","provenance": "ai_generated","isDefault": true,"cueCount": 36,"cues": [{ "start": 1.935, "end": 4.045, "text": "Vimeo makes it easy to add captions" }],"transcript": "Vimeo makes it easy to add captions ...","sourceVttUrl": "https://captions.vimeo.com/captions/...vtt?...","scrapedAt": "2026-07-22T00:00:00.000Z"}
Signed source URLs are intentionally refreshed on every run.
Understanding output statuses
ok
A selected track was fetched and parsed into at least one cue.
no_captions
The public player configuration exposed no caption or subtitle tracks.
This does not mean the Actor transcribed the audio; no speech-to-text is performed.
language_not_found
The video has tracks, but none match the requested language codes.
Check availableLanguages and rerun with one of those exact values.
error
The individual video could not be fetched or parsed.
If every requested video fails, the Actor run fails instead of returning a misleading success.
Working with timestamped cues
Each cue has numeric start and end values measured in seconds.
That shape works well for:
- splitting long transcripts into time-bounded chunks
- creating deep links or chapter references
- aligning translated text with source timing
- finding the exact video moment behind a search result
- building subtitle quality checks
Cue text is stripped of WebVTT markup and common HTML entities are decoded.
The raw file remains available through rawVtt when enabled.
Tips for reliable Vimeo caption extraction
- Use the exact public video or player URL visible to anonymous viewers.
- Include the unlisted
hhash when Vimeo supplies one in the URL. - Keep language filters empty on the first run to discover available codes.
- Save
rawVttif you need permanent source-file content. - Do not store
sourceVttUrlas a permanent download endpoint; it expires. - Start with low concurrency for large external batches.
- Treat
no_captionsas a source-data fact, not a scraping failure.
Export and integration workflows
Accessibility inventory
Schedule a run with a maintained list of public video URLs, then filter dataset records by status to find videos without captions.
Localization QA
Group records by videoId, compare language, label, cueCount, and provenance, then send differences to a review queue.
RAG ingestion
Map each cue into a document containing videoId, start, end, text, and videoUrl for timestamp-grounded retrieval.
Research archive
Export JSON with includeRawVtt: true, retain the scrape timestamp, and preserve both normalized and source representations.
Webhook automation
Use an Apify webhook to notify Make, Zapier, n8n, or your API when a run succeeds, then consume the default dataset.
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/vimeo-transcript-scraper').call({videoUrls: ['https://vimeo.com/980152407'],languageCodes: ['en-x-autogen'],includeRawVtt: false,maxConcurrency: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].transcript);
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/vimeo-transcript-scraper').call(run_input={'videoUrls': ['https://vimeo.com/980152407'],'languageCodes': ['en-x-autogen'],'includeRawVtt': False,'maxConcurrency': 1,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0]['transcript'])
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~vimeo-transcript-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls": ["https://vimeo.com/980152407"],"languageCodes": ["en-x-autogen"],"includeRawVtt": false,"maxConcurrency": 1}'
After the run finishes, fetch items from its defaultDatasetId.
Use Vimeo Transcript Scraper with MCP
Connect Apify MCP to Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/vimeo-transcript-scraper"
For Claude Desktop, Cursor, or VS Code, add an HTTP MCP server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/vimeo-transcript-scraper"}}}
Example prompts:
- “Extract every public caption language from this Vimeo video.”
- “Get the English Vimeo transcript and return cues around mentions of accessibility.”
- “Prepare timestamped Vimeo caption chunks for my RAG pipeline.”
- “Check whether these Vimeo videos expose captions to anonymous viewers.”
Scheduling and monitoring
Create an Apify schedule when the source list changes over time.
Use a stable input task containing your video URLs.
Send successful run events to a webhook, then compare trackId, cueCount, or transcript hashes in your own storage.
Vimeo signed URLs change, so compare track identity and content rather than signed URL strings.
Limitations
- Only caption/subtitle tracks exposed by Vimeo's anonymous public player are available.
- Private and password-protected video access is not supported.
- The Actor does not download video or audio.
- The Actor does not perform Whisper, ASR, or any other speech-to-text.
- Caption quality depends on the uploader or Vimeo-generated source track.
- Signed VTT URLs expire.
- Vimeo can change its public player configuration.
- Language filtering uses exact source codes, not fuzzy language names.
Is it legal to scrape Vimeo captions?
This Actor reads caption tracks exposed by public Vimeo player configuration.
Public accessibility does not remove copyright or license obligations.
Use the data only when you have a lawful purpose and the right to process the relevant video text.
Respect Vimeo's terms, the publisher's rights, privacy requirements, and applicable laws.
Do not use the Actor to bypass private access controls or redistribute copyrighted captions without permission.
This section is general information, not legal advice.
Troubleshooting
Why did I get no_captions?
The anonymous Vimeo player did not expose any text tracks for that video.
The Actor never substitutes generated speech-to-text, so an empty source remains explicit.
Why did I get language_not_found?
Your filter did not exactly match Vimeo's language codes.
Read availableLanguages and use one of those values.
Why does the source VTT URL no longer work?
Vimeo signs caption URLs with an expiry.
Run the Actor again to refresh configuration, or enable includeRawVtt and save the source content in your dataset.
Why did the complete run fail?
The Actor fails when every requested video request fails, which prevents a false successful run.
Confirm that the URLs are public Vimeo video/player URLs and include any required unlisted hash.
Frequently asked questions
Does this Actor transcribe videos without captions?
No. It extracts only caption and subtitle tracks Vimeo already exposes.
Can it extract every language?
Yes. Leave languageCodes empty and one dataset record is emitted per available track.
Can I use a numeric Vimeo ID?
Yes. Pass the ID as a string in videoUrls.
Does it need a Vimeo API token?
No token is required for the supported anonymous public-caption scope.
Can it return the original VTT?
Yes. Set includeRawVtt to true.
Are timestamps strings or numbers?
Parsed cues use numeric seconds for easier filtering and computation.
Related video scrapers
- YouTube Transcript — extract transcript data from YouTube sources.
- Video Transcript Scraper — use a broader transcript workflow when Vimeo-specific track metadata is not required.
- TikTok Transcript Scraper — collect transcript data from TikTok videos.
Choose Vimeo Transcript Scraper when you need Vimeo-native caption tracks, language metadata, provenance, and timestamped cues without media transcription.
Start extracting Vimeo transcripts
Open Vimeo Transcript Scraper, paste one public video URL, and keep the prefilled low-concurrency settings for a quick first run.
Export the resulting transcript records or connect them directly to your accessibility, localization, research, or RAG workflow.