Audio to Text: Uploaded & Direct Audio Files
Pricing
from $4.80 / 1,000 audio minutes
Audio to Text: Uploaded & Direct Audio Files
Convert audio files to text: paste direct MP3, WAV, M4A, OGG or FLAC links or upload recordings, and get each transcript as text plus TXT and Markdown files. Whisper, 90+ languages, $0.006 per audio minute. Failed or silent files are free.
Pricing
from $4.80 / 1,000 audio minutes
Rating
0.0
(0)
Developer
Yukai Lin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
What does Audio to Text: Uploaded & Direct Audio Files do?
Paste links to your audio files or upload recordings, and get each one back as a text transcript with timestamps plus a TXT and a Markdown file, for $0.006 per audio minute (Whisper, 90+ languages). Failed or silent files are free.
It is made for audio files you already have: MP3, WAV, M4A, AAC, OGG, OPUS, FLAC and other formats ffmpeg can read, from a direct download link or uploaded in Apify Console. Video files (MP4, MOV, WEBM...) work too; only their sound is used. Files up to 2 GB, any length.
How to use: convert an audio file to text
- Paste direct file links, one per line, into Audio file URLs (
urls). Each link must download in a signed-out or private browser window. Or upload recordings from your computer under Or upload audio files (audioFiles). - Optional: set the Language (empty = detected automatically) and Vocabulary hints for names and terms.
- Click Start. Each file becomes one row with the transcript (
text), its language, the billed minutes and a link to its.txtfile (txtUrl; the Markdown file ismdUrl). - Open the files from those links, download the dataset as JSON, CSV or Excel, or call the Actor from the API.
First run: try the prefilled example
The form already holds one short English speech sample in Audio file URLs: click Start without changing anything. It produces one row with the transcript and charged: true, billed one audio minute ($0.006). No podcast feed is prefilled in this version, so nothing else is transcribed. Then replace the sample with your own links or uploads.
Choose a recording with spoken words. A music-only or silent file comes back as a free row with errorType: "no_text" and noSpeech: true.
Output
The default table shows one row per file:
| Column | Meaning |
|---|---|
input | The line you gave (link or uploaded file) |
url | The audio file that was processed |
text | The full transcript (empty on a no-speech row) |
language | Language of the transcript, e.g. en |
txtUrl | Link to the plain-text transcript file |
billedMinutes | Audio minutes charged for this row (0 on every free row) |
charged | true when this row was billed, false on every failure, skipped or no-speech row |
errorType | Why a row failed, e.g. invalid_input, no_text, not_found, blocked, too_large (absent on success) |
The full JSON row also has timed segments, paragraphs, durationSeconds, wordCount and mdUrl; the Transcripts (all columns) view shows more of them. With two or more transcripts in a run, one combined TXT and Markdown file is saved too (SUMMARY.combinedTranscript).
Subtitles are off by default here. Turn on Save SRT and VTT subtitles (saveSubtitles: true) to also get srtUrl and vttUrl for every file, at no extra charge.
Pricing
| Event | Price (Free and Bronze plans) | When |
|---|---|---|
| Audio minute | $0.006 (Silver $0.0054, Gold and above $0.0048) | Each started minute of a transcribed file |
| Audio minute with speaker labels | $0.015 (Silver $0.0135, Gold and above $0.012) | Instead of the regular minute, only with Speaker labels on |
| AI summary and chapters | $0.01 per file | Only with AI summary and chapters on |
| Translated subtitles | $0.002 per minute and language | Only with Translated subtitles set, for languages that succeed |
A 60-minute recording costs $0.36. Rows with success: false are never charged: a line that is not a link (invalid_input), a missing or refused file, a file with no speech (no_text), files skipped at your limits. Set Apify's Maximum cost per run in Run options or Max total minutes per run (maxTotalMinutes) to cap a run.
Other sources still work
This Actor runs the same transcription engine, prices and rules as Audio Transcription (tidytools/audio-transcriber). Only the form is set up for audio files: the file fields come first, the example is a single speech sample, no podcast feed is prefilled and subtitles are off by default. Nothing else is turned off. Everything the engine accepts is still processed and charged the same way when you add it, in the form under Other sources (optional) or in the JSON input:
- Google Drive, Dropbox, OneDrive and other share links ("anyone with the link"), presigned storage links and web pages with one audio or video file, pasted in
urls. - YouTube, TikTok, Instagram Reel, Loom, Wistia, Streamable and v.redd.it video links, pasted in
urls. - Podcast RSS feeds or Apple Podcasts links (
podcastFeeds, or pasted inurls), with episode count, date and title filters. - Another Actor's dataset (
datasetId) or its rows pasted intodatasetItems, withdatasetFieldnaming the URL field (dot paths such asmedia.urlwork). Only the media link is used; other columns of those rows are not copied to the results. - The request-list field
audioUrlsof earlier integrations.
See the Audio Transcription README for the details of each source, speaker labels, keyword search, meeting notes, schedules and the n8n / Make integration.
How files are downloaded
- Each file is requested with our own User-Agent (
TidyToolsTranscriber), without cookies or logins. With Download User-Agent on Auto (default), a file whose host refuses it is requested once more with a standard desktop browser User-Agent string (a plain header; no CAPTCHA solving, no browser automation). Choose "TidyTools only" to never switch. - With Download files from on Auto (default), a file that Apify's network cannot get is tried through our own servers. When a host sends Retry-After, the Actor waits that long.
- robots.txt is not read for the links you give: each link is fetched as one user-supplied file or page, nothing is crawled. Reddit post and profile pages are never read (Reddit's robots.txt does not allow it); pass the v.redd.it video link instead.
- A file that is private, missing, expired or refused comes back as a free row that says why (
not_found,link_expired,blocked, ...), andretryable: truemarks the ones worth trying again later.
Input (copy and paste)
{"urls": ["https://webcapture-api.yukailin.workers.dev/samples/speech-sample.wav"],"language": "en"}
Limitations
- Each link must be a public file that downloads without signing in; files up to 2 GB. The Actor never uses cookies or logins and never solves CAPTCHAs, so private or refused files come back as free error rows.
- Only spoken words are transcribed: music-only or silent files are free
no_textrows. - Uploads (
audioFiles) work in Apify Console only; in API calls pass file URLs inurls. - Speaker labels are not available for some languages (e.g. Chinese) or for YouTube links; those rows fail as free
unsupportedrows. - Reddit post and profile pages are not read; use the v.redd.it video link.
FAQ
Why is a row no_text? No speech was found (silence or music only). The row is free; check that the recording has spoken words.
A link fails with invalid_input. The line is not a URL. Put one link per line; each bad line is its own free row and the other files still run.
Can I upload files through the API? In API calls, pass file URLs in urls. audioFiles is the upload field of Apify Console.
Where are the subtitle files? Turn on saveSubtitles to get srtUrl and vttUrl; they are off by default in this version.
Optional content pack
Set "contentPack":true for chapter, show notes, X and LinkedIn drafts in contentPack. Add "contentPackSubtitleLanguages":["Spanish"] for one translated SRT/VTT language in contentPack.translatedSubtitles (the existing $0.002/started-minute subtitle event applies on success). Drafts require review before publishing. Off by default; existing output and charges stay the same. A failed pack has contentPackError and no pack charge. Charge starts 2026-11-06 or later: one $0.10 content-pack event per successful pack, in addition to existing audio-minute charges. Until the operator sets CONTENT_PACK_CHARGE_FROM to an announced date on or after 2026-11-06 and that date arrives, the text pack is free.