# Podcast Transcriber: Episodes to Text + SRT Subtitles (`spellzcode/podcast-transcriber`) Actor

Transcribe podcast episodes from any RSS feed or Apple Podcasts link with Whisper large-v3-turbo: latest episodes, date or title filters, 99 languages, SRT and VTT subtitles included. $0.008 per audio minute.

- **URL**: https://apify.com/spellzcode/podcast-transcriber.md
- **Developed by:** [Mårten Fitzback](https://apify.com/spellzcode) (community)
- **Categories:** AI, Videos
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.60 / 1,000 audio minute transcribeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Podcast Transcriber: Episodes to Text + SRT

Transcribe podcast episodes to text from **any RSS feed or Apple Podcasts link**. Pick the latest episodes, or filter
by date or title. Every episode comes back with its transcript and **SRT and VTT subtitle files**. Uses Whisper
large-v3-turbo, which handles 99 languages and episodes up to 10 hours.

**$0.008 per audio minute, subtitles included.** A 45-minute episode costs $0.36. Failed or skipped episodes are free.

### What you get for each episode

- Podcast name, episode title, publish date, episode page and audio links
- The full transcript and its detected language
- **SRT** and **WebVTT** subtitles plus a **TXT** file (links in each row; files in the run's key-value store)
- Timed segments (optional)

### How to use it

1. Paste one or more podcast RSS feeds or Apple Podcasts show links.
2. Choose how many of the latest episodes to transcribe (default 1).
3. Optional: transcribe only episodes after a date, or with a word in the title.
4. Run.

**Get every new episode automatically:** save the input as a task, set "Only episodes published after" to the date of
your last run, and add an Apify schedule. Then connect the dataset to Google Sheets, Notion, Slack or a webhook.

### Common uses

- Show notes, blog posts and newsletters from each new episode
- Searchable archives of a show's back catalogue
- Monitoring what is said about a brand or topic across podcasts
- Feeding episode transcripts to an LLM for summaries, quotes and clips
- Subtitles for the video version of an episode

### Pricing

Pay per event, nothing monthly:

| Event | Price |
|---|---|
| Audio minute transcribed (started minutes, subtitles included) | $0.008 |
| Actor start | $0.00005 |

Higher Apify plans get 10–30% off the per-minute price.

- 30-minute episode: $0.24
- 1-hour episode: $0.48
- 10 one-hour episodes: $4.80

The free $5 monthly Apify credit covers about 10 hours of episodes. "Maximum minutes per episode" and Apify's
maximum charge per run keep the cost capped.

### Notes

- **Spotify-only shows** (exclusives) have no public RSS feed and cannot be used. Most shows on Spotify also publish
  an RSS feed: search the show name plus "RSS", or use its Apple Podcasts link.
- **Private or paid feeds:** a private RSS link with its token works, as long as the audio files can be downloaded.
- **Single audio or video files:** use our Audio & Video Transcriber actor instead (same price).

### Questions

Open an issue on the Issues tab with your run link, and we will answer quickly.

# Actor input Schema

## `podcasts` (type: `array`):

Podcast RSS feed URLs or Apple Podcasts show links (podcasts.apple.com/.../id123456). Spotify-only shows have no public feed and cannot be used.

## `episodesPerPodcast` (type: `integer`):

How many of the newest matching episodes to transcribe from each podcast.

## `publishedAfter` (type: `string`):

Optional date, for example 2026-11-01. Useful for scheduled runs that pick up new episodes only.

## `titleContains` (type: `string`):

Optional: only episodes whose title contains this text (not case sensitive).

## `language` (type: `string`):

Leave on automatic detection, or pick the spoken language.

## `vocabulary` (type: `string`):

Host and guest names, brands or jargon, separated by commas. Helps Whisper spell them right.

## `includeTimestamps` (type: `boolean`):

Adds timed segments to each result. SRT and VTT files are always made.

## `maxMinutesPerEpisode` (type: `integer`):

Longer episodes are skipped (free).

## Actor input object example

```json
{
  "podcasts": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "episodesPerPodcast": 1,
  "language": "auto",
  "includeTimestamps": false,
  "maxMinutesPerEpisode": 240
}
```

# Actor output Schema

## `episodes` (type: `string`):

One item per episode: podcast, title, date, transcript and links to its SRT, VTT and TXT files.

## `files` (type: `string`):

The SRT, VTT and TXT files of every episode.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "podcasts": [
        "https://feeds.npr.org/510289/podcast.xml"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("spellzcode/podcast-transcriber").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "podcasts": ["https://feeds.npr.org/510289/podcast.xml"] }

# Run the Actor and wait for it to finish
run = client.actor("spellzcode/podcast-transcriber").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "podcasts": [
    "https://feeds.npr.org/510289/podcast.xml"
  ]
}' |
apify call spellzcode/podcast-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,spellzcode/podcast-transcriber"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hQ9j5Zc5ZEIR7CL4Y/builds/syWoppocSGBEQkKmY/openapi.json
