# Track every dubbing job across every language in one board

> See every file and every language on one live board, play each dub the moment it lands, and publish only the takes a person has approved.

- Workflow type: app
- Services: ElevenLabs, Google Drive, Slack Bot
- Categories: Marketing, Operations
- Published: 2026-08-21

## What it does

- Pick source videos or recordings from a Google Drive folder, tick the languages you want, and start every dub from one screen instead of one at a time.
- Watch a live board where each file is a row and each language is a column, so thirty jobs in flight are a single glance rather than thirty open tabs.
- Play the finished dub and follow its subtitles in the app, then approve it to file the audio and subtitle file into a per-language Drive folder and announce it in Slack.
- Hit Review this language to have an assistant compare the dub against the original and flag mistranslations, inconsistent terminology, and brand names that should never have been translated.

## What you'll need

- An ElevenLabs account on a plan that includes dubbing
- A Google Drive account with a folder of the videos or recordings you want dubbed
- A Slack workspace where the app can post approval announcements
- Your list of product and brand names that should stay untouched in every language

## Prompt

Build me a localization desk for tracking video and audio dubbing across languages. It runs on ElevenLabs for the dubbing itself, Google Drive for source media and published output, and Slack for announcements. The reason this is an app and not a workflow: ElevenLabs dubbing is an asynchronous job that returns an id and requires polling a status endpoint until the job is complete before the dubbed audio or transcript is downloadable. Tracking that across many files times many languages is a recurring question a board answers, and approval is a human judgement call per language.

The main surface is a matrix board. Each source file is a row down the side and each target language is a column across the top. Every cell shows the live status of one dubbing job: queued, processing, ready, approved, or rejected. Cells the review agent has flagged carry a marker with the number of issues found. The board should comfortably show thirty or more cells at once and keep itself current as jobs progress, rather than making me refresh to find out what changed.

Above the board is a source picker. I choose a Google Drive folder and the app lists the media files in it using List Files. I tick the files I want and tick the target languages to dub them into, then hit Start. For each file and language combination, a handler pulls the media bytes with Download File Content and starts the dub with Create Dubbing Job, storing the returned dubbing project id against that cell so it can be tracked from then on. Stagger the job starts instead of firing all of them at once: ElevenLabs enforces a concurrent request cap that scales with plan tier (2 on Free up to 15 on Business) and returns HTTP 429 with a Retry-After header when it is exceeded, so respect that header and retry rather than dropping the job on the floor.

A background poll keeps each cell current by calling Get Dubbing Project for every cell not yet in a terminal state and writing the returned status back into the cell. Cells that are already approved or rejected stop being polled. If a job fails, the cell shows failed along with whatever error detail came back, and offers a retry that starts a fresh dub for just that one cell.

Clicking a ready cell opens a detail view for that one file and language. It plays the dubbed result fetched with Get Dubbed Audio and shows the timed subtitles read with Get Dubbing Transcript next to the player, so I can follow the translated script line by line while listening. The detail view also shows any findings the review agent has written for that cell, and carries the approve and reject actions.

Approving is per language and always a human action. When I approve a cell, the app creates or reuses a per-language folder in Google Drive with Create Folder, files both the dubbed media file and its subtitle file into that folder with Upload File (Multipart), then posts to Slack with Send a Message naming the source file, the language, and who approved it. Upload File (Multipart) handles files up to 5MB, so when a dubbed file is larger than that the app should still file the subtitle file and show a clear notice on the cell saying the media needs to be moved across manually, instead of failing silently. Once done the cell reads approved and links to where the files landed in Drive.

Rejecting asks me for a note explaining what was wrong. The note stays visible on the cell so the team can see why that language was held back, and nothing is uploaded or announced. I can restart the dub for that cell later.

Every cell has a Review this language button that kicks off a background agent for that file and language. The agent pulls the dubbed transcript with Get Dubbing Transcript, transcribes the original media with Speech to Text (Transcribe) so it has a faithful reference of what was actually said, and compares the two. It flags three things: mistranslations where the dubbed line does not carry the meaning of the original, terminology drift where the same source term has been rendered inconsistently across the file, and any product or brand name that was translated when it should have been left untouched. It writes its findings back into that cell as a list of timestamped issues, each with the original line, the dubbed line, and a short explanation of the problem, so a human only reviews what was flagged instead of sitting through everything.

The app holds a do-not-translate glossary that the team maintains inside the app. It is an editable list of product names, brand names, and terms that must appear untouched in every language, with an optional note per entry explaining the rule. The review agent checks the dubbed transcript against this list on every run, so adding a new product name immediately improves every review that follows. Anyone using the app can edit the glossary.

Two rules matter most. Never auto publish: nothing reaches Google Drive or Slack until a person has approved that specific file in that specific language, and approving one language never implies approval of another. And keep the board honest: a cell should always reflect the real state of its job, so persist the dubbing project id, current status, approval state, rejection note, and agent findings per cell rather than holding any of it in memory.

## How to customize

- Choose which languages appear as columns, and add or retire them as you enter new markets
- Edit the do-not-translate glossary inside the app as you launch products or rename features
- Change which Slack channel hears about approvals and how the per-language Drive folders are named

## FAQ

### Do I have to approve every language separately?

Yes, and that is on purpose. Nothing is saved to Drive or announced in Slack until a person approves that specific file in that specific language. Approving the Spanish version never implies the German one is good to go.

### What happens while a dub is still being made?

Dubbing runs in the background and can take a while, so the cell shows queued and then processing and keeps itself up to date as the job moves along. You do not need to refresh or keep the tab open to avoid losing track of a job.

### Can I read the subtitles, or only listen to the audio?

Both. When a dub is ready the app plays it with the timed subtitles alongside, so you can follow the translated script line by line. On approval the subtitle file is filed into Drive next to the audio.

### How does the review assistant know which words to leave alone?

It checks against a do-not-translate glossary your team maintains inside the app. Add a product or brand name once and every review from then on will flag it if a dub translated it.

### What if a dub comes back wrong?

Reject it and leave a note explaining the problem. The note stays on that cell so the team can see why the language was held back, nothing gets published, and you can restart just that one dub later.

Use this prompt in General Input: https://www.generalinput.com/prompts/track-every-dubbing-job-across-every-language-in-one-board