# Voiceover request and approval desk for your content team

> Your team requests narration, picks a voice, and generates takes in one place, so a reviewer can approve the final audio without a single email thread.

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

## What it does

- A queue board groups every narration request by status, so you can see at a glance what is waiting on a take, a retake, or a final approval.
- Requesters paste a script or point at a Google Doc, pick a voice from your voice library, and generate narration in one click.
- Every take is kept instead of overwritten, so a reviewer can play two voices back to back and pick the better read.
- Approving a take files the finished mp3 in your shared project folder, creates a share link, and posts it to your content channel automatically.

## What you'll need

- A Cartesia account, which is what actually generates the narration audio
- A Google account with access to the shared Drive folder where finished voiceovers should live
- Access to any Google Docs your team writes scripts in, if you would rather link a doc than paste text
- A Slack workspace and the channel where finished voiceovers get announced
- A short list of who on your team requests narration and who approves it

## Prompt

Build me an internal voiceover production desk where my content and enablement team requests narration and a reviewer approves it, instead of passing scripts and mp3 files around over email. Nothing here runs on a schedule. People open this app and work out of it.

The main surface is a queue board grouped by status, with four columns: Requested, Take ready, Needs retake, and Approved. Each card shows the request title, who asked for it, the voice used on the most recent take, and how many takes exist so far. Moving a request across those columns is the entire job of the app, so the board should be the landing view.

Creating a request asks for a title, a due date, and the script. The requester either pastes the script text directly or points at a Google Doc. If they point at a doc, the handler pulls it with the Google Docs Get Document operation and flattens the document body into plain narration text. Either way, store the resulting script on the request record. That stored script is what makes a retake cheap, because nobody should ever have to retype or re-paste a script to generate another take.

Opening a request shows the detail view: the full script, a voice picker, an inline audio player for every take that has been generated, and a reviewer notes field. List takes newest first, and label each one with the voice name, the timestamp, and who generated it, so the take history reads like a record of the review rather than a pile of files.

Populate the voice picker from the Cartesia List Voices operation so the team picks from the voices actually available in our account, including any custom or cloned ones. Pressing Generate calls the Cartesia Text to Speech (Bytes) operation with the stored script and the selected voice, saves the returned mp3 as a new take against the request, and moves the request to Take ready.

Keep every take instead of overwriting. Each Generate appends a new take and never replaces an earlier one. This is the core of the app: a reviewer needs to play two different voices side by side and approve whichever read is better, which is impossible if a regenerate destroys the previous audio.

A reviewer has two actions on a request. They can send it back by leaving a note and marking it Needs retake, which keeps the stored script intact so someone can pick a different voice and generate again without retyping anything. Or they can approve one specific take, since approval applies to a chosen take and not to the request in general.

On approval, upload that take's mp3 to our shared project folder using the Google Drive Upload File (Multipart) operation. Multipart is capped at 5MB, so if the take is larger than that, fall back to the Google Drive Upload File (Resumable) operation instead. Then create a shareable link for the uploaded file with the Google Drive Create Permission operation, and post that link to our content channel using the Slack Send a Message operation. The Slack message should carry the request title, the voice name, and who approved it, not just a bare URL. Save the Drive link and the posted message back onto the request so the Approved column shows what already shipped.

Scope the board by role. A requester sees their own requests only. A reviewer sees the whole approval queue across everyone, and only a reviewer can approve a take or send one back for a retake. Anyone who can see a request can play its takes, since listening is how people discuss the work.

Persist requests, their stored scripts, every take with its voice and audio, reviewer notes, and the final Drive link. The take history is the memory of the app and should survive across sessions.

## How to customize

- Rename or add board columns so the statuses match how your team actually reviews work
- Change which shared folder finished audio lands in, and whether the share link is open to your whole company or only specific people
- Swap the Slack channel that gets the announcement, and choose whether reviewer notes ride along with the link
- Decide who counts as a reviewer, since only reviewers can approve a take or send one back for a retake

## FAQ

### Can several people request voiceovers at the same time?

Yes. Everyone works out of the same board, but requesters only see the requests they submitted, while reviewers see the full approval queue across the whole team.

### What happens to older takes when we generate a new one?

Nothing. Every take is kept and listed on the request with its own audio player, which is the point. A reviewer can play two different voices back to back and approve whichever read is better.

### Do scripts have to be pasted in by hand?

No. A requester can paste the script directly or link a Google Doc, and the app pulls the current text out of that doc. The script is then stored on the request, so asking for a retake never means retyping it.

### What if a narration file is too big to upload?

That is handled for you. Shorter takes are uploaded in one pass, and anything over the usual size limit is uploaded in chunks instead, so long-form narration still lands in the folder.

### Can we use our own custom or cloned voices?

Yes. The voice picker is filled from the voice library in your own Cartesia account, so any custom or cloned voice you have set up there is available to pick.

### Does anything run on a schedule?

No. This is a working surface your team opens. Narration is generated when someone presses Generate, and audio ships when a reviewer presses Approve.

Use this prompt in General Input: https://www.generalinput.com/prompts/voiceover-request-and-approval-desk-for-your-content-team