Podcast Archive Article Engine
Turns a ten-year, 343-episode podcast archive into a weekly newsletter draft. A rule in code picks the episode, Claude writes the section around a quote already on record, and n8n sends the draft to the editors and records the promotion.
For a businessTen years of podcast episodes keep earning attention instead of aging out: each week an older interview returns as a newsletter draft, quoting the guest accurately, with an editor still approving what goes out.
- Status
- In production at my employer
- Result
- Not yet measured against an answer key; editors judge every draft before it is used
- How it was measured
- Each pick returns the rows it skipped and why, so a surprising choice can be traced
- Biggest limit
- Only episodes with a standout quote on record can be featured, so much of the archive isn’t reachable yet
01 · Context The problem
An episode gets attention the week it airs and then effectively disappears. Ten years of interviews sat in the archive with no practical way to tell which ones were still worth resurfacing, and nothing to write from even once you picked one: most episodes had no transcript, no quote, and no record of whether they had been promoted before.
02 · Pipeline How it works
- Build the index first
The archive was pulled into a single sheet: 343 episodes across ten years, with 29 fields each — air date, guests, summary, categories, takeaways, shelf life, promotion history and episode URL.
- Transcribe and mine the transcripts
Transcription was automated and the transcripts loaded back into the index: all 343 episodes, about 2.6 million spoken words. A model read each transcript and pulled one standout quote, stored as a field alongside the speaker and timestamp rather than generated later at writing time.
- Let the index decide eligibility
A formula in the sheet marks an episode eligible only when it is flagged evergreen, has a standout quote recorded, aired more than a year ago, has not been promoted in the last 18 months, and is not marked skip. Of 343 episodes, 243 are evergreen; the rest are time-sensitive and never surface.
- Pick, weekly, in code
A weekly Claude scheduled task asks n8n for the next episode: the first row marked eligible, skipping anything promoted in the last 18 months. Code reads the sheet’s dates in every format they appear in and returns the rows it skipped, with the reason.
- Draft around the recorded quote
Claude writes the newsletter section around the episode’s standout quote. A quote card can be attached; the archive assistant’s card tool draws one only for a quote that passes its transcript check.
- Send to fixed recipients
n8n emails the draft to the editors. Recipients are set by the action, never by the model, attachments must be images, and a test goes to me only.
- Record the promotion
A separate call writes the date, the new count and the status back to the row, which starts the 18-month clock before that episode can come around again.
03 · Choices Design decisions
Selection is a rule, not a judgment call
Eligibility lives in the index as a rule over five conditions, and code enforces the 18-month rule again at pick time. The model is handed a decision already made, so it cannot pick an episode that ran recently or one with nothing to quote.
Quotes are recorded, not produced on demand
Each quote was extracted once from the transcript and stored with its speaker and timestamp. At writing time the quote is retrieved, not invented, so a guest is never credited with words they did not say.
Claude writes, n8n acts
The model never touches the sheet or the mailbox directly: it calls one unpublished n8n workflow with four named actions, so the recipients and what can be written are fixed in code.
Recording is a set, not an increment
The record call writes the new count rather than adding one, so repeating the same call does no harm.
Shelf life is a field, not a guess
Every episode is labeled evergreen or time-sensitive up front, so the question of what ages well was answered once across the archive rather than re-litigated every week.
People finish the work
The output is a draft for editors, not a published article. Nothing reaches an audience without a person putting it there.
04 · Evidence How I tested it
Indexing the archive doubled as an audit: the same pass produced a 299-item fix list for the live site, led by 190 episodes with no transcript on the page and 91 with no video embedded, plus duplicate descriptions and takeaway blocks attached to the wrong episode. An agent has since published every transcript to its episode page.
Each pick returns the rows it skipped and why, so a surprising choice can be traced back to the sheet.
05 · Outcomes What it has done so far
- A weekly newsletter draft, running at my current employer without interruption.
- Every episode’s transcript is live on its page on the podcast’s website, published by an agent.
06 · Iteration Tuning log
- RebuildMoved from a Zap to a weekly Claude task over n8n, with a quote card attached to the draft.
- Bug fixThe sheet’s eligibility formula never read the old Zap’s promotion dates, so recently promoted episodes stayed eligible and came back. The 18-month rule is now also enforced in code at pick time.
07 · Honest notes Known limits
- Only episodes with a standout quote on record can be featured: 153 of 343 so far. Every episode now has a transcript, so the rest can become eligible as quotes are pulled from them.
- Sending and recording are separate calls: if a send succeeds and the record call fails, the episode could come up again.
- One episode per week by design, so the archive is worked through slowly rather than flooded.
- Evergreen versus time-sensitive is a human judgment recorded once per episode; an episode labeled wrong stays wrong until someone changes the field.
Want to see this one run?
I'll screen-share the workflow, the test set and the results, including what didn't work.