Video URL to Text: Transcribe TikTok, Reels, X, YouTube icon

Video & audio · Coming soon

Video URL to Text Transcriber

Paste a video link and get the spoken words as text. It works with TikTok, Reels, X, Facebook and YouTube. You also get timestamps and subtitles.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

urlhttps://archive.org/download/gettysburg_johng_librivox/gettysburg_addr…
platformdirect
durationSec157.88

How it will work: 3 steps

  1. 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.
  2. 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.
  3. 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, timed segments, optional SRT or WebVTT subtitles, language, title, platform, durationSec and 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
  1. Open the Input tab.
  2. In Video or audio links (urls), keep the example LibriVox file or paste your own links, one per line.
  3. Keep the defaults: language auto, model base, subtitles none.
  4. Click Start.
  5. Open the Transcripts view in the Output tab and read the Transcript column.
Use cases
TaskInputYou getKey fieldsNext step
Content research on short videosTikTok, Reels, Shorts linksone row per videotext, title, platform, languagesend text to a summary, tagging or search tool
Subtitles for a videoone link + outputFormat: srtone rowsubtitles, segmentssave subtitles as a .srt file
Quotes from interviews and talksYouTube or X linksone row per videosegments, textfind a quote and jump to its start second
Text for an AI agent or RAGany mix of linksone row per linktext, wordCount, urlindex 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 with tiny (about 20 minutes). With base, 3 hours of audio take about 50 minutes, so raise the timeout to 4500 seconds or use tiny
  • Media files up to 1.5 GB
  • The default run timeout is 3600 seconds. A 90-minute YouTube video with base takes about 27 minutes. For several long videos, use tiny, raise the timeout, or use 4096 MB memory
  • When the timeout comes near, the current link is saved as partial and the next links get RUN_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_BLOCKED and 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.

one result · JSON
{
  "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)
FieldTypeMeaning
urlstringThe link as given in the input.
platformstringWhere the audio came from: tiktok, instagram, x, facebook, youtube, ... or direct for a media file link.
titlestringVideo title or post caption from the page, when available.
statusstringcomplete (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).
durationSecnumberLength of the video or file in seconds, when known.
transcribedSecnumberSeconds of audio transcribed; charged minutes are this rounded up to whole minutes.
truncatedbooleantrue when only the first part was transcribed.
languagestringLanguage code used (detected or chosen).
languageProbabilitynumberConfidence of automatic language detection, 0-1; null when you chose the language.
modelstringWhisper model used: tiny or base.
textstringFull transcript text.
wordCountintegerNumber of words in text. 0 for videos with music only.
segmentsarrayTimed segments {start, end, text} in seconds.
subtitlesstringSRT or WebVTT file content when Subtitles is srt or vtt.
chargedMinutesintegerMinutes charged for this link (0 on errors).
processingSecnumberTime spent on this link in seconds.
errorobject{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.
fetchedAtstringWhen 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.

SettingName in the APITypeExample value
Video or audio links requiredurlsarray["https://archive.org/download/gettysburg_johng_librivox/gettysburg_address.mp3"]
Spoken languagelanguagestring"auto"
Whisper modelmodelstring"base"
SubtitlesoutputFormatstring"text"
Max minutes per videomaxDurationMinutesinteger60

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure