# Podcast Transcriber (RSS or Apple Podcasts, timestamps) (`psypherz/podcast-transcriber`) Actor

Transcribe podcast episodes from any RSS feed or Apple Podcasts link. Latest episodes or a date range, 90+ languages, timestamps, optional English translation. Open-source Whisper.

- **URL**: https://apify.com/psypherz/podcast-transcriber.md
- **Developed by:** [Muhammad Yasin Bin Abdul Rahman](https://apify.com/psypherz) (community)
- **Categories:** AI, For creators
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 audio minutes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 (RSS or Apple Podcasts, timestamps)

Transcribe podcast episodes straight from the show's feed. Paste an RSS feed or an Apple Podcasts show link, choose how many episodes or a date range, and get timestamped text for each episode. The language is detected for you, and you can translate the speech into English. It runs on OpenAI's open-source Whisper model, so you need no API key and no account anywhere else.

**Price: US$0.007 per audio minute, plus a US$0.001 run fee.** A 30-minute episode costs US$0.211.

### What people use it for

- **Show notes and blog posts:** turn every new episode into text for your website and SEO.
- **Research and monitoring:** search what was said across many shows, or follow a topic over time.
- **AI pipelines:** feed episodes to an LLM for summaries, chapters, quotes or Q\&A.
- **Accessibility:** publish text versions of your own show.
- **Back catalogues:** transcribe a whole archive in one run with a date filter.

Schedule it daily with `episodesPerFeed` set to 1 to transcribe each new episode as it comes out.

### Example output

Real output from the default input (the latest NPR News Now episode, text shortened here):

| podcastTitle | episodeTitle | publishedAt | durationSec | billedMinutes | language |
|---|---|---|---|---|---|
| NPR News Now | 11am ET, October 28 | The latest headlines from NPR | 2026-10-28T15:09:52+00:00 | 286.69 | 5 | en |

```json
{
  "podcastTitle": "NPR News Now",
  "episodeTitle": "11am ET, October 28 | The latest headlines from NPR",
  "publishedAt": "2026-10-28T15:09:52+00:00",
  "audioUrl": "https://prfx.byspotify.com/e/play.podtrac.com/npr-500005/...",
  "feedUrl": "https://feeds.npr.org/500005/podcast.xml",
  "durationSec": 286.69,
  "billedMinutes": 5,
  "language": "en",
  "model": "base",
  "text": "This is NPR News Now. The latest headlines every hour. ...",
  "segments": [
    {"start": 0.0, "end": 4.44, "text": "This is NPR News Now."},
    {"start": 4.44, "end": 7.28, "text": "The latest headlines every hour."}
  ],
  "transcribedAt": "2026-10-28T15:15:56+00:00"
}
```

Episodes that are skipped (too long, unreadable, over your cost limit) get a row with the reason and are not charged.

### Input

| Field | What it does | Default |
|---|---|---|
| `feedUrls` | RSS feed links or Apple Podcasts show links (like `https://podcasts.apple.com/us/podcast/name/id1234567890`). Up to 20. | 1 sample feed |
| `episodesPerFeed` | How many episodes per feed, newest first, after the filters. Up to 500 per run. | `1` |
| `publishedAfter` | Only episodes published on or after this date. | none |
| `titleContains` | Only episodes whose title contains this text. | none |
| `model` | `tiny` (fast), `base` (balanced) or `small` (accurate). | `base` |
| `language` | `auto`, or a code such as `en`, `es`, `de`, `hi`, `ja`. Setting it improves accuracy. | `auto` |
| `task` | `transcribe` keeps the spoken language. `translate` outputs English. | `transcribe` |
| `wordTimestamps` | Add a start and end time for every word. | `false` |
| `skipSilence` | Skip silence and music-only parts. Faster, and fewer made-up words. | `true` |
| `maxMinutesPerFile` | Longer episodes are skipped without charge. A safety limit on cost. | `180` |

### Pricing

| Event | Price |
|---|---|
| Run fee, once per run (per 2 GB of memory; the default is 2 GB) | US$0.001 |
| Audio minute, fast or balanced model | US$0.007 |
| Audio minute, accurate model | US$0.013 |

Minutes are counted per episode and rounded up. Examples: a 5-minute news bulletin costs US$0.036. A 60-minute episode costs US$0.421. Ten 45-minute episodes cost US$3.151.

### Limits

- Public RSS feeds only. Paid, private and Apple-exclusive shows have no public feed and cannot be transcribed. Only process content you have the right to use.
- 20 feeds and 500 episodes per run, 1 GB and 600 minutes per episode.
- Speed at the default 2 GB memory: about 1 to 3 minutes of processing per 10 audio minutes on the balanced model. Raise the memory for faster runs. The run fee scales with memory.
- No speaker labels (who said what).

### FAQ

**Where do I find a show's RSS feed?** Paste the Apple Podcasts link and the Actor finds the feed for you. Most podcast hosts also show the RSS link on the show's website.

**Can I transcribe a single episode file?** Use the Audio and Video Transcriber below with the direct file link.

**Which languages work?** Whisper supports about 99 languages. Accuracy is best for English, Spanish, German, French, Portuguese, Italian, Japanese and other widely spoken languages.

**Is the audio stored?** Each episode is downloaded to the run's temporary disk, transcribed and deleted. Transcripts are saved in your own Apify dataset.

**Can an AI agent call it?** Yes. Pass a feed, get compact JSON back, and pay per minute.

### More tools from the same developer

Same style: clean JSON output, pay only for results, no charge on failed items.

| Tool | What it does |
|---|---|
| [Bulk Keyword Search Volume](https://apify.com/PsypherZ/keyword-search-volume) | Google Ads search volume, CPC, competition and 12-month trend for up to 10,000 keywords |
| [Google Trends API](https://apify.com/PsypherZ/google-trends-api) | Interest over time, by region, and rising queries and topics for up to 500 keywords |
| [Google SERP Results](https://apify.com/PsypherZ/google-serp-results) | Organic results, featured snippets and People Also Ask for any keyword, country and device |
| [Google AI Overview Tracker](https://apify.com/PsypherZ/google-ai-overview-tracker) | Which keywords show an AI Overview, what it says, and whether it cites your site |
| [Audio and Video Transcriber](https://apify.com/PsypherZ/audio-video-transcriber) | Timestamped transcripts from audio and video files in 90+ languages |
| [Subtitle Generator](https://apify.com/PsypherZ/subtitle-generator) | Ready-to-use SRT and WebVTT subtitles from audio and video files |
| [Image OCR](https://apify.com/PsypherZ/image-ocr) | Text from images in 20 languages, with confidence scores |
| [PDF to Text and Markdown](https://apify.com/PsypherZ/pdf-to-text-markdown) | Clean text and Markdown from PDFs, with OCR for scanned pages |
| [Bulk PageSpeed Insights Audit](https://apify.com/PsypherZ/bulk-pagespeed-audit) | Core Web Vitals and Lighthouse scores for many pages, mobile and desktop |

# Actor input Schema

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

RSS feed links (often ending in .xml, /rss or /feed) or Apple Podcasts show links such as https://podcasts.apple.com/us/podcast/name/id1234567890. Up to 20 per run.

## `episodesPerFeed` (type: `integer`):

How many episodes to transcribe from each feed, newest first, after the filters below.

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

Only episodes published on or after this date. Leave empty for no date filter.

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

Only episodes whose title contains this text (not case sensitive). Leave empty for all.

## `model` (type: `string`):

Larger models are more accurate, especially for accents and noisy audio, but slower. The accurate model has a higher price per minute because it needs about 3 times the compute.

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

"auto" detects it. Or set a code such as en, es, de, fr, ja, hi, ar for better accuracy.

## `task` (type: `string`):

Keep the original language, or translate the speech into English.

## `skipSilence` (type: `boolean`):

Removes long silent or music-only parts before transcribing. Faster and fewer made-up words.

## `maxMinutesPerFile` (type: `integer`):

Longer episodes are skipped without charge. A safety limit on cost.

## `wordTimestamps` (type: `boolean`):

Add a start and end time for every word, not just every segment. Useful for captions and editing tools.

## Actor input object example

```json
{
  "feedUrls": [
    "https://feeds.npr.org/500005/podcast.xml"
  ],
  "episodesPerFeed": 1,
  "model": "base",
  "language": "auto",
  "task": "transcribe",
  "skipSilence": true,
  "maxMinutesPerFile": 180,
  "wordTimestamps": false
}
```

# Actor output Schema

## `results` (type: `string`):

One row per episode: podcast and episode title, publish date, duration, language, full text and timed segments.

# 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.npr.org/500005/podcast.xml"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("psypherz/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 = { "feedUrls": ["https://feeds.npr.org/500005/podcast.xml"] }

# Run the Actor and wait for it to finish
run = client.actor("psypherz/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 '{
  "feedUrls": [
    "https://feeds.npr.org/500005/podcast.xml"
  ]
}' |
apify call psypherz/podcast-transcriber --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,psypherz/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/4Gk8sFFauIZsbqVpL/builds/vnUaif6FO5gmzUazX/openapi.json
