# Podcast Transcript Scraper: Publisher Transcripts from RSS (`prime619/podcast-transcript-fetcher`) Actor

Get the transcripts podcasters publish in their RSS feeds (podcast:transcript tag): VTT, SRT, JSON, HTML or text, normalized to clean text with speakers and timestamps. Feed URLs, Apple Podcasts links or search. No audio processing: fast and cheap.

- **URL**: https://apify.com/prime619/podcast-transcript-fetcher.md
- **Developed by:** [Philipp Primisser](https://apify.com/prime619) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 transcript delivereds

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 Transcript Scraper: Publisher Transcripts from RSS

> **Try it free:** Apify's free plan includes monthly platform credit, no credit card needed. One example run with the input below costs about **$0.005** ($0.0005 feed check + 2 transcripts at $0.002 each).

```json
{
  "feedUrls": [
    "https://feeds.transistor.fm/acquired"
  ],
  "maxEpisodesPerFeed": 2
}
```

Paste this into the **JSON** tab of the input form and click **Start**.

Many podcasters publish a transcript for each episode in their RSS feed, using the open `podcast:transcript` tag (Podcasting 2.0). This Actor finds those transcripts and returns them as **clean text with speakers and timestamps**, whatever format the publisher used (WebVTT, SRT, JSON, HTML or plain text). It doesn't download or transcribe any audio, so it's fast and costs a fraction of speech-to-text.

### Who it is for

- **Researchers, journalists and analysts** who need the text of many episodes, for example for search, quotes or topic tracking.
- **AI and RAG builders** who want podcast text with speaker turns and timestamps, without paying for transcription.
- **Marketers and PR teams** checking where a brand or topic was mentioned (keyword search inside transcripts).
- **Automation builders** (API, schedules, Make, Zapier, n8n): run it on a schedule with *Only new episodes*.

### What you get for each episode

| Field | Content |
|---|---|
| `text` | Readable transcript, one paragraph per speaker turn ("Ana: ...") |
| `segments` | `[{start, end, speaker, text}]` in seconds, as published |
| `speakers`, `hasTimestamps`, `wordCount` | What the transcript contains |
| `transcriptFormat`, `transcriptType`, `transcriptUrl`, `transcriptLanguage` | Source file, its format and its language |
| `alternativeTranscripts` | Other formats the publisher offers for the same episode |
| `podcastTitle`, `podcastAuthor`, `episodeTitle`, `publishedAt`, `durationSeconds`, `audioUrl`, `episodeUrl`, `showNotes` | Episode details from the feed |
| `status` | `ok`, or `noTranscript` / `transcriptFailed` / `feedFailed` with an `error` message (never charged) |

`RUN_SUMMARY` in the key-value store has the run's counts.

### Quick start

1. Paste one or more **podcast RSS feed URLs** or **Apple Podcasts show links**, or type **search terms** (Apple's public podcast search, by country).
2. Choose how many of the **latest episodes** you want, and optionally a date range, a keyword or languages.
3. Run. Open the **Transcripts** table, or use the dataset via API (JSON, CSV, Excel).

```json
{
  "feedUrls": ["https://feeds.transistor.fm/acquired"],
  "searchTerms": ["true crime"],
  "country": "DE",
  "maxEpisodesPerFeed": 5,
  "publishedAfter": "2026-09-01",
  "languages": ["de", "en"]
}
```

### Which podcasts have transcripts?

Only shows whose publisher adds the `podcast:transcript` tag. We checked the top 30 shows of Apple's charts in 10 countries on 2026-10-09 (274 different shows, latest 10 episodes each):

| Feed language | Shows checked | With transcripts |
|---|---|---|
| German | 42 | 15 (36 %) |
| Spanish | 40 | 5 (13 %) |
| English | 69 | 4 (6 %) |
| Portuguese | 37 | 0 |
| Japanese | 24 | 0 |
| Hindi | 5 | 0 |

Hosts that publish transcripts for their shows include Podigee, Spreaker, RSS.com, Transistor, Omny Studio and Flightcast. Many large networks don't add the tag, so expect many shows without one. Use *Only episodes with a transcript* = off to see which episodes have none (free).

### Episodes without a transcript

This Actor never transcribes audio itself. For episodes without a publisher transcript you can:

- use our separate [Podcast Transcriber](https://apify.com/prime619/podcast-transcriber) (Whisper), or
- turn on **Transcribe episodes without a transcript**, confirm that you may transcribe the audio, and set a maximum. The Actor then starts the Podcast Transcriber for those episodes as a separate run in your account. That run is billed by the Podcast Transcriber per audio minute, and this run doesn't wait for it.

### Pricing

Pay per event:

- **Feed check:** once per run, however many feeds you check. It covers downloading the feeds and running the search, also when nothing new is found. An hourly schedule costs about $0.36 a month in feed checks (24 × 30 runs).
- **Transcript:** per transcript delivered. Episodes without a transcript, failed downloads and episodes skipped by *Only new episodes* are free. See the **Pricing** tab for the current price. With *Only new episodes*, transcripts already delivered to the same monitor are skipped and not charged.

### Fair use, rights and limits

- Only **public RSS feeds** and the transcript files the publisher links in them. Private or subscriber feeds (Patreon, Supercast, Memberful, Steady, feeds with personal access keys) are refused. Pages that need a login or payment are never accessed.
- The Actor respects each host's **robots.txt** and identifies itself with a clear user agent. A host that refuses access is reported, not worked around.
- Apple links and search use only Apple's public iTunes Search/Lookup API, to find the show's own RSS feed. Spotify, YouTube and similar platforms are not supported.
- Transcripts belong to their publishers. Use them according to the podcast's terms and copyright law (for example research, accessibility, quotes). Republishing a full transcript usually needs permission.
- Transcripts are returned as published: machine-made transcripts can contain recognition errors, and speaker names may be generic ("Speaker 1").
- Up to 200 feeds and 500 episodes per feed per run; transcript files up to 20 MB.

### FAQ

**Why did I get no results?** The selected episodes have no `podcast:transcript` tag. Turn off *Only episodes with a transcript* to see them listed as `noTranscript`.

**Can I monitor a show for new transcripts?** Yes. Schedule the Actor with *Only new episodes since the last run* and a monitor name.

**Can I search inside transcripts?** Set a keyword and turn on *Search the keyword in transcripts instead*. The Actor checks the latest episodes and returns only transcripts that mention it.

### Related Actors by the same developer

- [Podcast Transcriber](https://apify.com/prime619/podcast-transcriber): turns any podcast episode or audio file into text with timestamps, SRT and VTT (Whisper), no API key needed.
- [Podcast & Video Clip Finder](https://apify.com/prime619/podcast-clip-finder): finds the strongest short-form moments in a podcast or video and returns timestamps, hooks and SRT subtitles for each clip.

### En español

Este Actor descarga las transcripciones que los propios podcasters publican en su feed RSS (etiqueta `podcast:transcript`) y las devuelve como texto limpio con hablantes y marcas de tiempo, sea cual sea el formato (VTT, SRT, JSON, HTML o texto). No transcribe audio, por eso es rápido y barato. Precio: un cargo pequeño por ejecución (revisión de feeds) más un cargo por transcripción entregada; una ejecución cada hora cuesta unos 0,36 USD al mes en revisiones. Solo funciona con podcasts que publican transcripciones; en nuestra prueba, 5 de 40 programas populares en español lo hacían.

```json
{ "searchTerms": ["noticias"], "country": "MX", "languages": ["es"], "maxEpisodesPerFeed": 3 }
```

### Em português (Brasil)

Este Actor baixa as transcrições que os próprios podcasters publicam no feed RSS (tag `podcast:transcript`) e as entrega como texto limpo, com falantes e marcações de tempo, em qualquer formato (VTT, SRT, JSON, HTML ou texto). Ele não transcreve áudio, por isso é rápido e barato. Preço: uma pequena taxa por execução (verificação dos feeds) mais uma taxa por transcrição entregue; uma execução por hora custa cerca de US$ 0,36 por mês em verificações. Atenção: em nosso teste, nenhum dos 37 podcasts populares em português publicava transcrições. Para esses casos, use o nosso [Podcast Transcriber](https://apify.com/prime619/podcast-transcriber) (Whisper).

```json
{ "feedUrls": ["https://exemplo.com/feed.xml"], "languages": ["pt"], "maxEpisodesPerFeed": 3 }
```

### Auf Deutsch

Dieser Actor holt die Transkripte, die Podcaster selbst in ihrem RSS-Feed veröffentlichen (Tag `podcast:transcript`), und liefert sie als sauberen Text mit Sprechern und Zeitstempeln, egal ob als VTT, SRT, JSON, HTML oder Text. Audio wird nicht transkribiert, deshalb ist er schnell und günstig. Preis: eine kleine Gebühr pro Lauf (Feed-Prüfung) plus eine Gebühr pro geliefertem Transkript; ein stündlicher Zeitplan kostet an Feed-Prüfungen etwa 0,36 USD im Monat. Im deutschsprachigen Raum ist das Angebot am größten: In unserem Test hatten 15 von 42 beliebten deutschsprachigen Podcasts Transkripte (z. B. viele Shows bei Podigee).

```json
{ "searchTerms": ["Wirtschaft"], "country": "DE", "languages": ["de"], "maxEpisodesPerFeed": 5 }
```

### 日本語

この Actor は、ポッドキャスト制作者が RSS フィードで公開している文字起こし(`podcast:transcript` タグ)を取得し、形式(VTT、SRT、JSON、HTML、テキスト)にかかわらず、話者とタイムスタンプ付きのテキストとして返します。音声の文字起こしは行わないため、高速で低コストです。料金は実行ごとの少額のフィードチェック料金と、取得した文字起こし 1 件ごとの料金です(1 時間ごとの定期実行でフィードチェック料金は月約 0.36 USD)。なお、私たちの調査では日本の人気番組 24 件のうち文字起こしを公開している番組はありませんでした。その場合は [Podcast Transcriber](https://apify.com/prime619/podcast-transcriber)(Whisper)をご利用ください。

```json
{ "feedUrls": ["https://example.com/feed.xml"], "languages": ["ja"], "maxEpisodesPerFeed": 3 }
```

# Changelog

This Actor's version history is a separate document: https://apify.com/prime619/podcast-transcript-fetcher/changelog.md

# Actor input Schema

## `feedUrls` (type: `array`):

Public RSS feed URLs, or Apple Podcasts show links (podcasts.apple.com/.../id123...): those are turned into the show's own RSS feed via Apple's public lookup API. Private/subscriber feeds are not supported.

## `searchTerms` (type: `array`):

Find shows with Apple's public podcast search (no key needed). The top shows per term are checked for transcripts.

## `country` (type: `string`):

Two-letter country code of the Apple Podcasts store to search, e.g. US, GB, DE, ES, MX, BR, JP, IN.

## `showsPerSearch` (type: `integer`):

How many of the top search results to check.

## `maxEpisodesPerFeed` (type: `integer`):

Newest episodes to return per feed (after the filters below). With 'Only episodes with a transcript' on, this counts episodes that have one.

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

Only episodes published on or after this date.

## `publishedBefore` (type: `string`):

Only episodes published on or before this date.

## `keyword` (type: `string`):

Only episodes whose title or show notes contain this text (case-insensitive).

## `keywordInTranscript` (type: `boolean`):

Checks the transcripts of the latest episodes and returns only those that mention the keyword. You pay only for returned transcripts.

## `languages` (type: `array`):

Optional ISO codes such as en, es, pt, de, ja, hi. Matches the transcript's language tag, or the feed's language. Empty = all.

## `onlyWithTranscript` (type: `boolean`):

Off: episodes without a publisher transcript are listed too (status 'noTranscript', free).

## `includeSegments` (type: `boolean`):

Segments with start/end seconds and speaker, as published.

## `onlyNewEpisodes` (type: `boolean`):

For schedules: transcripts returned by an earlier run with the same monitor name are skipped (not charged).

## `monitorName` (type: `string`):

Separate memory for 'Only new episodes' per monitor.

## `transcribeMissing` (type: `boolean`):

Starts our Podcast Transcriber Actor (prime619/podcast-transcriber) for selected episodes that have no publisher transcript. It runs as its own run in your account and is billed by that Actor per audio minute. This run does not wait for it.

## `confirmRights` (type: `boolean`):

Required for the Whisper hand-off: you confirm you have the right to transcribe these episodes.

## `maxEpisodesToTranscribe` (type: `integer`):

Upper limit for the Whisper hand-off per run.

## `transcriberModel` (type: `string`):

Local Whisper model used by the Podcast Transcriber if it runs locally.

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

Only the first N minutes of each episode are transcribed.

## `maxTranscriptionCostUsd` (type: `string`):

Upper limit for the separate Podcast Transcriber run.

## Actor input object example

```json
{
  "feedUrls": [
    "https://feeds.transistor.fm/acquired"
  ],
  "country": "US",
  "showsPerSearch": 3,
  "maxEpisodesPerFeed": 5,
  "keywordInTranscript": false,
  "onlyWithTranscript": true,
  "includeSegments": true,
  "onlyNewEpisodes": false,
  "transcribeMissing": false,
  "confirmRights": false,
  "maxEpisodesToTranscribe": 3,
  "transcriberModel": "base",
  "maxMinutesPerEpisode": 60,
  "maxTranscriptionCostUsd": "1.00"
}
```

# Actor output Schema

## `transcripts` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "feedUrls": [
        "https://feeds.transistor.fm/acquired"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("prime619/podcast-transcript-fetcher").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 = { "feedUrls": ["https://feeds.transistor.fm/acquired"] }

# Run the Actor and wait for it to finish
run = client.actor("prime619/podcast-transcript-fetcher").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 '{
  "feedUrls": [
    "https://feeds.transistor.fm/acquired"
  ]
}' |
apify call prime619/podcast-transcript-fetcher --silent --output-dataset

```

## MCP server setup

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

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/xYfYg65eHLjCdBNbd/builds/LhugkSeJtVCwvKxva/openapi.json
