# Audio and Podcast Transcriber

> Podcast transcriber: turn MP3, M4A, WAV or MP4 links or a podcast RSS feed into text with timestamps and SRT or VTT subtitles. No OpenAI key needed.

URL: https://cliqtomedia.com/actors/audio-video-transcriber/

Category: Video, audio & streaming · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/audio-video-transcriber?fpr=cliqto

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.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify 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 Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `[&quot;https://www.archive.org/download/aesop_fables_volume_three…` in Audio or video file URLs. Each start is one run.
3. **Download the results.** When 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.

## 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.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.01 | Charged 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. |

- 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.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/audio-video-transcriber?fpr=cliqto

## 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.

## Data fields

- `sourceUrl` (string): Media file URL (as given, or the RSS enclosure URL).
- `sourceType` (string): url (from audioUrls), rss_episode (feed episode) or rss_feed (feed-level error row).
- `podcastTitle` (string): Podcast name from the RSS feed.
- `title` (string): Episode title from the RSS feed.
- `publishedAt` (string): Episode publish date from the feed, ISO 8601 UTC.
- `episodeGuid` (string): Episode GUID from the feed.
- `episodeUrl` (string): Episode web page link from the feed.
- `status` (string): complete (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).
- `durationSec` (number): Media duration in seconds when known.
- `transcribedSec` (number): Seconds of audio transcribed; charged minutes are this value rounded up to whole minutes.
- `truncated` (boolean): true when only the first part of the file was transcribed.
- `language` (string): Language code used (detected or chosen).
- `languageProbability` (number): Confidence of language detection, 0–1.
- `task` (string): transcribe or translate.
- `model` (string): Whisper model used: tiny, base or small.
- `text` (string): Full transcript text.
- `wordCount` (integer): Words in text.
- `segments` (array): Timed segments {start, end, text} in seconds; null when outputFormat is text.
- `subtitles` (string): SRT or WebVTT file content when outputFormat is srt or vtt.
- `chargedMinutes` (integer): Minutes charged for this file (0 on errors).
- `processingSec` (number): Download, decode and transcription time in seconds.
- `error` (object): {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.
- `fetchedAt` (string): When the row was produced, ISO 8601 UTC.

## Input settings

- `audioUrls` (array): Up to 100 public http(s) links straight to a media file: MP3, M4A, WAV, OGG, Opus, MP4 and other common audio and video formats. Page links from YouTube, TikTok, Spotify, Instagram and similar sites are not supported. No login, cookies or private networks; duplicates are processed once.
- `podcastRssUrl` (string): Optional. A podcast RSS feed URL, or an Apple Podcasts show link (podcasts.apple.com/.../id123). The newest episodes are transcribed, up to Max episodes.
- `maxEpisodes` (integer): How many of the newest feed episodes to transcribe. Used only with a podcast RSS feed.
- `model` (string): Whisper model size. tiny and base share one price per minute; small is charged at a higher price per minute.
- `language` (string): Spoken language. Detect automatically uses the first 30 seconds; pick the language when you know it for better results.
- `outputFormat` (string): Every row has the full text. segments adds a list of {start, end, text}; srt or vtt adds a ready subtitle file in the subtitles field.
- `translateToEnglish` (boolean): Return an English translation instead of a transcript in the original language (Whisper translate task).
- `maxDurationMinutes` (integer): Only the first N minutes of each file are transcribed and charged; longer files return status partial. Up to 180.

## 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

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Podcast show notes and search | `podcastRssUrl` + `maxEpisodes` | one row per episode | `title`, `publishedAt`, `text`, `segments` | send `text` to a summary or search tool |
| Subtitles for your video | `audioUrls` + `outputFormat: srt` | one row per file | `subtitles`, `language` | save `subtitles` as a `.srt` file |
| Meeting or interview notes | `audioUrls` | one row per file | `text`, `wordCount`, `durationSec` | paste `text` into notes or an AI agent |
| English version of foreign audio | `audioUrls` + `translateToEnglish` | one row per file | `text`, `language`, `task` | read or index the English text |

## Tips

- 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



- 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`.

## Sample 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`

```python
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)
```

```bash
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}'
```

```python
# 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)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [One piece of content, ten new posts](https://cliqtomedia.com/actors/use-cases/content-repurposing/): Turn videos, podcasts, PDFs and articles into clean text. Make posts, notes and AI drafts from it.

## Similar tools

- [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/)
- [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/)
- [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/)
- [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/)
- [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/)
- [Kick Live Streams & Viewer Count (Official API), No Login](https://cliqtomedia.com/actors/kick-channels/)
