# Podcast Transcript & Audio to Text - Spotify, Apple, RSS, MP3 (`tracefetch/podcast-transcript`) Actor

Podcast transcription and audio to text: transcribe audio from podcast RSS feeds, Apple Podcasts links or any MP3, M4A or WAV file with AI speech to text. Long episodes are split and transcribed in parallel; timestamps and SRT/VTT optional. MP3 to text at $0.005 per minute; failed files are free.

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

## Pricing

from $4.50 / 1,000 audio transcribed (first minute)s

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 & Audio to Text - Spotify, Apple, RSS, MP3

Podcast transcription and audio to text with AI. Type a podcast name, or paste a Spotify, Apple Podcasts or RSS
link, and the newest episodes are transcribed, or give direct links to MP3, M4A, WAV or video files. Long episodes are split
and transcribed in parallel, so a one-hour episode takes minutes. Get clean transcripts as JSON, CSV or Excel,
with optional timestamps and SRT/WebVTT subtitles, or pull them into your app through the API.

### What can this podcast transcript tool do?

- Transcribe the newest episodes of any public podcast from just its name, a Spotify or Apple Podcasts link, or its RSS feed
- Transcribe any audio or video file from a direct URL (.mp3, .m4a, .aac, .wav, .ogg, .flac, .mp4, .webm)
- Handle long recordings: audio is cut into pieces, transcribed in parallel and joined back with correct timestamps
- Return the show, episode title, publish date, transcript, word count and duration for every episode
- Optionally return timestamped segments, the detected language and ready-to-use SRT and WebVTT subtitles
- Stop exactly at the spending limit you set for a run, and charge nothing for files that cannot be downloaded

### Who uses podcast transcription?

- Content teams turning episodes into show notes, blog posts, newsletters and social clips
- Researchers and analysts searching what was said across many episodes or shows
- Developers and AI agents feeding transcripts into summarisers, search indexes or RAG pipelines
- Accessibility work that needs a text version of audio

### How to transcribe a podcast

1. Add one or more podcasts: a name such as `Planet Money`, a Spotify show link such as
   `https://open.spotify.com/show/79CkJF3UJTHFV8Dse3Oy0P`, an Apple Podcasts link, or an RSS feed URL.
2. Set how many of the newest episodes to transcribe per feed, and optionally a start date.
3. Or add direct audio file URLs instead of (or next to) feeds.
4. Click Start. Each episode appears in the dataset as soon as it is done.

### Spotify podcast transcript generator

Spotify does not offer a transcript download for most shows. Paste the show's Spotify link
(`https://open.spotify.com/show/...`) and this Actor finds the same show's public RSS feed and transcribes its newest
episodes. It works for every Spotify podcast that is also published outside Spotify, which is most of them; Spotify
exclusives are not supported.

### Apple Podcasts transcript, MP3 to text and audio to text

- **Apple Podcasts**: paste the show link from podcasts.apple.com.
- **By name**: type the podcast name, for example `Planet Money`.
- **MP3 to text / WAV to text / M4A to text**: paste a direct link to any audio file, such as an interview, lecture,
  meeting recording or voice memo that is hosted online.

Every transcript comes as clean text, and with timestamps enabled also as SRT and WebVTT subtitles.

### Input example

```json
{
  "feeds": ["Planet Money", "https://open.spotify.com/show/79CkJF3UJTHFV8Dse3Oy0P", "https://feeds.npr.org/500005/podcast.xml"],
  "maxEpisodesPerFeed": 3,
  "onlyEpisodesNewerThan": "2026-10-01",
  "urls": ["https://example.com/recordings/interview.mp3"],
  "includeTimestamps": false,
  "maxDurationMinutes": 120
}
```

### Output

| Field | Description |
|---|---|
| `show`, `episodeTitle`, `postedAt` | Podcast name, episode title and publish date (feed episodes) |
| `text`, `wordCount`, `durationSec` | Transcript, its length, and audio length in seconds |
| `language`, `segments`, `srt`, `vtt` | Present when timestamps are enabled |
| `episodeUrl`, `audioUrl`, `feedUrl` | Where the episode came from |
| `status` | `succeeded`, `no_speech`, `no_audio`, `failed` or `skipped` |
| `errorCode`, `errorMessage` | Why a file was not transcribed |
| `charged` | Whether the item was billed |

### Pricing

Pay per event, no subscription: **$0.005 per started minute of audio** (the first minute is the "audio transcribed"
event, each further started minute is an "additional minute"). Paid Apify plans get lower prices (Bronze $0.0048,
Silver $0.0046, Gold $0.0045 per minute). A 30-minute episode costs $0.15 on the free plan.

Not charged: invalid links, feeds that cannot be read, and files that cannot be downloaded or have no audio.
Set *Maximum minutes per episode or file* to cap the cost of each episode; set a maximum charge for the run and the
Actor never exceeds it.

### Use it from the API and AI agents

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("tracefetch/podcast-transcript").call(
    run_input={"feeds": ["https://feeds.npr.org/500005/podcast.xml"], "maxEpisodesPerFeed": 1}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["episodeTitle"], item["text"][:200])
```

Works with schedules (for example, transcribe new episodes every morning), webhooks, Make, Zapier and n8n. AI agents
connected to the Apify MCP server can find and call it.

### Limits and FAQ

- Public feeds and files only. Spotify links work for shows that also publish a public RSS feed (most do);
  Spotify-exclusive, private or paywalled audio is not supported.
- A podcast name is matched against the Apple Podcasts directory; if no show matches, you get a free error row, never a guess.
- Audio longer than *Maximum minutes per episode or file* (default 120) is cut at that length.
- Speaker names are not identified; the transcript is continuous text (with segment times when timestamps are on).
- Transcription uses OpenAI speech-to-text models and supports most major languages; setting the language helps on
  short or noisy recordings.

# Changelog

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

# Actor input Schema

## `feeds` (type: `array`):

One per line: a podcast name (e.g. Planet Money), a Spotify or Apple Podcasts show link, or an RSS feed URL. The newest episodes of each podcast are transcribed. A name that matches no podcast returns a free error row instead of a guess.

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

How many of the newest episodes to transcribe from each feed.

## `onlyEpisodesNewerThan` (type: `string`):

Only episodes published on or after this date, e.g. 2026-10-01.

## `urls` (type: `array`):

Direct links to audio or video files, one per line (.mp3, .m4a, .wav, .ogg, .flac, .mp4, .webm). Duplicates are processed once.

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

Two-letter ISO-639-1 code such as en, es, ko. Leave empty to detect automatically.

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

Adds start/end times for each spoken segment, the detected language, and ready-to-use SRT and WebVTT subtitle files. Same price.

## `maxDurationMinutes` (type: `integer`):

Longer audio is cut at this length. Each started minute is billed, so this also caps the cost per episode.

## `maxConcurrency` (type: `integer`):

How many episodes or files are processed at the same time.

## Actor input object example

```json
{
  "feeds": [
    "https://feeds.npr.org/500005/podcast.xml"
  ],
  "maxEpisodesPerFeed": 1,
  "includeTimestamps": false,
  "maxDurationMinutes": 120,
  "maxConcurrency": 3
}
```

# Actor output Schema

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

All items of this run, including failed ones with an errorCode. Only items with charged=true were billed.

# 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 = {
    "feeds": [
        "https://feeds.npr.org/500005/podcast.xml"
    ],
    "maxEpisodesPerFeed": 1
};

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

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

```

## MCP server setup

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

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/js5ZyMjGPoQUwAQDW/builds/q8ylaJ6xXpxLBQwR1/openapi.json
