Newsletter to podcast: TTS pipeline for weekly editions — Audra

Your newsletter already ships every Tuesday at 6am. The podcast feed is the same content on a different channel, yet most operators never ship it because re-recording an episode every week is a human bottleneck. Batch TTS removes the human from the loop entirely: the edition is the script.

This post is the edition-to-episode pipeline for newsletter operators: converting an email edition to speakable audio, sizing a typical edition, and the per-edition cost on Essential at $25/1M prepaid.

The persona: a weekly written newsletter going audio

A typical weekly edition is 1,200–1,800 words — say 8,000 characters — becoming a 10–12 minute episode. That fits one sync POST. The work is in the conversion, not the render: strip tracking pixels and footers, expand shortlinks to descriptive text, rewrite subject lines that only make sense in an inbox, and pull the header/call-to-action blocks your listeners cannot click.

Edition to episode in one request

Build the audio script from the edition body, then POST to /v2/speech with delivery_profile podcast_v4 — podcast-oriented pacing and paragraph pauses suited to episodic listening. Output is MP3 at 128 kbps and −16 LUFS, meeting Apple Podcasts and Spotify loudness targets without a mastering pass.

curl
curl https://audratalks.com/v2/speech \
  -H "Authorization: Bearer sk-audra-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"audra-essential","voice":"june","delivery_profile":"podcast_v4","text":"Issue 142: ...","format":"mp3"}' \
  --output issue-142.mp3
Python
import requests

resp = requests.post(
    "https://audratalks.com/v2/speech",
    headers={"Authorization": "Bearer sk-audra-..."},
    json={
        "model": "audra-essential",
        "voice": "june",
        "delivery_profile": "podcast_v4",
        "text": edition_script,
        "format": "mp3",
    },
    timeout=3600,
)
resp.raise_for_status()
open("issue-142.mp3", "wb").write(resp.content)
JavaScript
const res = await fetch("https://audratalks.com/v2/speech", {
  method: "POST",
  headers: { Authorization: "Bearer sk-audra-...", "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "audra-essential",
    voice: "june",
    delivery_profile: "podcast_v4",
    text: editionScript,
    format: "mp3",
  }),
});
if (!res.ok) throw new Error(await res.text());
await writeFile("issue-142.mp3", Buffer.from(await res.arrayBuffer()));

Trigger the render from your publishing webhook: edition sends → script builder runs → render → MP3 lands in the episode folder with publish-date metadata. Your feed updates before the inbox send finishes its first open.

What must be rewritten for the ear

Voice: the host who never misses a week

Pick one Essential slug and keep it forever — the voice becomes the show's identity as much as the logo. june is a common pick for warm editorial reads; cole suits news-style roundups. Because the catalog is fixed, next year's 52 episodes sound like this year's.

Cost at edition scale

An 8,000-character edition at $25/1M is $0.20 per episode on Essential. A full year of weekly editions is about $10.40 — less than one month of most podcast hosting plans. A daily edition at the same length runs ~$73/year. Model your cadence on /calc.

Co-hosted or interview formats: the multi-speaker Conversations post. Loudness and delivery_profile details: the podcast post.