Narrate every new Ghost blog post into an audio edition

By General Input

Every hour, Geni finds your newest Ghost posts, narrates them in a consistent ElevenLabs voice, saves the MP3 to Google Drive, and announces the audio edition in Slack.

Integrations

  • Ghost
  • ElevenLabs
  • Google Drive
  • Slack Bot

Type

Agentic Task

Categories

  • Marketing
  • Operations

Every hour, find Ghost blog posts that were published since the last run and turn each one into a narrated MP3 audio edition that my readers can listen to alongside the written post.

Trigger: cron, every hour.

Step 1 — Find new posts. Use Ghost Browse Posts (Admin API), filtered to status:published and published_at greater than the last run, sorted oldest first so I work through them in order. For each post, also keep the title, slug, full HTML body, and published_at.

Step 2 — Skip posts already processed. Before narrating, call Google Drive List Files against the configured target folder and search for a file whose name starts with the post slug (for example name contains '<slug>' and '<folderId>' in parents and trashed = false). If a match exists, skip that post.

Step 3 — Clean the body for narration. Strip elements that do not narrate well: image captions and figure alt text, footnote markers, raw URLs, code fences and inline code, embed blocks, and obvious call-to-action / subscribe-now / 'read more' blocks. Keep the post title (read it once at the start) and the body prose. Decode HTML entities and collapse repeated whitespace.

Step 4 — Narrate with ElevenLabs Text to Speech. Use one configurable voice_id for every post so all audio editions sound like the same narrator, the eleven_multilingual_v2 model, and a single output_format (default mp3_44100_128). If the cleaned text is longer than about 9,000 characters, split it on sentence boundaries into chunks under that cap, call Text to Speech once per chunk keeping voice_id, model_id, and output_format identical across chunks, then concatenate the returned MP3 bytes in order so the final audio plays as one continuous track without audible seams.

Step 5 — Save to Google Drive. Upload the final MP3 to a configurable Google Drive folder using Upload File (Multipart). Name the file using the post slug (for example <slug>.mp3) so the dedupe check in Step 2 keeps working. Make the file shareable to anyone with the link and capture the shareable URL for the next step.

Step 6 — Announce in Slack. Use Slack Bot Send a Message to post into a configurable channel. The message should include the post title, the public Google Drive link to the audio, and a short ready-to-copy blurb (one or two sentences) the social team can paste straight into LinkedIn or X to announce the audio edition.

Configurable inputs: the Ghost site, the target Google Drive folder ID, the target Slack channel, the ElevenLabs voice ID, and optionally an override for the announcement blurb tone.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them