Speech to Text from Links: MP3, MP4, Google Drive, Podcast RSS
Pricing
from $11.60 / 1,000 minute of transcribed audios
Speech to Text from Links: MP3, MP4, Google Drive, Podcast RSS
Transcribe audio and video files from public links: MP3, M4A, WAV, MP4, MOV and more, Google Drive and Dropbox share links, podcast RSS feeds and Apple Podcasts. Full text, timestamped segments, SRT and VTT subtitles, 99 languages auto-detected. Pay only per transcribed minute.
Pricing
from $11.60 / 1,000 minute of transcribed audios
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Speech to Text from Links - transcribe MP3, MP4, Google Drive, Dropbox and podcast audio
Paste a link to an audio or video file and get the transcript back: the full text, timestamped segments, ready-made SRT and WebVTT subtitles, and the spoken language detected automatically (99 languages).
Works with the links you already have. Direct file links (MP3, M4A, WAV, OGG, OPUS, FLAC, AAC, MP4, MOV, WEBM, MKV and more), Google Drive and Dropbox share links, podcast RSS feeds and Apple Podcasts show or episode pages. No upload step, no account to connect.
Pay only for audio that became text. You are charged per minute of transcribed audio. A link that cannot be read, a video with no sound, music with no speech, a file over your length limit - each comes back as its own row with the reason, and none of them is charged.
Two accuracy modes, or your own key.
| Mode | Model | Best for | Speed (one hour of audio) | Price |
|---|---|---|---|---|
| Fast (default) | Whisper base, runs inside the Actor | Clear English speech, quick drafts, large podcast backlogs | about 15 to 25 minutes | lowest per minute |
| Accurate | Whisper small, runs inside the Actor | Names, numbers, famous quotes, non-English speech | about 45 to 60 minutes | "accurate" price per minute |
| Your own OpenAI or Groq key (optional) | OpenAI whisper-1, or Groq whisper-large-v3-turbo / whisper-large-v3 | The largest models, billed to your own OpenAI or Groq account | depends on the provider | lowest price per minute here |
Same 20-second clip (JFK, "We choose to go to the moon"), transcribed in our test runs:
- Fast: "We choose to go to the moon and disdicate and do the other things, not because they are easy, but because they are hot."
- Accurate: "We choose to go to the moon in this decade and do the other things. Not because they are easy, but because they are hard."
Built for podcasts on a schedule. Add a feed, turn on Only episodes not transcribed before, and schedule the run: each new episode is transcribed once, as soon as it is published.
What you get
One row per file:
| Field | What it holds |
|---|---|
text | The full transcript as one block of text |
segments | Timestamped pieces: start, end (seconds) and text |
srt, vtt | Subtitle files as text, ready to save as .srt / .vtt |
language, languageProbability | Detected language code (en, es, ja ...) and how sure the detection is (0-1) |
durationSeconds, chargedMinutes | Length of the audio that was transcribed, and the minutes charged for it |
wordCount, characterCount, segmentCount | Size of the transcript (wordCount is empty for languages written without spaces, such as Japanese, Chinese and Thai) |
title, publishedAt, feedUrl | Episode title, publish date and feed for podcast episodes; the file name for other links |
url, mediaUrl, sourceType | The link you gave, the file that was read, and where it came from (direct, google-drive, dropbox, podcast-feed, apple-podcasts) |
status, note | ok for a transcript, otherwise the reason (see below) |
The dataset has three views: Transcripts, Subtitles (SRT / VTT) and Files not transcribed.
Example output (one podcast episode, shortened)
A real row from the newest episode of NASA's Houston We Have a Podcast feed (59 minutes 32 seconds, transcribed in about 17 minutes):
{"url": "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast","mediaUrl": "https://traffic.megaphone.fm/NATIONALAERONAUTICSANDSPACEADMINISTRATION6740428946.mp3","sourceType": "podcast-feed","feedUrl": "https://www.nasa.gov/feeds/podcasts/houston-we-have-a-podcast","title": "Reflections After Artemis II with Victor and Jeremy","publishedAt": "2026-10-16T13:00:00.000Z","status": "ok","language": "en","languageProbability": 0.998,"durationSeconds": 3572,"chargedMinutes": 60,"text": "Houston, we have a podcast. Welcome to the official podcast of the NASA Johnson Space Center, episode 441, Reflections After Artemis II. I'm Gary Jordan, and I'll be your host today. On this podcast, we bring in the experts, scientists, engineers, and astronau ...","wordCount": 11401,"characterCount": 59548,"segmentCount": 1005,"segments": [{"start": 0,"end": 8.44,"text": "Houston, we have a podcast. Welcome to the official podcast of the NASA Johnson Space Center, episode 441, Reflections After Artemis II."},{"start": 8.44,"end": 17.32,"text": "I'm Gary Jordan, and I'll be your host today. On this podcast, we bring in the experts, scientists, engineers, and astronauts all to let you know what's going on in the world of human spaceflight and more."}],"srt": "1\n00:00:00,000 --> 00:00:08,440\nHouston, we have a podcast. Welcome to the official podcast of the NASA Johnson Space Ce ...","vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:08.440\nHouston, we have a podcast. Welcome to the official podcast of the NASA Johnson Sp ...","model": "whisper-base","note": null}
Input
| Field | What it does |
|---|---|
Audio or video file links (urls) | One or more links: direct file links, Google Drive / Dropbox share links, a podcast RSS feed or an Apple Podcasts page |
Podcast feeds (podcastFeeds) | Optional. RSS feeds or Apple Podcasts show links; the newest episodes are transcribed |
Episodes per feed (maxEpisodesPerFeed) | How many of the newest episodes to take from each feed (default 3) |
Only episodes not transcribed before (onlyNewEpisodes) | For scheduled runs: skip episodes already transcribed from the same feed |
Accuracy (accuracy) | Fast (Whisper base, default) or Accurate (Whisper small: fewer wrong words, about 3 times slower, charged at the accurate price) |
Your OpenAI or Groq API key (apiKey) | Optional and stored encrypted. With a key, recognition runs on your OpenAI or Groq account and minutes are charged at the lower own-key price. The key is sent only to that provider and never written to the results or the log |
Spoken language (language) | Detect automatically (default), or pick the language for short or noisy recordings |
Max minutes per file (maxMinutesPerFile) | Longer files are skipped and not charged (default 120, up to 240) |
Max total minutes per run (maxTotalMinutes) | A cap on the minutes one run can charge (default 300). The default fits inside the default 6-hour run timeout in both modes; see Which limit stops first below |
Ready-made inputs
Transcribe a few files:
{ "urls": ["https://example.com/interview.mp3", "https://drive.google.com/file/d/FILE_ID/view?usp=sharing"] }
The three newest episodes of a podcast:
{ "podcastFeeds": ["https://podcasts.apple.com/us/podcast/houston-we-have-a-podcast/id1209883012"], "maxEpisodesPerFeed": 3 }
Every new episode, once (schedule this daily):
{ "podcastFeeds": ["https://feeds.example.com/show.xml"], "maxEpisodesPerFeed": 5, "onlyNewEpisodes": true }
Google Drive and Dropbox
Set the file's sharing to "Anyone with the link" and paste the share link as it is (drive.google.com/file/d/... or dropbox.com/scl/fi/...). The Actor turns it into the file's download address. A file that is not shared comes back as not_public with a note, and is not charged. Folders are not supported - share each file.
When a file is not transcribed
status | Meaning | Charged |
|---|---|---|
unsupported_site | A YouTube, TikTok, Instagram, Facebook, X, Vimeo, Spotify, SoundCloud or similar page. These are not downloaded | No |
not_media | The link opens a web page, a document or an image, not audio or video | No |
not_public | Google Drive / Dropbox file that is not shared with "Anyone with the link" | No |
unreachable | The server could not be reached, or answered 404 / 403 / 5xx | No |
no_audio | The video has no sound track | No |
no_speech | There is sound but no speech (music, silence) | No |
too_long | Longer than Max minutes per file | No |
run_limit / charge_limit | Left out by Max total minutes per run or by your maximum cost per run | No |
time_limit | Left out because the run would hit its timeout before this file is finished | No |
no_new_episodes | Nothing new in the feed since the last run | No |
bad_input | Not a usable link (a folder, a private network address, not http/https) | No |
failed | The audio could not be decoded or recognised | No |
Good to know
- Without an API key, speech recognition runs inside the Actor (Whisper base in Fast mode, Whisper small in Accurate mode). Your audio is not sent to any other transcription service.
- With your own key, the audio is sent in 10-minute WAV pieces to OpenAI or Groq only, using your key; their usage and data rules apply, and they bill you for the recognition.
- A one-hour recording usually takes about 15 to 25 minutes in Fast mode and about 45 to 60 minutes in Accurate mode. Files are processed one after another. The default run timeout is 6 hours.
- Which limit stops first. The default run timeout is 6 hours. 300 minutes (the default Max total minutes per run) take at most about 5 hours 15 minutes in Accurate mode and about 2 hours in Fast mode, so with the defaults the minute cap stops first. If you raise Max total minutes per run, the run timeout can come first (about 300 minutes of audio in Accurate mode and about 800 in Fast mode fit in 6 hours). Before each file the Actor checks the time left, and a file that cannot finish in time gets a
time_limitrow and is not charged. To transcribe more in one run, raise Timeout in the run options as well. - If Apify moves a run to another server while it is running, the run continues where it stopped. Files already delivered are not transcribed or charged again.
- Long recordings are recognised in pieces of about 20 minutes; timestamps run continuously across the whole file.
- Podcast hosts that count downloads will count one download per transcribed episode.
Frequently asked
How do I transcribe an MP3 or MP4 from a link? Paste the link into Audio or video file links and run. You get one row with the full text, timestamped segments and SRT / VTT subtitles.
How do I transcribe a file stored in Google Drive? Share the file with "Anyone with the link", copy the share link, and paste it. The Actor downloads the file itself, not the preview page.
How do I get a transcript of every new podcast episode? Add the RSS feed or Apple Podcasts link under Podcast feeds, turn on Only episodes not transcribed before, and schedule the Actor. Each episode is transcribed and charged once.
How do I make subtitles for a video? Run the video link and copy the srt or vtt field into a .srt / .vtt file. The Subtitles (SRT / VTT) view shows them side by side.
Which languages does it understand? 99 languages, detected automatically. Accuracy is highest for English and other widely spoken languages; for other languages choose Accurate or use your own key. See Limitations.
Fast or Accurate - which should I pick? Fast for clear English and large backlogs. Accurate when names, numbers or quotes must be right, or the speech is not English. In our tests Accurate fixed a famous 20-second quote that Fast got wrong (see the table at the top).
Can I use my own OpenAI or Groq account? Yes. Paste your API key in Your OpenAI or Groq API key. Recognition then runs on your account and this Actor charges its lower own-key price per minute. Leave the field empty to use the built-in models.
Am I charged for files that fail? No. Only files that produce a transcript are charged, by the minute of audio, rounded up per file.
Limitations
- Fast mode makes real mistakes even on famous English audio: in our test it heard JFK's "in this decade ... because they are hard" as "and disdicate ... because they are hot", and wrote crew names Wiseman / Koch / Hansen as Weizmann / Cook / Hanson. Accurate mode got the JFK clip right, but still wrote "Koch" as "Cook".
- Non-English speech is harder. On a Japanese reading of a 1920 short story (Akutagawa, "Toshishun"), Fast turned the title name and old place names into nonsense (杜子春 as トッシュン, 唐の都洛陽 as 東の宮校楽洋, 日暮れ as ヒムレ). Accurate fixed common words (日暮れ, 憐れな身分) but still missed the rare names (杜子春 as 年春, 洛陽 as 楽園). For names and rare words in non-English audio, use your own OpenAI or Groq key (larger models).
- Speakers are not separated or labelled (no "Speaker 1 / Speaker 2").
- A word that falls exactly on the boundary between two 20-minute pieces can be cut or repeated.
- When a server does not report the file length, the length is known only after the audio is read; a file over Max minutes per file is then skipped at that point, still without charge.
- Video and social platforms (YouTube, TikTok, Instagram and similar) are not supported. Use a direct link to a file you are allowed to download.
- Files must be publicly downloadable without signing in. Files up to 240 minutes.
Pricing
Pay per event: you are charged for each minute of transcribed audio, rounded up per file (a 2 minute 5 second file is 3 minutes). There are three per-minute prices, one per mode: Fast, Accurate, and own key (the lowest; OpenAI or Groq bill you separately for the recognition). One run uses one mode. Rows that explain a problem - unreadable links, no audio, no speech, too long, skipped by your limits - are never charged.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Need another source, field or format? Tell us in the Issues tab.
- Found a wrong transcript or a bug? Post the run ID in the Issues tab. Wrong data is the thing we fix first.