# Audio coverage console for your WordPress blog archive

> See which of your published posts already have a narrated version, pick the ones that do not, and backfill your whole archive in one run.

- Workflow type: app
- Services: Cartesia, WordPress, Google Drive
- Categories: Marketing, Operations
- Published: 2026-08-16

## What it does

- Lists every published post in one table with its publish date, category, word count, whether it already has an audio version, and how long that audio runs.
- Filter down to the posts with no audio yet, tick the ones you want, and see the total narration length before you start so a bulk run never surprises you.
- Narrates each selected post in the voice you choose, saves the mp3 to your Google Drive with a shareable link, and adds a Listen to this post player to the top of the article.
- Remembers everything it has already narrated, so running it again next month only picks up the posts you have published since.

## What you'll need

- A WordPress site you can log in to and edit published posts on
- A Cartesia account, which supplies the narration voices
- A Google Drive account where the finished audio files will be stored and shared
- A rough idea of how short is too short to narrate, since the app skips posts under a word count you set

## Prompt

Build me an app for turning my WordPress blog archive into audio. The job it solves is coverage: I need to see at a glance which of my published posts already have a narrated version and which do not, then backfill the missing ones in bulk without re-doing work I have already paid for.

The main surface is a coverage table listing every published post. Load it from WordPress List Posts with status set to published, paging through every page rather than stopping at the first one, since the whole point is seeing the full archive. Each row shows the post title linking out to the live article, the publish date, its category, the word count, a clear has-audio indicator, and the duration of the audio when one exists. Default the sort to oldest first, because the backlog is what people come here to clear.

Give the table a filter bar: a No audio yet toggle that should be on by default, a category filter, a date range, and a title search. Pass the category, date and status filters into List Posts itself so the server does the narrowing rather than fetching everything and filtering in the browser. One catch worth knowing up front: there is no WordPress operation in the catalog for listing categories, so build the category dropdown from the distinct categories present on the posts you have already loaded rather than trying to fetch a taxonomy list.

Before anything is counted or narrated, clean the post body: strip HTML tags, WordPress shortcodes in square brackets, captions, embed markup and any script or style blocks, then collapse the leftover whitespace. The word count column is computed from that cleaned text, not the raw body. A settings value holds a minimum word count, default it to around 300, and posts below it render as Too short to narrate and cannot be selected, so link posts and one-paragraph announcements never get picked up by a bulk run.

The narration voice comes from Cartesia List Voices. Show the available voices in settings with a preview of the name and description, let me pick one as the default narration voice, and remember it. Keep the audio settings there too: the mp3 output format and bit rate, and the Google Drive folder the files are written to.

Rows carry checkboxes with a select-all that applies to the current filter, not just the visible page. As soon as anything is selected, a summary bar shows the number of posts selected and the total character count of the cleaned text across the selection, plus a rough runtime estimate. This is the guardrail against burning credits by accident, so the bulk run button opens a confirm step that repeats those numbers before anything is sent to Cartesia.

Running the batch processes each selected post in turn. Send the cleaned text to Cartesia Text to Speech (Bytes) with the chosen voice and mp3 output. Upload the returned audio to Google Drive with Upload File (Resumable), naming the file after the post slug and publish date, and use the resumable path rather than a simple upload because long articles produce files well past the 5MB limit for a single-shot upload. Then call Google Drive Create Permission on the new file with type anyone and role reader so the audio is playable by readers, and build the shareable link from the file id.

Finally, use WordPress Update a Post to prepend a Listen to this post block to the top of the post body, pointing at the Drive link. Wrap that block in a stable marker comment so the app can recognize its own insertion later: on a regenerate, replace the existing block rather than stacking a second player on the article, and never insert one twice. Preserve the rest of the body exactly as it was, and do not change the post status, title or publish date.

There is no WordPress media library upload operation available, so the audio must be hosted in Google Drive and linked into the post as described. Do not write a step that uploads the mp3 into the WordPress media library.

Persist a record per narrated post: the post id, the Drive file id, the public link, the duration, the character count, the voice used and the timestamp. That store is what drives the has-audio column and what makes a re-run cheap, since posts already recorded are skipped and only newly published ones come back as uncovered. Offer an explicit per-post Regenerate for articles I have rewritten, which is the one path allowed to overwrite an existing record.

While a batch runs, show per-row progress moving through narrating, uploading, sharing and updating the post, with a running completed count. Isolate failures so one bad post does not abort the batch: mark that row failed with a readable reason, carry on with the rest, and let me retry just the failed rows afterwards. If a post fails partway, do not record it as covered.

## How to customize

- Swap the narration voice, or use a different voice for a particular category of post
- Change the minimum word count so short news items and link posts get skipped automatically
- Edit the wording and placement of the Listen to this post line that gets added to your articles
- Point the audio at a different Google Drive folder, for example one per year or per category

## FAQ

### Where do the audio files actually live?

In a folder in your own Google Drive. Each finished mp3 is saved there and shared with a view only link, and that link is what the player on your post points to. You keep the files, so moving, replacing, or deleting one is just a normal Drive action.

### Will it re-narrate posts I have already done?

No. The app records every post it has narrated, so a later run only offers you the posts that are still missing audio. If you rewrite an article you can still force a regenerate on that single post.

### How do I avoid burning through narration credits by accident?

Before any bulk run the app shows how many posts you selected and the total character count that will be narrated, and asks you to confirm. There is also a minimum word count setting so very short posts are skipped automatically.

### What happens to images, code blocks, and shortcodes in my posts?

They are stripped out before narration, so the voice reads the actual article text instead of markup or plugin shortcodes. Your published post is not changed by this cleanup, it only affects what gets read aloud.

### Does this work on a self-hosted WordPress site?

Yes. It works with any WordPress site where you have an editor or administrator login, self-hosted or managed, as long as the site is served over a secure connection.

### Can I do a handful of posts instead of the whole archive?

Yes. Tick as many or as few rows as you like. Plenty of teams work through the backlog a category or a year at a time rather than running everything at once.

Use this prompt in General Input: https://www.generalinput.com/prompts/audio-coverage-console-for-your-wordpress-blog-archive