# Podcast Show Notes Generator — AI Transcription & Chapters (`toshiusklay/wisprs-podcast-show-notes`) Actor

Transcribe any podcast episode and auto-generate show notes, timestamped chapters, and guest quotes. Accepts MP3, RSS feeds, M4A, Spotify embed URLs. Speaker diarization. 100+ languages. No Wisprs account needed.

- **URL**: https://apify.com/toshiusklay/wisprs-podcast-show-notes.md
- **Developed by:** [Gitonga Mwaura](https://apify.com/toshiusklay) (community)
- **Categories:** AI, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Podcast Show Notes Generator — AI Transcription & Chapters

Submit any podcast episode URL — mp3, m4a, RSS feed link — and get back a full transcript, structured show notes, timestamped chapters, speaker-attributed guest quotes, and SRT/VTT subtitle files saved to your Apify Dataset.

The Podcast Show Notes Generator uses the [Wisprs API](https://wisprs.co) to transcribe audio directly from episode URLs using Whisper-based speech-to-text. Unlike tools that rely on pre-existing transcripts, Wisprs transcribes the actual audio — which means it works for every episode, whether or not the host has published a transcript. Accuracy is excellent on clear audio; results vary by language, accent, and recording quality.

***

### What does this Actor do?

The dirty secret of podcasting is that the episode itself is the easy part. A typical post-production workflow takes 3–5 hours of mechanical work after recording. This Actor collapses that entire workflow into two API calls.

1. Submit episode URLs from your input
2. Queue each for async transcription (handles episodes of any length — no timeout)
3. Generate structured show notes including:
   - **Summary** — 2–4 sentences capturing the episode's core argument
   - **Chapters** — timestamped chapter markers with titles and descriptions
   - **Quotes** — top verbatim guest quotes with speaker attribution and timestamps
   - **Show notes markdown** — ready to paste directly into your CMS or podcast host
4. Export the transcript in your chosen formats: TXT, SRT, VTT, JSON, Markdown
5. Save everything to your Apify Dataset — one row per episode

***

### How do I generate podcast show notes automatically?

Enable `repurposeMode: "show-notes"` and `diarize: true` for speaker-labeled output:

```json
{
  "startUrls": [{ "url": "https://your-podcast-host.com/episode.mp3" }],
  "language": "auto",
  "diarize": true,
  "exportFormats": ["txt", "srt"],
  "repurposeMode": "show-notes"
}
```

The dataset row will contain structured show notes in `repurposed_show-notes`, the full transcript in `transcript_txt`, and SRT subtitles in `transcript_srt`.

***

### How do I transcribe a podcast back-catalog in bulk?

Add all episode URLs to `startUrls`. The Actor processes them sequentially with no timeout — ideal for batch-transcribing an entire show archive:

```json
{
  "startUrls": [
    { "url": "https://feeds.buzzsprout.com/.../episode-1.mp3" },
    { "url": "https://feeds.buzzsprout.com/.../episode-2.mp3" },
    { "url": "https://feeds.buzzsprout.com/.../episode-3.mp3" }
  ],
  "diarize": false,
  "exportFormats": ["txt", "md", "srt", "vtt"]
}
```

Each episode saves as one row with the full CMS-ready transcript. A 100-episode back-catalog at 45 minutes each costs approximately $75.50 with show notes.

***

### How do I build an RSS-to-CMS automation?

Pass a `webhookUrl` to receive results as each episode completes. Combine with an RSS monitoring Actor to trigger transcription on new episode publish:

```json
{
  "startUrls": [{ "url": "https://your-podcast-host.com/new-episode.mp3" }],
  "diarize": true,
  "exportFormats": ["txt", "srt"],
  "repurposeMode": "show-notes",
  "webhookUrl": "https://your-n8n-instance.com/webhook/podcast-complete"
}
```

Every episode gets show notes posted to your CMS on publish — zero manual work.

***

### How do I build a guest quote library from my podcast archive?

The `quotes` array in each `repurposed_show-notes` result includes the speaker name, exact quote text, and timestamp. Pipe all episodes through this Actor and accumulate the `quotes` arrays into a database — every notable thing every guest has ever said, searchable by speaker and timestamp.

***

### Using with AI agents (MCP)

This Actor is published on the Apify Store and automatically available as an MCP tool. AI agents using Claude Desktop, LangChain, CrewAI, or any MCP-compatible framework can discover and call this Actor directly — no custom integration required.

***

### Show notes output example

```json
{
  "summary": "Sarah Chen joins us to explain why her team consolidated 47 microservices back into a modular monolith — and what the deployment numbers looked like on the other side.",
  "chapters": [
    {
      "title": "Introduction",
      "startSeconds": 0,
      "description": "Host introduces Sarah Chen, VP Engineering at Acme Corp."
    },
    {
      "title": "The Microservices Trap",
      "startSeconds": 312,
      "description": "How 47 services became impossible to debug."
    },
    {
      "title": "The Great Consolidation",
      "startSeconds": 894,
      "description": "Moving back to a monolith in 6 weeks."
    }
  ],
  "quotes": [
    {
      "speaker": "Sarah Chen",
      "text": "We had 47 services and nobody could tell you what half of them did. That's not a microservices problem — that's an organizational problem we tried to solve with infrastructure.",
      "startSeconds": 318
    }
  ],
  "showNotes": "**Episode 42: Why We Killed Our Microservices**\n\nSarah Chen, VP of Engineering at Acme Corp, shares the real story...\n\n**Chapters:**\n- [0:00] Introduction\n- [5:12] The Microservices Trap\n- [14:54] The Great Consolidation"
}
```

***

### What data does the Actor return?

| Field                   | Description                                                         |
| ----------------------- | ------------------------------------------------------------------- |
| `url`                   | The submitted episode URL                                           |
| `jobId`                 | Wisprs transcription ID (integer)                                   |
| `transcriptionId`       | Same as `jobId`                                                     |
| `status`                | `completed` or `failed`                                             |
| `durationSeconds`       | Episode audio duration in seconds                                   |
| `language`              | Detected language ISO 639-1 code (e.g. `"en"`)                     |
| `transcript_txt`        | Full plain-text transcript                                          |
| `transcript_srt`        | SRT subtitle file                                                   |
| `transcript_vtt`        | WebVTT subtitle file                                                |
| `transcript_md`         | Markdown transcript                                                 |
| `repurposed_show-notes` | Structured show notes object (summary, chapters, quotes, showNotes) |

***

### Wisprs vs manual podcast workflow

| Task                          | Manual     | With this Actor |
| ----------------------------- | ---------- | --------------- |
| Transcribe a 45-min episode   | 3–4 hours  | ~5 minutes      |
| Write show notes              | 45–90 min  | Included        |
| Create timestamped chapters   | 30–60 min  | Included        |
| Extract top guest quotes      | 20–30 min  | Included        |
| Generate SRT subtitles        | 60–90 min  | Included        |
| Total per episode             | 5–7 hours  | ~5 minutes      |

***

### How much does it cost?

Pricing is pay-per-event:

- **$0.005** per episode submitted
- **$0.015 per audio minute** (45-min episode = $0.675)
- **$0.075** per show notes result generated

**Example: 10 × 45-minute episodes with show notes**

- Submit: 10 × $0.005 = $0.05
- Audio: 10 × 45 × $0.015 = $6.75
- Show notes: 10 × $0.075 = $0.75
- **Total: ~$7.55**

The Apify free plan includes $5/month in credits — enough to test 5–6 episodes.

***

### What can I automate with this?

**RSS-to-CMS pipeline** — monitor your podcast RSS feed, submit new episode URLs as they publish, and write the generated show notes directly back to your CMS via webhook. Every episode gets show notes on publish with zero manual work.

**Guest quote library** — the `quotes` array includes speaker attribution and timestamps for every notable thing every guest has ever said. Pipe this into a database and you have a searchable quote library across your entire back-catalog — perfect for social media clip selection.

**Transcript SEO pages** — publish the `transcript_txt` or `transcript_md` export as a dedicated page for each episode. Long-tail podcast transcripts drive search traffic without any additional writing effort.

**Chapter markers for Podcast Namespace** — the `chapters` array maps directly to the Podcasting 2.0 chapter format used by Fountain, Overcast, and Pocket Casts. Inject chapters automatically on every episode.

**Multi-show network dashboard** — submit episodes from all shows in your network concurrently. The async job model handles parallel processing — one run covers an entire network.

***

### Supported URL formats

- Direct audio: mp3, wav, m4a, ogg, flac
- RSS feed episode URLs (standard podcast hosting platforms)
- Buzzsprout, Transistor, Simplecast, Anchor, Captivate, RSS.com, Podbean
- YouTube podcast episodes
- Spotify episode audio links (public)

***

### Language support

100+ languages with automatic detection. Speaker diarization (host vs guest labeling) works best on clear two-speaker recordings. For episodes with more participants, speakers are labeled `"Speaker 1"`, `"Speaker 2"`, etc.

***

### Related Actors

- [Wisprs — Audio & Video Transcription](https://apify.com/toshiusklay/wisprs-transcription) — universal transcription for any URL
- [Wisprs — YouTube Content Repurposer](https://apify.com/toshiusklay/wisprs-youtube-repurposer) — YouTube → thread, blog, chapters
- [Wisprs — Social Media Transcriber](https://apify.com/toshiusklay/wisprs-social-media-transcriber) — TikTok, Reels, Shorts

***

### FAQ

**Does this work for podcasts without published transcripts?**
Yes. Wisprs transcribes the audio directly using Whisper — it does not rely on pre-existing transcript files or RSS transcript tags.

**How long does a 60-minute episode take to process?**
Typically 3–8 minutes, depending on server load. The Actor polls automatically and saves results when complete.

**Can I process an entire podcast back-catalog?**
Yes. Add all episode URLs to `startUrls`. The Actor processes them sequentially, saving each result to the Dataset as it completes.

**Does speaker diarization work in languages other than English?**
Speaker detection works across all supported languages. Accuracy on non-English content is excellent on clear recordings.

***

### Support

- Documentation: [wisprs.co/docs](https://wisprs.co/docs)
- Email: tosh@belvadigital.com

***

*Two API calls. One polished episode. Ship faster.*

# Actor input Schema

## `startUrls` (type: `array`):

List of podcast episode URLs to transcribe. Supports direct mp3/m4a/wav links, RSS feed episode URLs, and most podcast hosting platforms (Buzzsprout, Transistor, Simplecast, Anchor, etc.).

## `apiKey` (type: `string`):

Your Wisprs API key. Get one free at https://wisprs.co/developer. Required to run this Actor.

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

ISO 639-1 language code (e.g. 'en', 'es', 'fr'). Leave as 'auto' to detect automatically.

## `diarize` (type: `boolean`):

Label who is speaking in the transcript. Recommended for interview-style podcasts. Results in speaker-attributed quotes in show notes.

## `showNotesOptions` (type: `object`):

Configure the show notes output.

## `exportFormats` (type: `array`):

Transcript formats to include alongside show notes.

## `webhookUrl` (type: `string`):

URL to POST a completion notification to for each episode. Leave blank to poll instead.

## `maxPollSeconds` (type: `integer`):

Maximum time to wait for each episode to complete. Podcast episodes often run 30–90 minutes so this is set higher. Default 1800 seconds (30 minutes).

## `pollIntervalSeconds` (type: `integer`):

How often to check job status. Default 15 seconds.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"
    }
  ],
  "language": "auto",
  "diarize": true,
  "showNotesOptions": {
    "maxChapters": 8,
    "quotesCount": 5,
    "includeTimestamps": true
  },
  "exportFormats": [
    "txt",
    "srt"
  ],
  "maxPollSeconds": 240,
  "pollIntervalSeconds": 15
}
```

# Actor output Schema

## `url` (type: `string`):

The submitted episode URL

## `jobId` (type: `string`):

Wisprs transcription job ID

## `transcriptionId` (type: `string`):

Wisprs transcription ID — same value as jobId

## `status` (type: `string`):

Job outcome: completed or failed

## `durationSeconds` (type: `string`):

Episode audio duration in seconds

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

ISO 639-1 language code detected in the audio (e.g. en, es, fr)

## `transcript_txt` (type: `string`):

Full plain-text transcript

## `transcript_srt` (type: `string`):

SRT subtitle file with timestamps

## `transcript_vtt` (type: `string`):

WebVTT subtitle file

## `repurposed_show-notes` (type: `string`):

Structured show notes with summary, chapters, quotes, and showNotes markdown

## `error` (type: `string`):

Error code if the run failed (e.g. missing\_api\_key)

## `message` (type: `string`):

Human-readable error 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 = {
    "startUrls": [
        {
            "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("toshiusklay/wisprs-podcast-show-notes").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 = { "startUrls": [{ "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw" }] }

# Run the Actor and wait for it to finish
run = client.actor("toshiusklay/wisprs-podcast-show-notes").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"
    }
  ]
}' |
apify call toshiusklay/wisprs-podcast-show-notes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=toshiusklay/wisprs-podcast-show-notes",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/A17ceN4KREE9spGV2/builds/le7Yi2KEp9TgZq7cn/openapi.json
