How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
https://archive.org/download/gettysburg_johng_librivox/getty…in Video or audio links. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Video URL to text with timestamps. Paste public TikTok, Instagram Reels, X, Facebook or YouTube links, or direct MP3/MP4 files, and get the transcript, timed segments and SRT or VTT subtitles.
- Input: up to 100 links per run. A link can be a video post page (TikTok, Instagram Reel, X post, Facebook video, YouTube video or Short, SoundCloud track and other public video sites) or a direct media file (MP3, MP4, M4A and other common audio and video formats).
- Output: the transcript
text, timedsegments, optional SRT or WebVTTsubtitles,language,title,platform,durationSecand the charged minutes. - Languages: Whisper detects the spoken language (about 100 languages). You can also choose it.
- Privacy: media is processed inside the run and deleted. Only the text rows and the run summary are saved.
Good for
- Get the words of TikTok, Reels and Shorts videos for content research, captions or repurposing.
- Make SRT or VTT subtitles for a public video or your own media file.
- Turn interviews, talks and podcasts on YouTube into searchable text for notes, search or an AI pipeline.
- Mix links from different sites in one run and get one table.
Not a good fit
- No private, login-only, paid, age-restricted or DRM-protected videos. The Actor never logs in.
- No live streams or upcoming premieres.
- No playlists, channels or profiles: use the link of one video. A playlist link returns
UNSUPPORTED_URL. - No speaker labels (who said what) and no translation.
- Whisper can misspell names and rare words. Check important quotes against the video.
Who uses it
Content creators
Reuse the words of short videos for posts and captions.
Marketers
Study what top TikTok and Reels videos say in a niche.
Journalists
Find quotes in interviews and jump to the right second.
Price
Prices will be shown after release.
Questions
Do I need a TikTok or YouTube account?
No. It works without login. So private videos are not supported.
Which languages work?
Whisper supports about 100 languages. Quality is best for widely spoken ones.
Are the videos stored?
No. The audio is transcribed and deleted. Only the text is saved.
How many links can I add?
Up to 100 links per run, up to 180 minutes each.
Do I need an OpenAI or other API key?
No. The Whisper model runs inside the Actor. You only pay the events above.
Why does a YouTube minute cost more?
YouTube blocks data-center servers, so the Actor downloads YouTube audio through a residential proxy. The YouTube price includes that traffic.
Details
Step by step on Apify
- Open the Input tab.
- In Video or audio links (
urls), keep the example LibriVox file or paste your own links, one per line. - Keep the defaults: language
auto, modelbase, subtitlesnone. - Click Start.
- Open the Transcripts view in the Output tab and read the Transcript column.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Content research on short videos | TikTok, Reels, Shorts links | one row per video | text, title, platform, language | send text to a summary, tagging or search tool |
| Subtitles for a video | one link + outputFormat: srt | one row | subtitles, segments | save subtitles as a .srt file |
| Quotes from interviews and talks | YouTube or X links | one row per video | segments, text | find a quote and jump to its start second |
| Text for an AI agent or RAG | any mix of links | one row per link | text, wordCount, url | index text with the url as the source |
Tips for better results
- Set the spoken language if you know it.
- Use the tiny model for very long videos to save time.
- Index the text with the video link as the source for AI tools.
Limits and good to know
- Up to 100 links per run and up to 180 minutes per link (
maxDurationMinutes). We tested YouTube videos up to 104 minutes and a 3-hour audiobook file withtiny(about 20 minutes). Withbase, 3 hours of audio take about 50 minutes, so raise the timeout to 4500 seconds or usetiny - Media files up to 1.5 GB
- The default run timeout is 3600 seconds. A 90-minute YouTube video with
basetakes about 27 minutes. For several long videos, usetiny, raise the timeout, or use 4096 MB memory - When the timeout comes near, the current link is saved as
partialand the next links getRUN_TIME_LIMIT - If one site refuses or does not answer 3 links in a run, or 3 video links in a row get no answer from any sites, the next video links are skipped with
SKIPPED_BLOCKEDand are not charged
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"url": "https://archive.org/download/gettysburg_johng_librivox/gettysburg_address.mp3",
"platform": "direct",
"title": null,
"status": "complete",
"durationSec": 157.88,
"transcribedSec": 157.88,
"truncated": false,
"language": "en",
"languageProbability": 0.999,
"model": "base",
"text": "This is a Libravox recording. All Libravox recordings are in the public domain. … The Gettysburg Address by Abraham Lincoln. …",
"wordCount": 303,
"segments": [
{"start": 0.05, "end": 5.05, "text": "This is a Libravox recording. All Libravox recordings are in the public domain."},
{"start": 5.05, "end": 10.05, "text": "For more information or to volunteer, please visit Libravox.org."},
{"start": 10.05, "end": 17.29, "text": "The Gettysburg Address by Abraham Lincoln."}
],
"subtitles": null,
"chargedMinutes": 3,
"processingSec": 18.3,
"error": null,
"fetchedAt": "2026-10-16T02:14:22Z"
}Data fields (18)
| Field | Type | Meaning |
|---|---|---|
url | string | The link as given in the input. |
platform | string | Where the audio came from: tiktok, instagram, x, facebook, youtube, ... or direct for a media file link. |
title | string | Video title or post caption from the page, when available. |
status | string | complete (whole video), partial (only the first part: Max minutes, your cost cap, run timeout or an interrupted download), not_found (removed or missing) or error (see the error field). |
durationSec | number | Length of the video or file in seconds, when known. |
transcribedSec | number | Seconds of audio transcribed; charged minutes are this rounded up to whole minutes. |
truncated | boolean | true when only the first part was transcribed. |
language | string | Language code used (detected or chosen). |
languageProbability | number | Confidence of automatic language detection, 0-1; null when you chose the language. |
model | string | Whisper model used: tiny or base. |
text | string | Full transcript text. |
wordCount | integer | Number of words in text. 0 for videos with music only. |
segments | array | Timed segments {start, end, text} in seconds. |
subtitles | string | SRT or WebVTT file content when Subtitles is srt or vtt. |
chargedMinutes | integer | Minutes charged for this link (0 on errors). |
processingSec | number | Time spent on this link in seconds. |
error | object | {code, message}: e.g. NOT_FOUND, LOGIN_REQUIRED, DRM_PROTECTED, LIVE, BLOCKED, UNSUPPORTED_URL, INVALID_URL, BLOCKED_ADDRESS (private or local address), NOT_MEDIA, NO_AUDIO, FILE_TOO_LARGE, DOWNLOAD_ERROR, DOWNLOAD_TIMEOUT, NETWORK_ERROR, TOO_SLOW, PROXY_UNAVAILABLE, INTERNAL_ERROR, TRUNCATED (partial), CHARGE_LIMIT, RUN_TIME_LIMIT, ABORTED, SKIPPED_BLOCKED and SKIPPED_SLOW_SOURCES (not requested, not charged); null when none. |
fetchedAt | string | When the row was produced, ISO 8601 UTC. |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Video or audio links required | urls | array | ["https://archive.org/download/gettysburg_johng_librivox/gettysburg_address.mp3"] |
| Spoken language | language | string | "auto" |
| Whisper model | model | string | "base" |
| Subtitles | outputFormat | string | "text" |
| Max minutes per video | maxDurationMinutes | integer | 60 |
Use cases with this tool
Each guide shows all the steps and the other tools.