Universal Media Transcriber avatar

Universal Media Transcriber

Pricing

from $21.00 / 1,000 results

Go to Apify Store
Universal Media Transcriber

Universal Media Transcriber

Transcribe any video, audio or podcast link: YouTube, TikTok, Instagram, X, Spotify, podcast RSS, cloud files and 1,800+ sites. Get full transcripts, timestamps, speaker labels, SRT/VTT subtitles, summaries and RAG-ready chunks. 99 languages, no API key needed.

Pricing

from $21.00 / 1,000 results

Rating

0.0

(0)

Developer

Insights Data

Insights Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Security

Limited permissions

Share

🎧 What is Universal Media Transcriber?

Create podcast show notes, blog posts and subtitles from video and podcast links, and run media monitoring on what people say, with Universal Media Transcriber. It is made for content creators, marketers, podcast teams, researchers and AI developers who need timestamped transcripts, SRT/VTT subtitles and structured rows from video, audio and podcast links or from files they upload. Paste a YouTube, TikTok, Instagram, X, Facebook or SoundCloud link, a podcast RSS feed or an audio file into this video transcriber and click Start, no coding needed.

It first looks for a transcript the publisher already released, then for the platform's captions, and runs speech recognition only when neither exists, so files without captions still get speech to text. When a podcast host publishes its own podcast transcript, that file is used first.

  • Content repurposing: go from video to blog post, quotes and social posts using the clean transcript of videos, Shorts, Reels, TikToks and episodes.
  • Podcast show notes: transcribe a podcast back catalog from its feed and write show notes from the text.
  • Brand monitoring YouTube and podcast content: find mentions of your brand, product or competitor with their timestamp and, where the site supports it, a link to that moment.
  • Transcripts for RAG: feed timestamped chunks into your vector database or AI pipeline.
  • Video accessibility: make SRT and VTT subtitles for any recording.
  • YouTube competitor analysis: compare speaker talk time, speaking pace and opening hooks across your competitors' videos.

What can Universal Media Transcriber do?

  • πŸ”— Transcribe links in bulk: videos, Shorts, Reels, TikToks, posts, podcast episodes, RSS feeds, Apple Podcasts and Spotify shows, YouTube channels and playlists, SoundCloud tracks and sets, Google Drive / Dropbox / OneDrive share links and direct files, in any mix.
  • πŸ”Ž Search and transcribe: each search query adds the top YouTube or SoundCloud results.
  • 🎯 Filter feeds and channels: published after / before, title contains / excludes, minimum and maximum duration, YouTube Shorts on or off.
  • πŸ‘₯ Speaker labels and keyword monitoring: Speaker 1, Speaker 2 (or your own names), plus every hit of your keywords with timestamp, context and (where the site supports it) a link.
  • πŸ’Ύ Export files: SRT, VTT, TXT, Markdown, Word (.docx) and JSON per transcript, plus one combined report.
  • πŸ”Œ Run it your way: use the Apify API, schedule runs, get a webhook per finished row, connect Make, Zapier or Google Sheets, and download data in JSON, CSV, Excel, XML or HTML.

πŸ“ Video transcriber data: what can Universal Media Transcriber extract?

Every transcript row has the spoken text plus the media details the source shows. This is the data you can extract from each link:

πŸ“ Transcript text, clean transcript cleanText, wordCount⏱️ Timestamped segments (with a link to each moment where the site supports it) and paragraphs
πŸ’¬ Subtitles srt and vttπŸ‘₯ speakers and speakerTalkTime
πŸ”” Keyword hits mentions and mentionCountsπŸ“š RAG chunks with timestamps (and links where the site supports them)
✨ Extractive summary (key sentences taken from the transcript, not AI-written) and up to 15 keywordsπŸ“‘ chapters published with the video or episode
πŸ”— url, inputUrl, platform, sourceTypeπŸ‘€ title, uploader, publishedAt, durationSeconds, thumbnailUrl
🌍 language and transcriptSource (publisher, captions, auto-captions or speech-recognition)πŸ“ˆ hook3s, hookStartSeconds, speechSeconds, speechRatio, wordsPerMinute
🚦 status, charged, error, warningsπŸ’Ύ files (links to your export files)

Note: Some fields are filled only in certain cases. speakers and speakerTalkTime appear when Speaker labels is on. mentions and mentionCounts appear when you set Keywords to monitor. files appears when you pick Export files. chapters, thumbnailUrl, description, tags, engagement and podcast fields like episodeNumber, season and guid are filled when the source publishes them. languageProbability and model are filled on rows made by speech recognition.

Transcripts come with timestamps: every segment has start and end seconds, and for YouTube, Twitch, Dailymotion, Vimeo, SoundCloud, Rumble and direct media file links you paste, it also has a link that opens the media at that moment. Episodes taken from a podcast feed have no segment links, though their mentions and chunks can have one. Turn on Word-level timestamps to get word level timestamps (start, end and confidence per word).

SourceWhat you get
YouTube video or ShortOne YouTube transcript per link, from the creator's or the automatic YouTube captions when they exist
YouTube channelThe newest videos (and the newest Shorts if Include YouTube Shorts is on). Paste a channel link to use it as a YouTube channel transcript scraper
YouTube playlistThe newest items of the playlist
TikTok, Instagram, X, Facebook, Reddit, LinkedIn, Twitch, Vimeo, Dailymotion, Rumble, Loom, Bilibili, Threads and moreOne transcript per post: a TikTok transcript, an Instagram reel transcript or a Facebook video transcript
SoundCloud track, set or artistOne SoundCloud transcript per track, or the newest tracks of a set or artist
Podcast RSS feed, Apple Podcasts showThe newest episodes
Spotify show or episodeFound through the show's public podcast feed
Google Drive, Dropbox, OneDriveThe shared file (it must be shared with "anyone with the link")
Direct audio or video filemp3, mp4, m4a, wav, flac, aac, ogg, opus, webm, mov, mkv, avi and other common formats

Other links are tried too. When a link can't be read, you get a free row that says why.

What data can't Universal Media Transcriber extract?

  • Translations (the translation field is always null) and AI insights beyond the built-in summary and keywords (ai is always null).
  • Live or upcoming streams (they come back as bad_input until they end).
  • Private, members-only or age-restricted media, unless you add your own cookies.
  • Spotify-only shows that have no public podcast feed.
  • Comments and other non-audio data. For TikTok comments, try TikTok Comments & Replies Scraper.

🧭 Video transcriber tutorial: how to transcribe video to text

Universal Media Transcriber is designed for an easy start, even if you have never used Apify before.

  1. Create a free Apify account using your email.
  2. Open Universal Media Transcriber.
  3. Paste one or more links into Media links (or add a search, upload files, a file with links or a dataset).
  4. For a podcast feed, channel, playlist or search, set Items per feed / channel / search. The default is 2, so a feed gives only its 2 newest episodes unless you raise it (up to 500).
  5. Click Start and wait for the run to finish. Rows appear in the Output tab while the run is going.
  6. In the Output tab, click Export to download your data in JSON, CSV, Excel, XML or HTML.

That is all a video transcriber from link input needs: nothing to install, one link in and one transcript row out, and the video to text work runs in the Apify cloud.


πŸ’² Video transcriber pricing: how much does Universal Media Transcriber cost?

Universal Media Transcriber uses pay-per-event pricing. You pay $0.03 per delivered transcript ($30.00 per 1,000 results) on the Free plan (lower on paid plans, see below), plus Apify platform usage for the run, plus a tiny start fee ($0.00005 per run at the default 1 GB of memory).

PartPriceWhen it is charged
πŸ’² Result$0.03 per transcript on the Free plan (lower on paid plans)Each delivered transcript row (status = ok)
βš™οΈ Platform usageApify platform usage (compute)Paid by you on top of the event prices; shown on the run page
πŸš€ Actor start$0.00005 per GB of run memoryOnce per run
Apify planPrice per transcriptPrice per 1,000 transcripts
Free$0.03$30.00
Starter$0.027$27.00
Scale$0.024$24.00
Business and higher$0.021$21.00

Paid Apify plans get a lower result price. The plan discount applies to that price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

The price is per transcript, not per minute: a 19-second clip and a 2-hour episode cost the same ($0.03 each on the Free plan). The price is also the same whether the text comes from a publisher transcript, captions or speech recognition. Failed rows are free, and the copies in the section tables (Transcripts, Segments, Mentions and the others) are not charged again.

TranscriptsResult charges (Free plan)Plus
10about $0.30platform usage + start fee
100about $3platform usage + start fee
1,000about $30platform usage + start fee

How do I estimate platform usage?

Platform usage depends on your media, so we don't publish a fixed figure. Items with captions or a publisher transcript skip the audio download, so they use less platform usage than items that need speech recognition. Longer recordings that need speech recognition use more. To estimate your bill:

  1. Run 1 or 2 items of the kind you plan to transcribe (for example, one podcast episode without captions).
  2. Open the run page and read the platform usage cost.
  3. Divide it by the number of items, then multiply by the number of items you plan to run, and add the result price for your plan ($0.03 per transcript on the Free plan).

See the pricing tab for the live event list.

Can I cap what a run costs?

Yes. Before you click Start, set Maximum cost per run in the run options below the input form (or with the API). The Actor checks this limit each time it charges a transcript result. When the limit is reached, the run stops cleanly with the message "Spend limit reached β€” N transcript(s) delivered." and keeps every row saved so far. Leave some room in your budget for platform usage.

Is Universal Media Transcriber free to try?

Yes. You can try it on the Apify Free plan, which gives you $5 of credit every month:

  • Free-plan runs work the same as paid runs.
  • The credit is used up by transcript results ($0.03 each on the Free plan) plus platform usage. Failed rows are free.
  • Set Maximum cost per run when you start a run, and do a small test run with 1 or 2 links first.

⬇️ Input

No single field is required, but you need at least one source: Media links (urls), Search queries (searchQueries), Upload audio or video files (audioFiles), File with links (inputFile) or Dataset (datasetId). With none of them, the run ends with "Nothing to transcribe". All other settings have working defaults.

Here's an example that transcribes one 19-second YouTube video and watches for the word "elephants". In the input form, fill in two fields:

  • πŸ”— Media links: https://www.youtube.com/watch?v=jNQXAC9IVRw
  • πŸ”” Keywords to monitor: elephants

Leave everything else as it is. The same input as JSON (for the API):

{
"urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],
"searchTerms": ["elephants"]
}

⚠️ Keywords to monitor (searchTerms) and Search queries (searchQueries) are different fields. Keywords to monitor finds words inside your transcripts. Search queries finds new videos or tracks on YouTube or SoundCloud to transcribe, and each transcript it delivers is charged.

See the input tab for a full description of every field.

Settings most people change

Setting (field)What it doesDefault
πŸ”— Media links (urls)Links, one per line: videos, posts, episodes, feeds, shows, channels, playlists, share links, filesempty
πŸ”Ž Search queries (searchQueries) + Search on (searchPlatform)Each query adds the top results from youtube or soundcloudyoutube
πŸ“€ Upload audio or video files (audioFiles)Each uploaded file becomes one transcriptempty
πŸ“Š Items per feed / channel / search (maxItemsPerSource)Newest items taken per feed, show, channel, playlist, SoundCloud set and search (1–500)2
πŸͺœ Transcript source (transcriptStrategy)Auto (best available), Captions / published transcripts only, or Always speech recognitionauto
🌍 Spoken language (language)A language code like en, es, de or pt-BR; empty = auto-detect. Also picks the caption track in that languageempty
πŸ‘₯ Speaker labels (speakerLabels)Adds Speaker 1, Speaker 2 to segments, paragraphs and subtitlesoff
πŸ”” Keywords to monitor (searchTerms)Words or brands to find in every transcriptempty
πŸ’Ύ Export files (exportFormats)srt, vtt, txt, md, docx, json files per transcriptnone

Advanced settings

You can skip this table: the defaults work for most runs. It is here for when you need finer control.

Setting (field)What it doesDefault
πŸ“„ File with links (inputFile).txt (one link per line), .csv (any column with links) or .json (rows of another scraper's output)empty
πŸ“₯ Dataset (datasetId)Chain another run: one media link per row, up to 5,000 rowsempty
πŸͺ„ Accept auto-generated captions (acceptAutoCaptions) Β· Use the publisher's own transcript (usePublisherTranscripts)Use automatic captions; use a transcript the podcast host publishedon Β· on
🧠 Speech model size (model)Auto, Tiny, Base, Small, Medium and larger sizesauto
πŸ“– Vocabulary (vocabulary)Comma-separated names, brands and jargon to spell rightempty
πŸ”€ Word-level timestamps (wordTimestamps) Β· Skip silence and music (vadFilter)Start, end and confidence per word; skip silent and music-only partsoff Β· on
⏩ Start at (startAt) Β· End at (endAt) Β· Max minutes per item (maxMinutesPerItem)Transcribe only part of a recording; cap per item (1–600 minutes)empty Β· empty Β· 120
πŸ”’ Number of speakers (numSpeakers) Β· Speaker names (speakerNames)0 = detect automatically (up to 6), or set up to 10; names replace Speaker 1, Speaker 20 Β· empty
πŸ“… Published after (publishedAfter) Β· Published before (publishedBefore)Date filters for feeds, channels and searchesempty
🎯 Title contains (titleContains) · Title excludes (titleExcludes)Words to require or skip; separate alternatives with |empty
⏳ Minimum duration (minDurationSeconds) · Maximum duration (maxDurationSeconds) · Include YouTube Shorts (includeShorts)Duration filters in seconds; also take the newest Shorts of a channel0 · 0 · off
🧹 Clean transcript (cleanTranscript)Adds cleanText without fillers (um, uh), [Music]-type tags and stutterson
πŸ“š RAG chunk size (ragChunkWords) Β· Chunk overlap (ragChunkOverlapWords)Words per chunk and overlap; 0 = no chunks300 Β· 40
πŸ”  subtitleMaxCharsPerLine Β· subtitleMaxLines Β· subtitleMaxSecondsSubtitle layout: characters per line, lines per cue, seconds per cue42 Β· 2 Β· 6
πŸ“Ό includeSubtitlesInRecord Β· includeSegments Β· includeFailedItemsWhat each row containson Β· on Β· on
πŸ“‘ Combined report (combinedReport)One Markdown + Word file with all transcripts and a run summaryoff
πŸ‘€ Watchlist ID (watchlistId) Β· Only new items (newItemsOnly) Β· Reuse saved transcripts (cacheTranscripts)Memory between runs; skip items earlier runs already did; reuse saved transcripts with the same settings (this saves time and platform usage; the result is still charged)empty Β· off Β· on
πŸ“¬ Webhook URL (webhookUrl)Every finished row (without segments, subtitles and chunks) is sent as JSON to your URLempty
⏰ Stop starting new items after (maxRunMinutes)Minutes; items not started by then become free deadline rows0 (off)
πŸͺ Cookies (cookies)A cookies.txt export for age-restricted or members-only media. Stored encryptedempty
⚑ Parallel downloads (maxConcurrency) Β· Retries (maxRetries)1–16 parallel downloads (speech recognition runs one item at a time); 0–10 retries3 Β· 2
πŸ†™ Refresh site support before the runUse it if links from one site suddenly fail. Adds a short wait at the startoff
🌐 Proxy (proxyConfiguration)No proxy by default. If a site blocks the requests, the run switches to Apify Proxy automatically. You can also pick a proxy yourselfno proxy

Start at and End at

⚠️ The Console shows a date picker for these fields. Ignore it and type minutes or hours yourself (or send them as JSON).

These fields mark a point inside the recording, not a calendar date. Type a time from the start of the recording. For example, to transcribe minutes 10 to 40, set Start at to 10 minutes and End at to 40 minutes.

  • βœ… Good: 10 minutes, 1 hour, 90 seconds, 00:10:00, 600
  • ❌ Bad: 2026-09-01

With the default of 2, a feed, channel, playlist or search gives only its 2 newest matching items. Raise it to get more.

  • βœ… Good: 10 to transcribe the last 10 episodes of a podcast
  • ❌ Bad: keeping 2 and expecting a whole back catalog

⚠️ Every delivered transcript is charged, so set this number with your budget in mind.

Transcript source

Auto uses the publisher transcript, then captions, then speech recognition. Captions / published transcripts only never runs speech recognition: items without captions come back as free no_captions rows. Always speech recognition transcribes the audio itself and is slower.

  • βœ… Good: auto for a mix of links
  • ❌ Bad: captions for direct audio files (files never have captions)

Speaker labels and word-level timestamps

Both make the run download the audio, even when captions exist, so runs take longer. Word-level timestamps also use speech recognition for every item. Speaker detection finds up to 6 speakers on its own (it can also return a single speaker), or uses the number you set in Number of speakers (up to 10). Very short or nearly silent audio gets no speaker labels.

  • βœ… Good: turn them on only when you need them
  • ❌ Bad: turning them on for a large caption-only job

Speech model size

Bigger models need more run memory: Tiny and Base 1 GB, Small 2 GB, Medium and the next larger sizes 4 GB, the largest 8 GB. If the run has less memory, the biggest model that fits is used and the log says so. Auto at the default 1 GB uses Base.

  • βœ… Good: auto at 1 GB
  • ❌ Bad: Medium at 1 GB (it falls back to Base)

This only matters for items that need speech recognition. Captions and publisher transcripts are used as they were published. The model sizes trade speed for accuracy: Tiny is the fastest, Base is fast, and Small and bigger are more accurate but slower and need more memory. More memory also gives the run more CPU, but it raises platform usage and the start fee. We don't publish accuracy or speed figures, because they depend on the audio. For a podcast without captions, the simplest check is to transcribe one episode at the default 1 GB, read the text, and only raise the memory and model size if the spelling isn't good enough. Adding names and jargon to Vocabulary also helps.

The spoken language is detected automatically, or you can set it in Spoken language (for example en, es, de or pt-BR). Set it when you know the language; it also picks the caption track in that language. Test a short sample first if your audio is not in English or mixes languages.

Watchlist ID and Only new items

Only new items needs a Watchlist ID (letters, digits, _ and -, up to 64 characters). Without one, it is ignored with a warning. The watchlist is kept in a storage in your Apify account between runs.

  • βœ… Good: "watchlistId": "my-podcasts", "newItemsOnly": true
  • ❌ Bad: "newItemsOnly": true alone

⬆️ Output

Results are saved to a dataset while the run is going. Open the Output tab to see them as a table or JSON, pick a view, and click Export to download them in JSON, CSV, Excel, XML or HTML. You can also choose which fields to export.

Besides All results, each section has its own table: Transcripts, Segments, Insights, Mentions, RAG chunks, Subtitles and Failed items. Export files are in the run's key-value store (Export files), and the combined report (_all_transcripts.md, _all_transcripts.docx, _run_summary.json) is under Combined report.

JSON example

Results for the input example above (long values shortened with "…"; the full row also has paragraphs, cleanText, vtt and more fields):

{
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"inputUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"sourceType": "video",
"platform": "youtube",
"title": "Me at the zoo",
"uploader": "jawed",
"publishedAt": "2005-04-24T03:31:52.000Z",
"durationSeconds": 19,
"language": "en",
"transcriptSource": "captions",
"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really... really really long trunks and that's cool (baaaaaaaaaaahhh!!) and that's pretty much all there is to say",
"wordCount": 39,
"hook3s": "All right, so here we are, in front of the elephants",
"hookStartSeconds": 1.2,
"wordsPerMinute": 148.8,
"summary": "All right, so here we are, in front of the elephants the cool thing about these guys…",
"keywords": ["front", "elephants", "long", "trunks", "baaaaaaaaaaahhh"],
"aiSource": "offline-extractive",
"mentions": [
{
"term": "elephants",
"start": 1.2,
"startTime": "00:01",
"context": "All right, so here we are, in front of the elephants the cool thing about these guys…",
"link": "https://www.youtube.com/watch?v=jNQXAC9IVRw&t=1s"
}
],
"mentionCounts": { "elephants": 1 },
"chunks": [
{
"index": 0,
"start": 1.2,
"end": 18.881,
"startTime": "00:01",
"text": "All right, so here we are, in front of the elephants…",
"wordCount": 39,
"link": "https://www.youtube.com/watch?v=jNQXAC9IVRw&t=1s"
}
],
"segments": [
{
"start": 1.2,
"end": 3.36,
"text": "All right, so here we are, in front of the elephants",
"link": "https://www.youtube.com/watch?v=jNQXAC9IVRw&t=1s"
}
],
"srt": "1\n00:00:01,200 --> 00:00:03,360\nAll right, so here we are, in front of the\nelephants\n…",
"cached": false,
"status": "ok",
"charged": true,
"billableEvent": "caption-transcript",
"billedSeconds": 0,
"billedMinutes": 0,
"error": null
}

There are no speaker fields here because Speaker labels was off. The summary is extractive: it picks the most informative sentences of the transcript (here, the clip is so short that the summary is the whole transcript). It is not written by AI.

billableEvent, billedSeconds and billedMinutes are labels for your information only: they say where the text came from and how many seconds speech recognition handled (0 here, because the text came from captions). Every delivered transcript costs the same result price for your plan ($0.03 on the Free plan), whatever these fields say.

Failed rows

When an item can't be transcribed, its row has charged: false, an error text and one of these status values. These rows are free. billedMinutes is only on successful rows.

statusMeaning
no_speechSilent or music-only media
no_captionsCaptions-only mode and no publisher transcript or captions
source_unavailableThe media could not be fetched (blocked, private, removed, unsupported link, Spotify-only show, post without media)
bad_inputThe input could not be found or read, or it is a live or upcoming stream
transcription_failedSpeech recognition failed
deadlineStop starting new items after was reached before this item started

Export transcript to Word, SRT and more

Pick formats in Export files to get a transcript-… file per item in SRT, VTT, TXT, Markdown, Word (.docx) or JSON, with links in the row's files field. So you can go from video to SRT, or export transcript to Word, in one run. Turn on Combined report for a single Markdown and Word document with every transcript.


πŸ’‘ Tips and advanced usage

How long does a run take?

It depends on your media, so we don't publish speed figures. Items with captions or a publisher transcript finish quicker, because the audio is not downloaded. Items that need speech recognition take longer, longer recordings take longer, and speech recognition handles one item at a time. More memory gives the run more CPU. To plan a big job, time a test run with 1 or 2 typical items. Rows appear in the Output tab as soon as each one is ready.

How many transcripts can you get in one run?

There is no fixed cap beyond your input: up to 500 items per feed, channel, playlist or search, up to 5,000 rows from a chained dataset, and any number of links. How many you actually get depends on whether the media is public, the filters you set and Items per feed / channel / search. The best way to know for your list is a quick test run.

How to get faster or cheaper results

  • Keep Transcript source on Auto: items with captions or a publisher transcript skip the audio download.
  • Leave Speaker labels and Word-level timestamps off unless you need them.
  • Use the filters (dates, title words, duration) so only the items you want are transcribed and charged.
  • For a long video transcriber job, use Start at, End at or Max minutes per item to transcribe only the part you need. The cap also applies to captions and publisher transcripts.
  • More run memory gives the run more CPU and allows bigger speech models. It also raises the start fee and platform usage, so test first.

Run it on a schedule: podcast monitoring

For weekly media monitoring of the podcasts and YouTube channels in your niche:

  1. Save your input as a task. Paste the feeds and channel links into Media links, set Items per feed / channel / search to 5, add your brand and competitor names to Keywords to monitor, set a Watchlist ID such as brand-watch and turn on Only new items. Then save the input as a new task.
  2. Add a schedule. Open Schedules, create a weekly (or daily) schedule and add your task to it.
  3. Compare runs. Thanks to the watchlist, each run transcribes only episodes and uploads that earlier runs haven't done, and items already on the watchlist are not charged again. When nothing is new, the run says so and ends. Open the Mentions table of each run, or compare the mentionCounts column across runs, to see how often each name came up that week.

Add a Webhook URL to get every new transcript row sent to your own tool as soon as it is ready.

Known issues

  • YouTube sometimes asks for sign-in. When a site blocks the requests, the run switches to Apify Proxy automatically. For age-restricted or members-only media, paste a cookies.txt export into Cookies.
  • Spotify-only shows without a public podcast feed can't be transcribed. Apple Podcasts subscriber-only episodes are not in the public listing.
  • If links from one site suddenly fail, turn on Refresh site support before the run and tell us in the Issues tab.

πŸ”Œ Integrations and API

Can I use Universal Media Transcriber as a video transcription API?

Yes. Through the Apify API you can start runs, schedule them and fetch results, so your own code can call it like an audio transcription API: send links or files, get transcript rows back. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. See the API tab for ready-to-use code.

How to transcribe YouTube video to text with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/universal-media-transcriber").call(run_input={
"urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],
"searchTerms": ["elephants"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["status"], item.get("text"))

Can I integrate Universal Media Transcriber with other apps?

Yes. Connect it with almost any cloud service through Apify integrations: Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain and more. Use Apify webhooks to trigger actions when a run finishes, or the Actor's own Webhook URL to receive each finished row. Three workflows that fit the schedule above:

  • Google Sheets mention log: add the Google Sheets integration to your scheduled task. After each run, the new rows go to a sheet with title, url, publishedAt and mentionCounts, so you can see which episodes named your brand.
  • Slack alert per new episode: put a Make, Zapier or n8n webhook address into Webhook URL. Each finished row arrives as JSON, and the scenario posts the title, link and mentionCounts to a Slack channel. Failed rows arrive too, with status and error, so filter on status = ok in the scenario.
  • RAG pipeline: when a run finishes, fetch its rows through the API (or the LangChain integration) and load the chunks with their timestamps and links into your vector database.

Can I use Universal Media Transcriber with AI agents (MCP)?

Yes. Connect it to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps. The RAG chunks are AI-ready: each one has its text, timestamps, the source title and, where the site supports it, a link to that moment.


🧰 Other video and social media scrapers

These Actors from the same author work well next to Universal Media Transcriber when you also need post details, engagement or comments:

  • 🎡 TikTok Profile Scraper: videos, reposts, stories and playlists of a TikTok profile with views, likes, comments, shares, music, hashtags and author stats, plus optional transcripts
  • 🏷️ TikTok Hashtag Scraper: videos of any hashtag in bulk with captions, views, likes, comments, shares, saves and author stats, plus optional transcripts
  • 🎞️ Facebook Post and Reel Scraper: posts, reels and videos from links, pages, profiles and groups with views, reactions, comments, shares, caption, video links and transcript
  • πŸ—¨οΈ TikTok Comments & Replies Scraper: comments and replies from TikTok videos, photo posts and whole profiles
  • 🎬 Bilibili Scraper β€” Videos, Comments, Danmaku & Creator Uploads: Bilibili videos, comments with replies, danmaku (bullet comments) and creator uploads
  • πŸ—žοΈ Google News Scraper: headlines, publisher, publish date and the real article URL by search term, topic or link, for news next to your media monitoring

❓ FAQ

How does Universal Media Transcriber work?

It works like you opening each link and typing out what is said, only faster. It reads all your sources and removes duplicates, expands feeds, channels, playlists and searches into their newest items, and applies your filters. For each item it uses a publisher transcript or the platform's captions when one exists, and speech recognition only when there is none. Then it builds segments, subtitles, chunks, mentions, the summary and keywords, and saves the row right away.

Is it a transcript scraper or a transcript generator?

Both. When captions or a published transcript exist, it collects them like a transcript scraper; when they don't, it makes the text from the audio like a transcript generator. The transcriptSource field tells you which one happened. On YouTube links with captions it behaves like a YouTube transcript extractor; on audio files and podcasts without a published transcript, it is a media transcriber that works from the audio.

How to transcribe a podcast with Universal Media Transcriber?

Paste the podcast's RSS feed, Apple Podcasts link or Spotify show link into Media links and set Items per feed / channel / search to the number of episodes you want. That is all you need to transcribe podcast episodes in bulk. To transcribe podcast from RSS feed on a schedule, add a Watchlist ID and turn on Only new items.

Can I get a Spotify podcast transcript?

Yes, when the show is also published as a public podcast feed. The episode is found in that feed and transcribed. Spotify-only shows without a public feed come back as a free source_unavailable row.

Can I transcribe Google Drive video and audio files?

Yes. To transcribe Google Drive video files, share them with "anyone with the link" and paste the share link. Dropbox and OneDrive links work the same way. To transcribe audio file uploads instead, use Upload audio or video files: each file becomes one transcript. As an audio to text transcriber it handles mp3, m4a, wav, flac and other common formats.

Can I transcribe a whole YouTube playlist or channel?

Yes. To transcribe YouTube playlist items or a channel's uploads, paste the playlist or channel link and raise Items per feed / channel / search (up to 500). Turn on Include YouTube Shorts to get a YouTube Shorts transcript for the newest Shorts of a channel as well.

Does it use YouTube captions or speech to text?

It uses YouTube captions when the video has them (creator captions or, if Accept auto-generated captions is on, automatic ones). Without captions it switches to speech recognition. Choose Always speech recognition in Transcript source if you want the audio transcribed every time.

How is captions mode different from speech recognition?

The three Transcript source options differ in where the text comes from. The price per delivered transcript is the same in every mode ($0.03 on the Free plan, lower on paid plans).

Auto (best available)Captions / published transcripts onlyAlways speech recognition
Uses a publisher transcript or captionsβœ… first choiceβœ… only sourceOnly the site's captions, as a fallback when the audio can't be fetched
Transcribes the audio itselfβœ… when nothing else existsβŒβœ… every item
Items without captionsTranscribed from the audioFree no_captions rowTranscribed from the audio
Downloads the audioOnly when neededβŒβœ… (slower)

Does it support speaker diarization?

Yes. Turn on Speaker labels for speaker diarization: segments, paragraphs and subtitles get Speaker 1, Speaker 2 (or the names you set in Speaker names), and each row gets talk time per speaker. It detects up to 6 speakers on its own, or uses your Number of speakers (up to 10). Very short or nearly silent audio gets no labels.

Transcribing publicly available videos for research, accessibility or personal analysis is generally fine, but republishing someone else's words can be limited by copyright. Respect personal data rules such as GDPR, the platforms' terms (for example the YouTube Terms of Service) and the creators' rights. This is not legal advice; ask a lawyer for your specific case.

Why am I getting fewer results than expected?

  • Items per feed / channel / search defaults to 2. Raise it.
  • Filters (dates, title words, duration) remove items before they are transcribed, and those items get no row.
  • Check the Failed items table: the status and error columns say why an item has no transcript.
  • If you set Maximum cost per run or Stop starting new items after, the run may have stopped early on purpose.

πŸ“§ Support and feedback

Found a bug or have a feature request? Please create an issue on the Issues tab.

Need a custom solution or a different transcript format? Contact us at hello.insights.data@gmail.com.

Built and maintained by Insights Data.