Alchemy RecipeIntermediateworkflow

Automated Podcast Production Workflow

Producing a polished podcast episode — recording, editing, show notes, social clips, cover art — takes 8-10 hours manually.

Time saved
Saves 15-20 hrs/week
Monthly cost
~$50/mo
Published

You've just finished recording your podcast episode. Now comes the tedious part: uploading to your hosting platform, transcribing the audio, generating show notes, posting clips to social media, and creating a blog post. If you're doing this manually, you're spending 2-3 hours on administrative work for every episode you release....... For more on this, see Podcast show notes, chapters and social clips generation.

The solution isn't hiring an assistant. It's building an automated workflow that handles all of this simultaneously, the moment your recording file lands in your chosen storage location. This Alchemy guide shows you how to wire together a podcast production pipeline using free and affordable AI tools, eliminating manual handoffs entirely.

By the end of this post, you'll have a working system that: captures your raw audio, transcribes it, generates multiple content formats (show notes, social clips, blog posts), uploads everything to your hosting platform, and posts to your social channels, all triggered by a single file upload. For more on this, see Fashion brand social media content calendar from mood boards.

The Automated Workflow

Architecture Overview

The workflow operates as follows: you upload a finished podcast episode to Google Drive or Dropbox, which triggers an orchestration tool (we'll use n8n, though Zapier or Make work just as well). The orchestrator retrieves the file, sends it to a transcription service, processes the transcript through Claude for content generation, and distributes the outputs across your website, social media, and podcast host. No manual intervention required.

I'm recommending n8n for this particular workflow because it handles file operations cleanly, supports multiple simultaneous API calls, and runs on your own infrastructure (important if you're processing sensitive podcast content). However, I've included configuration notes for Zapier and Make at relevant steps.

Step 1: File Detection and Retrieval

Start by creating a trigger in your orchestration tool that watches a specific folder in Google Drive or Dropbox. When a file matching your naming convention appears (e.g., "Episode-###-FINAL.mp3"), the workflow begins.

For Google Drive with n8n, you'll configure a trigger node that checks every 5 minutes for new files. Use this configuration:


Trigger: Google Drive
Action: Watch Files
Folder: /Podcasts/Ready-to-Process
File name pattern: Episode-*-FINAL.mp3
Poll interval: 5 minutes

If using Zapier, select "Google Drive" as the trigger and "New File in Folder" as the event. If using Make, select the "Watch Files" module.

The trigger node outputs a JSON object containing the file's metadata, including the file ID and download URL. Store this for the next step.

Step 2: Audio Transcription

Next, send the audio file to a transcription service. Assembler AI and RevAI both offer accurate transcription via simple API calls. I'll use Assembler AI here because it's cost-effective and returns structured output including speaker identification if your show has multiple hosts.

Create an HTTP POST request node in n8n (or the equivalent HTTP action in Zapier/Make) configured as follows:


POST https://api.assemblyai.com/v2/upload

Headers:
- Authorization: Bearer YOUR_ASSEMBLER_API_KEY

Body (multipart/form-data):
- audio_data: [file binary from Google Drive]

This returns an upload_url which you'll pass to the transcription endpoint:


POST https://api.assemblyai.com/v2/transcript

Headers:
- Authorization: Bearer YOUR_ASSEMBLER_API_KEY
- Content-Type: application/json

Body:
{
  "audio_url": "UPLOAD_URL_FROM_PREVIOUS_STEP",
  "speaker_labels": true,
  "auto_chapters": true,
  "entity_detection": true
}

The Assembler API is asynchronous, so the response includes a transcript_id. You'll need to poll this endpoint every 30 seconds until the status shows "completed":


GET https://api.assemblyai.com/v2/transcript/TRANSCRIPT_ID

Headers:
- Authorization: Bearer YOUR_ASSEMBLER_API_KEY

Configure a loop node in n8n to handle this polling. Set the maximum loop iterations to 120 (giving you up to 60 minutes for transcription) and a 30-second delay between checks.

When the transcription is complete, the response includes the full transcript text plus structured data like detected chapters and entities. Store the complete transcript in your workflow's memory.

Step 3: Content Generation with Claude

This is where the magic happens. Use the Anthropic API to generate multiple content pieces from a single transcript. You'll make three simultaneous API calls to Claude, each asking for different output:


POST https://api.anthropic.com/v1/messages

Headers:
- x-api-key: YOUR_ANTHROPIC_API_KEY
- anthropic-version: 2023-06-01
- content-type: application/json

Body (for show notes generation):
{
  "model": "claude-opus-4-1",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Create detailed show notes from this podcast transcript. Include timestamps for major topics, key quotes, and a brief summary. Format in Markdown.\n\nTranscript:\n[FULL TRANSCRIPT HERE]"
    }
  ]
}

Run this same request structure three times in parallel, varying only the system prompt:

Request 1: Show Notes (above)

Request 2: Social Media Clips


{
  "role": "user",
  "content": "Extract 3 quotable moments from this podcast transcript that work well for social media. Format each as a standalone quote suitable for Instagram, LinkedIn, and Twitter. Include the timestamp.\n\nTranscript:\n[FULL TRANSCRIPT HERE]"
}

Request 3: Blog Post


{
  "role": "user",
  "content": "Write a 500-word blog post based on this podcast episode. Make it standalone content that doesn't require listeners to have heard the episode. Include an introduction that hooks the reader and a call-to-action linking to the podcast. Format in Markdown.\n\nTranscript:\n[FULL TRANSCRIPT HERE]"
}

Configure these three requests as parallel branches in n8n, or as three separate Make modules that run simultaneously. This saves time compared to sequential processing.

Store the outputs: one variable for show notes, one for social quotes, one for the blog post.

Step 4: Podcast Host Upload

Now upload the episode file and metadata to your podcast hosting platform. Most platforms (Buzzsprout, Podbean, Transistor) provide webhooks or APIs. Here's the configuration for Transistor:


POST https://api.transistor.fm/v1/episodes

Headers:
- X-API-Key: YOUR_TRANSISTOR_API_KEY
- Content-Type: application/json

Body:
{
  "episode": {
    "show_id": YOUR_SHOW_ID,
    "title": "Episode

### - [TITLE FROM METADATA]",
    "description": "[SHOW NOTES FROM STEP 3]",
    "audio_url": "[DOWNLOAD URL FROM STEP 1]",
    "published_at": "2024-01-15T09:00:00Z",
    "status": "published"
  }
}

For Buzzsprout, use their API endpoint at https://www.buzzsprout.com/api/episodes.json. The request structure is similar but with slightly different field names.

The response includes the episode ID, which you'll need for publishing to your RSS feed and social platforms.

Step 5: Website Integration

Create a blog post on your website by sending the generated blog post to your content management system via API. If you're using WordPress, use the REST API:


POST https://yourwebsite.com/wp-json/wp/v2/posts

Headers:
- Authorization: Bearer YOUR_WORDPRESS_AUTH_TOKEN
- Content-Type: application/json

Body:
{
  "title": "Episode

### - [TITLE]",
  "content": "[BLOG POST FROM STEP 3]",
  "status": "publish",
  "categories": [CATEGORY_IDS],
  "meta": {
    "podcast_episode_id": "[FROM STEP 4]",
    "transcript": "[FULL TRANSCRIPT FROM STEP 2]"
  }
}

If you're using a static site generator like Hugo or Jekyll, instead write the blog post to a GitHub repository:


PUT https://api.github.com/repos/YOUR_USERNAME/YOUR_REPO/contents/content/episodes/episode-###.md

Headers:
- Authorization: token YOUR_GITHUB_TOKEN
- Content-Type: application/json

Body:
{
  "message": "Add episode

### blog post",
  "content": "[BASE64_ENCODED_MARKDOWN]"
}

Step 6: Social Media Distribution

Finally, post the social clips from Step 3 to your social platforms. Buffer API is excellent for this because it queues posts and ensures consistent scheduling:


POST https://api.bufferapp.com/1/updates/create.json

Headers:
- Authorization: Bearer YOUR_BUFFER_API_KEY

Body:
{
  "profile_ids": ["YOUR_TWITTER_PROFILE_ID", "YOUR_LINKEDIN_PROFILE_ID"],
  "text": "[FIRST SOCIAL QUOTE FROM STEP 3]",
  "shorten": true,
  "now": true
}

Repeat this request for each of the three social quotes generated in Step 3. The now: true parameter publishes immediately; remove it if you'd prefer to schedule for optimal posting times.

For Instagram, since it doesn't allow direct API posting, use a service like IFTTT or Zapier's native Instagram integration as an intermediate step.

Bringing It All Together

In n8n, the complete workflow looks like this:

  1. Google Drive trigger (detects new file)
  2. Google Drive retrieve file (gets the audio)
  3. Assembler AI upload (sends audio)
  4. Assembler AI transcribe (initiates transcription)
  5. Assembler AI poll (waits for completion)
  6. Claude parallel branch 1 (generate show notes)
  7. Claude parallel branch 2 (generate social quotes)
  8. Claude parallel branch 3 (generate blog post)
  9. Transistor API (upload to podcast host)
  10. WordPress API (create blog post)
  11. Buffer API x3 (post social quotes)
  12. Slack notification (alerts you the workflow completed)

For Zapier users, you'll structure this as a single Zap with multiple actions in sequence. For Make users, you'll build multiple routes with the parallel branches converging before distribution.

Add error handling at each major step: if transcription fails, send yourself a Slack message. If the podcast host API returns an error, store the response for manual review. Most orchestration tools include conditional logic for this.

The Manual Alternative

If you prefer more control over content generation, or want to review outputs before publishing, modify the workflow at Step 3. Instead of automatically sending Claude-generated content to your publishing platforms, store the outputs in a shared folder and send yourself an email with a link to review them.

Configure an email action in your orchestration tool:


To: your-email@example.com
Subject: Episode

### ready for review
Body: Show notes, social quotes, and blog post are ready at: [SHARED_FOLDER_LINK]
Please review and publish when satisfied.

You can then review the content, make edits, and manually trigger the publishing step using a separate workflow. This gives you quality control whilst still eliminating the file handling and initial transcription work.

Alternatively, configure your orchestration tool to create a Notion page or Airtable record with all generated content, which you can review and mark as "approved" before the workflow automatically publishes it.

Pro Tips

Handle transcription timeouts gracefully. Podcasts longer than 2 hours may take 30+ minutes to transcribe. Configure your orchestration tool with extended timeouts (set HTTP request timeout to 120 seconds minimum) and implement exponential backoff in polling loops. If a poll returns an error, wait 60 seconds before retrying, then 120 seconds, then 240 seconds.

Monitor API rate limits. Assembler AI allows 32 concurrent transcriptions on their standard plan. If you publish multiple episodes simultaneously, your workflow will fail. Either stagger uploads or upgrade to a higher tier. Check each API's rate limit documentation and add logic to your workflow that delays execution if you're approaching your limit.

Cost optimisation through batching. Claude's API charges per token. Instead of making three separate requests (show notes, social quotes, blog post), consolidate into a single request asking for all three outputs in a structured format. You'll save roughly 30-40 percent on API costs with only a marginal increase in latency. Use Claude's structured output feature to ensure consistent formatting.

Store transcripts permanently. Keep a record of every transcript in a database or Google Sheet, indexed by episode number and date. This helps with SEO (transcripts are searchable content), provides a backup if your podcast host loses data, and gives you a resource to pull from if you want to do a "best of" episode compilation later.

Test with a short clip first. Before running your full workflow with a 90-minute episode, test with a 5-minute sample. This costs roughly 1-2 pounds to verify your API configurations are correct, and it's much cheaper than discovering a configuration error after processing your full episode.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nCloud (free) or Self-hosted£0–150Self-hosted is free but requires a server; Cloud is pay-as-you-go based on workflow executions
Assembler AIStandard£10–50Pricing based on hours of audio transcribed; ~£0.24 per hour of audio
Anthropic ClaudePay-as-you-go£15–40Costs depend on transcript length and number of generations; roughly £0.003 per 1K tokens
TransistorBroadcaster£19/monthIncludes podcast hosting and distribution
WordPress (self-hosted)Standard hosting£5–15/monthIf you're not already running WordPress; excludes domain and SSL
BufferEssentials£5/monthHandles social media scheduling; free tier available
Google DriveFree or Google One£0–2/monthFree storage usually sufficient; Google One adds 2TB for £1.99/month
Total£54–272/monthVaries based on publishing frequency and transcript volume

A realistic estimate for someone publishing one episode per week: £80–120 monthly, which breaks down to roughly £1–2 per episode in software costs (excluding labour savings of 2-3 hours per episode).

Tool Pipeline Overview

How each tool connects in this workflow

1
Canva AI

Canva AI

Step 1

2
Claude

Claude

Step 2

3
Descript

Descript

Step 3

4
ElevenLabs

ElevenLabs

Step 4

5
Suno

Suno

Step 5

More Recipes