See llms.txt for all machine-readable content.

Back to Templates

Turn changed docs pages into a weekly podcast with Apify, DeepSeek & ElevenLabs

Release notes keep shipping and nobody reads them, so the change that matters lands three weeks later in a support thread. This workflow crawls your docs every Friday, works out which pages actually changed since the last episode, and turns only those into a short audio episode your team can hear before standup. Scripts that fail a check are held for review, and every page fingerprint, episode and failure is logged.

Last updated: November 2026.

Quick Overview

Apify Website Content Crawler fetches your release notes as markdown. A Code node fingerprints each page and compares it with the docs_page_hashes tab, so unchanged pages never reach the model and a week with no changes ends with a quiet log row instead of a repeat episode. A DeepSeek agent writes the episode as JSON, a second Code node checks length, the change list and any version numbers against the source text, and only passing scripts go to ElevenLabs. Gmail sends the mp3 (or a text-only fallback), Google Sheets logs the message id, and a monthly lane emails a recap of every episode.

How it works

  1. Every Friday at 16:00 the schedule starts the crawl. Crawl Release Notes and Get Docs Pages each retry three times. If one still fails, the error goes to docs_run_errors and an alert email.
  2. Read Page Fingerprints loads the url and content hash saved after the last episode.
  3. Shape Docs Input hashes each crawled page, keeps only new or changed pages and builds the prompt from them.
  4. Any Docs Changed? stops the run when nothing moved and writes a skipped row to docs_episodes.
  5. The DeepSeek agent writes a title, summary, change list and a 250 to 350 word narration, and is told never to invent a version, date or feature.
  6. Parse Docs Episode reads the JSON and builds the email. Check Episode Quality then confirms the script is 200 to 400 words, has a real change list, and only mentions version numbers that appear in the crawled text.
  7. Failing scripts go to docs_review_queue with the reasons and an email to the editor. Nothing is voiced.
  8. Passing scripts are voiced by ElevenLabs. If audio fails after retries, Gmail sends a text-only episode instead.
  9. Log Docs Episode records the Gmail message id and delivery type, and Save Page Fingerprints upserts the new hash for every page covered, matched on url.
  10. On the first of each month a recap email lists episodes sent, text-only weeks, quiet weeks and pages covered.

Setup

  1. Add an Apify token on Crawl Release Notes and Get Docs Pages, then point the start URL at your own changelog.
  2. Add an OpenAI-compatible credential pointing at DeepSeek on Docs Model.
  3. Connect ElevenLabs on Speak Docs Episode and pick the voice and model.
  4. Connect Gmail. Set the team list in Parse Docs Episode and the recap recipient in Build Episode Recap.
  5. In one spreadsheet create tabs docs_episodes, docs_page_hashes (url, title, content_hash, last_status, last_episode, updated_at), docs_review_queue and docs_run_errors.
  6. Run once manually. The first run treats every page as new, later runs only cover what changed.

Quick Answers

Will the team get the same episode twice?
No. Page text is hashed and compared with docs_page_hashes, so a page only returns when its content changes. A week with no changes logs a skipped row and sends nothing.

Can the model invent a version that never shipped?
The prompt forbids it, and the quality check compares every version number in the script with the crawled text. A mismatch holds the episode in docs_review_queue.

What if the crawl or the audio fails?
Apify calls retry three times, then log to docs_run_errors with an alert. An audio failure falls back to a text-only email and the log row says so.

How do I see whether the habit holds?
docs_episodes has one row per Friday with pages changed, delivery type and message id, and the monthly recap summarizes it for you.

Additional info

Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/