Audio & Podcast Transcriber (Speech to Text) icon

Video & audio · Live on Apify

Audio and Podcast Transcriber

Turn audio files or podcast episodes into text. You get timestamps and SRT or VTT subtitles if you want them. No OpenAI key is needed.

About $9.82 for 1,000 minutes of audio$0.0098 per minute of audio + $0.02 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

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

What you get, for example

sourceUrlhttps://www.archive.org/download/aesop_fables_volume_three_librivox/fa…
sourceTypeurl
durationSec77.95

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  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://www.archive.org/download/aesop_fables_volume_three… in Audio or video file URLs. 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

Podcast and audio transcription with timestamps. Add direct links to MP3, M4A, WAV, OGG, Opus or MP4 files, or a podcast RSS feed, and get the text, plus SRT or VTT subtitles if you want them.

  • Input: direct media links (audioUrls), or a podcast RSS feed or Apple Podcasts show link (podcastRssUrl).
  • Output: the transcript text, timed segments {start, end, text}, SRT or WebVTT subtitles, the detected language and the episode details from the feed.
  • Languages: Whisper detects the spoken language. You can also choose it, or translate the speech to English.
  • Privacy: the audio is processed inside the run and is not saved to storage.

Good for

  • Transcribe the newest episodes of a podcast from its RSS feed.
  • Make SRT or VTT subtitles for a video file you host.
  • Turn interviews, lectures and voice notes into searchable text for notes, search or an AI pipeline.

Not a good fit

  • No downloads from YouTube, TikTok, Spotify, Instagram or other page links. The link must point straight to a media file (the URL usually ends with .mp3, .m4a, .wav, .ogg, .mp4 and so on).
  • No speaker labels (who said what). There is one text stream per file.
  • Live streams are not supported.
  • Whisper can misspell names and rare words. Check important quotes against the audio.

Who uses it

Podcasters

Get text for show notes and search from new episodes.

Video makers

Make SRT or VTT subtitles for videos you host.

Researchers and students

Turn interviews and lectures into searchable text.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.01Charged once per run, one fee per GB of memory. This tool uses 2 GB by default, so $0.02 per run.
Transcribed minute (tiny/base)$0.0098 (from $0.0083 on paid Apify plans)One started minute of audio transcribed with the tiny or base model, counted per file. Broken links, missing files, web pages and skipped files are not charged.
Transcribed minute (small model)$0.032 (from $0.028 on paid Apify plans)One started minute of audio transcribed with the more accurate small model, counted per file. Broken links, missing files, web pages and skipped files are not charged.

Examples

  • One minute of audio: about $0.03.
  • 1,000 minutes of audio: about $9.82.
  • Every day 100 minutes of audio, for 30 days: about $30.00 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 500 minutes of audio.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can I paste a YouTube or Spotify link?

No. The link must point straight to a media file, like an .mp3 or .mp4. For page links, use our Video URL to Text tool.

Does it know who is speaking?

No. There are no speaker labels.

Are my files stored?

No. The file is transcribed and deleted. Only the text is saved.

How long can a file be?

Up to 180 minutes and 1.5 GB per file.

Do I need an OpenAI or other API key?

No. The Whisper model runs inside the Actor. You only pay the Apify events above.

Which languages work?

Whisper supports about 100 languages. We tested English and Spanish. Quality is best for English and other widely spoken languages; small helps for others.

Details

Step by step on Apify
  1. Open the Input tab.
  2. In Audio or video URLs (audioUrls), keep the example LibriVox file or paste your own direct media link.
  3. Keep the defaults: model base and output segments.
  4. Click Start.
  5. Open the Transcripts view in the Output tab and read the text column.
Use cases
TaskInputYou getKey fieldsNext step
Podcast show notes and searchpodcastRssUrl + maxEpisodesone row per episodetitle, publishedAt, text, segmentssend text to a summary or search tool
Subtitles for your videoaudioUrls + outputFormat: srtone row per filesubtitles, languagesave subtitles as a .srt file
Meeting or interview notesaudioUrlsone row per filetext, wordCount, durationSecpaste text into notes or an AI agent
English version of foreign audioaudioUrls + translateToEnglishone row per filetext, language, taskread or index the English text
Tips for better results
  • Use the podcast RSS feed to get the newest episodes in one go.
  • Put many files in one run to share the start fee.
  • Turn on translate to get English text from other languages.
Limits and good to know
  • Up to 180 minutes per file (maxDurationMinutes), up to 100 links and 50 feed episodes per run
  • Files up to 1.5 GB
  • The default run timeout is 3600 seconds. A 3-hour file with base at 2048 MB takes about 38 minutes. For several long files, raise the timeout or the memory
  • When the run timeout comes near, the current file is saved as partial and the remaining files get RUN_TIME_LIMIT
  • Partial and failed rows are never charged for audio that was not transcribed. A partial row is charged only for the minutes in its text

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
{
  "sourceUrl": "https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aesop_64kb.mp3",
  "sourceType": "url",
  "podcastTitle": null,
  "title": null,
  "publishedAt": null,
  "episodeGuid": null,
  "episodeUrl": null,
  "status": "complete",
  "durationSec": 77.95,
  "transcribedSec": 77.95,
  "truncated": false,
  "language": "en",
  "languageProbability": 0.991,
  "task": "transcribe",
  "model": "base",
  "text": "This is a LibraVox recording. All LibraVox recordings are in the public domain. …",
  "wordCount": 161,
  "segments": [
    {"start": 0.75, "end": 3.65, "text": "This is a LibraVox recording."},
    {"start": 3.65, "end": 6.97, "text": "All LibraVox recordings are in the public domain."}
  ],
  "subtitles": null,
  "chargedMinutes": 2,
  "processingSec": 7.9,
  "error": null,
  "fetchedAt": "2026-10-13T14:43:36Z"
}

Use it from code

Actor ID: cliqtomedia/audio-video-transcriber. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/audio-video-transcriber").call(run_input={
    "audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…",
    "maxEpisodes": 3
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~audio-video-transcriber/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…", "maxEpisodes": 3}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/audio-video-transcriber")
result = tool.invoke({"run_input": {"audioUrls": "[\"https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…", "maxEpisodes": 3}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (23)
FieldTypeMeaning
sourceUrlstringMedia file URL (as given, or the RSS enclosure URL).
sourceTypestringurl (from audioUrls), rss_episode (feed episode) or rss_feed (feed-level error row).
podcastTitlestringPodcast name from the RSS feed.
titlestringEpisode title from the RSS feed.
publishedAtstringEpisode publish date from the feed, ISO 8601 UTC.
episodeGuidstringEpisode GUID from the feed.
episodeUrlstringEpisode web page link from the feed.
statusstringcomplete (whole file), partial (only the first part was transcribed: duration limit, spending cap, time budget or an interrupted download), not_found (HTTP 404/410, feed without audio episodes) or error (see the error field).
durationSecnumberMedia duration in seconds when known.
transcribedSecnumberSeconds of audio transcribed; charged minutes are this value rounded up to whole minutes.
truncatedbooleantrue when only the first part of the file was transcribed.
languagestringLanguage code used (detected or chosen).
languageProbabilitynumberConfidence of language detection, 0–1.
taskstringtranscribe or translate.
modelstringWhisper model used: tiny, base or small.
textstringFull transcript text.
wordCountintegerWords in text.
segmentsarrayTimed segments {start, end, text} in seconds; null when outputFormat is text.
subtitlesstringSRT or WebVTT file content when outputFormat is srt or vtt.
chargedMinutesintegerMinutes charged for this file (0 on errors).
processingSecnumberDownload, decode and transcription time in seconds.
errorobject{code, message}: e.g. NOT_FOUND, UNSUPPORTED_SOURCE, NOT_MEDIA, NO_AUDIO, FILE_TOO_LARGE, DOWNLOAD_TIMEOUT, TOO_SLOW, INVALID_FEED, TRUNCATED (partial), CHARGE_LIMIT, RUN_TIME_LIMIT, ABORTED and SKIPPED_SLOW_SOURCES (file skipped, not charged); null when none.
fetchedAtstringWhen the row was produced, ISO 8601 UTC.
Input settings (8)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Audio or video file URLsaudioUrlsarray["https://www.archive.org/download/aesop_fables_volume_three_librivox/fables_03_01_aeso…
Podcast RSS feed URLpodcastRssUrlstring
Max episodesmaxEpisodesinteger3
Modelmodelstring"base"
Languagelanguagestring"auto"
Output formatoutputFormatstring"segments"
Translate to EnglishtranslateToEnglishbooleanfalse
Max minutes per filemaxDurationMinutesinteger120

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