Privacy, stated plainly.
ListenDub speaks a video's subtitles aloud in your language while you watch — on YouTube, and on other video sites such as Udemy, Bilibili, Facebook and TikTok. It reads the subtitle track the site's own player already loads. It never sends video anywhere. A video that already has captions never sends any audio at all, on any tier. For a video with no captions on the free tier, nothing is transcribed and nothing is spoken: until 11 September 2026 ListenDub transcribed such videos with Chrome's own speech recognition, which sent the audio to Google, and that path was removed — no audio goes to Google from ListenDub any more, on any tier. For a video with no captions, members only, short segments of that video's audio go through ListenDub's server to a speech-recognition provider. That path is on by default for members and switchable off in the popup, and it is described under What leaves your device below.
Where it runs, and where it never runs
ListenDub runs on every website, not only on video sites. That is broader than it sounds, and an honest description is worth more than a reassuring one.
- What it does on a page. It watches the page's own network responses — the requests the page makes for itself — looking for a subtitle track. It reads those responses. It does not collect or transmit page content, form input or browsing history — except the page text you ask it to translate (see “Translating a web page” below) — and a page with no video that you have not asked to translate produces no network activity from the extension at all.
- When the button appears. Only when the page actually contains a video element. On a page with no video, ListenDub adds nothing and stays inert.
- Why the permission is this wide. The alternative is asking you to grant permission separately for every site you ever watch a video on. Chrome offers no middle option between one fixed list of sites and all sites, and a fixed list would mean ListenDub stops working the day you open a site that is not on it.
- Where it never runs at all, regardless of the above:
youtube.com,youtube-nocookie.com,youtu.be,meet.google.com,teams.microsoft.com,teams.live.com,zoom.us,mail.google.com,accounts.google.com, and every subdomain of each. YouTube is on the list because it has its own separate, narrower entry; the rest are mail and meeting services, which carry no subtitle track to read and are the last place anyone wants a third-party button. - It also stays out of tabs that hold a bare file rather than a page: avif, bmp, gif, ico, jpeg, jpg, json, pdf, png, svg, tif, tiff, txt, webp, xml, yaml, yml.
This list is generated from the exclusion lists in the extension's own source, so this page and the shipped behaviour cannot drift apart.
What leaves your device
Free tier
- Subtitle text is sent to Microsoft's text-to-speech service to be spoken. The request also carries your selected voice, a fixed application identifier shared by every ListenDub installation, and a random per-request trace ID that is not reused.
- The request does not carry your account, video URL, or an identifier tied to you.
- Subtitles are fetched from the site you are watching. Outside YouTube, ListenDub may request the video's subtitle file, and the public metadata needed to find it, from that site — the same requests the site's own player makes. These go to that site, never to ListenDub, and they are sent without your login cookies wherever the site serves them publicly. Two sites work differently, and the difference is worth stating plainly.
- Facebook. Facebook keeps its subtitle files on
fbcdn.net, which refuses to hand them to a script running inside the page. So that one file is fetched by the extension itself rather than by the page. The request carries no cookies of any kind, refuses redirects, is capped at 4 MB, accepts only a.srtor.vttaddress onfbcdn.net, and is made only for a tab already on Facebook. It goes to Facebook's servers, never to ListenDub. This is the reason the extension asks for permission onfbcdn.netwhen you install it. - TikTok. TikTok translates subtitles itself, and ListenDub asks it to, through the same address TikTok's own player uses. That single request is same-origin and does carry your TikTok login cookies, exactly as the page's own requests do. It goes to TikTok, never to ListenDub, and carries no ListenDub identifier. The subtitle file itself is fetched without cookies.
- On sites other than YouTube, subtitle lines are translated by Google Translate's public endpoint, called from your browser. It receives the subtitle text and the language pair. It carries no account and no ListenDub identifier.
- When something fails, the extension may send the filtered operational report described below to ListenDub's server. Apart from that report, successful playback never calls ListenDub's server on the free tier — the Google Translate call above is made by your browser, not by ListenDub. You can turn these reports off in the extension popup; playback is unaffected.
Members
- Subtitle text, the video ID, and the video's title and channel name are sent to ListenDub's server, then to a language-model provider, to rewrite machine-translated lines into natural speech. The title and channel go because speech recognition and machine translation turn a video's own subject into an ordinary word that sounds like it, and knowing what the video is about is what lets the model put the right word back.
- No other information about you is attached beyond the account token that proves membership. Speech synthesis works the same as on the free tier.
- Transcription, only for a video with no captions. On by default for members, and you can turn it off in the extension popup. When a member watches a video that carries no subtitle track at all, ListenDub can transcribe it so it can be spoken. Short segments of that video's audio — a rolling window just ahead of the point you are watching — go to ListenDub's server and on to a speech-recognition provider. The words that come back are then sent, as text, to the same language-model provider used for refinement, to be translated into your language: a transcript arrives in whatever language the video is spoken in, so it must be translated before it can be read aloud. Sent with each segment: the audio, the video ID, the video's title and channel name, the target language, and the account token. The speech-recognition provider receives only the audio; the title, channel, and transcribed text go to the language-model provider. Your IP address is not exposed to either provider, because the request goes through ListenDub's server rather than from your browser. The audio is passed through and discarded — never written to disk. A video that already has captions never triggers any of this.
Translating a web page — only when you ask
- Nothing on a page is translated, and no page text leaves your device, until you ask: the “Translate this page” button in the popup, the Translate button or translation bar on the page, the keyboard shortcut (Alt+Shift+T), or “Translate page” in the Android app.
- Free tier: the text blocks visible on the page — paragraphs, headings, short labels, and more as you scroll — are sent from your browser to Google Translate's public endpoint, with the language pair. They carry no account and no ListenDub identifier, and they do not go through ListenDub's server. Pages listed under “where it never runs” are never translated.
- Members with AI translation on (on by default; it can be switched off in the translation bar): the same text blocks are also sent to ListenDub's server and onward to our machine-translation provider, to produce a better translation, with the language pair and the account token that proves membership. The page's address is not sent. ListenDub's server does not store the text; it records only how much was translated, for the membership spending cap. AI translation is capped per page and per day.
- Translations live in the open page's memory, so switching between “bilingual” and “translation only” sends nothing again; they are gone when you close or reload the tab.
Operational diagnostics
The current pilot production build sends error reports by default; it does not send successful-run samples. Reports contain only fixed error categories, numeric status, random request ID, build version, counters, and timing. Since 23 August 2026 a report also carries your membership tier (free or member), the state of the language-model step, and a coarse summary of the playback attempt — seconds played back, subtitle line count, and flags for warm-up, ad playback, and how the attempt ended — so that a report can show the feature failed to work, not only that code threw an exception. They do not contain the YouTube URL, subtitle text, an error stack, the browser user agent, an account token, authorization headers, or any timestamp taken on your device.
Changed 11 September 2026 — members only: the video ID, the site name and your target language. A report from a signed-in member now also carries the video's ID (not its URL), which site it was playing on, and the language you asked for. Nothing about a free report changed: it still carries no video ID and no site, and the server discards those fields if they arrive anyway. For a member the video ID is not a new category of data — it is already sent with every paid operation, as described above — and without it an error report can say that the feature failed but not on what. The URL itself is still never sent.
Also 11 September 2026 — members only: one short line naming the error. A member's report now also carries the last error line the extension wrote for itself, capped at 120 characters, and the reason its local cache was switched off. Those lines are written by our own code, never by you and never by the page: they name a step and a reason, such as the translation service refusing a request. Control characters are removed. A free report carries neither, and the server discards both if they arrive anyway.
The server rate-limits reports and writes the filtered record only to restricted operational logs. Since 11 September 2026 a failed report from a member is also kept in an operational table for 30 days, grouped so that one defect is one row however many times it occurs, and then deleted. Free-tier reports are never written there. There is no public endpoint for reading any of it. If the server cannot be reached, up to 20 already-filtered reports remain in local extension storage for retry when the service worker next starts. This is not analytics. It is on by default because the free tier makes no other call to ListenDub's server, so a failure that is never reported is a failure nobody can fix; turning it off is one switch in the popup.
Processor: Cloudflare. The server runs on Cloudflare Workers. Cloudflare's invocation log includes standard network metadata — IP address, approximate country, user agent, request and TLS metadata, and response status. Since 23 August 2026 that metadata is retained in Cloudflare Workers Logs for up to 3 days on Cloudflare's free plan and up to 7 days on a paid plan, then deleted by Cloudflare. It is visible only to the project's Cloudflare account operators and is not exported anywhere else. Retention is what links an error report to the request that produced it.
What ListenDub's server keeps
Everything above describes what leaves your device. This is what stays on ListenDub's side.
- Refined subtitle text, up to 7 days. Filed under a fingerprint of the subtitle track itself — the lines, their timings, and the language pair — not under your account. There is no account id, no user id, and no session in that key. It is a shared pool on purpose: two members watching the same video should not both pay to have the same lines rewritten. Because the key is the content, it can only be read back by someone who already has that exact subtitle track.
- A usage record, per 30-day period, kept for 3 periods. How much you used and what it was spent on, including the video ID of each paid operation. This is what enforces the membership spending cap; without it the cap cannot exist.
- A 24-hour record of which audio segments have already been transcribed, derived from the video ID and the position in the video. It exists so the same segment is never charged twice — a reconnect must not become a second bill.
- No audio, ever. Audio is passed through to the provider and dropped. It is never written to disk, never cached, and never part of any of the records above.
What stays on your device
The extension stores your account token and membership status (members only), diagnostics preference, up to 20 filtered error reports awaiting delivery, a cooldown record for YouTube rate limits, your settings (the language you want to hear, the voice, the on/off switches for the optional features, the page-translation display and whether AI translation is on), for members a per-day count of AI page translations used (it enforces the daily cap), two small notice records so neither notice repeats at you (whether you have answered the spoken-language notice, and when the spoken membership line last played), usage counters (how many times dubbing ran, how many of those runs produced sound, and how often the membership notice was shown and clicked, counted per site from a fixed list), and a cache of refined subtitle text keyed by video ID for seven days.
No audio is stored. Synthesized speech lives in memory and is discarded.
What ListenDub never does
- The browser extension contains no advertising, ad identifiers, or tracking across sites. (The free tier of the Android app does show ads — see The Android app below.)
- No selling or sharing of personal data.
- No analytics on the free tier.
- No access to your YouTube account, and no reading of your YouTube watch history or of your browser history.
- Nothing the page shows is collected beyond what is listed above: the subtitle text being spoken, the page text you ask to translate, and, for members only, the video ID, title, and channel name — plus, in the transcription case, the audio of the video you chose to play. Each paid member operation is recorded against its video ID so the spending cap can exist. None of that list reaches ListenDub from the free tier. On the free tier a video with no captions simply stays silent: the Chrome speech-recognition path was removed on 11 September 2026.
Third parties
- Microsoft: text-to-speech. Receives subtitle text.
- A language-model provider: members only. Receives subtitle text, video ID, and the video's title and channel name through ListenDub's server — and, on the transcription path, the transcribed text to be translated.
- A speech-recognition provider: members only, and only for a video with no subtitle track, with transcription turned on. Receives short audio segments of that video through ListenDub's server.
- A machine-translation provider: members with AI translation on. Receives the page text you ask to translate, and the language pair, through ListenDub's server — never the page address.
- Google Translate: receives subtitle text, and the page text you ask to translate, with the language pair, called by your browser, not through ListenDub's server, and carrying no ListenDub identifier. ListenDub no longer sends any audio to Google: the Chrome speech-recognition path was removed on 11 September 2026.
- YouTube: the subtitle track is fetched by YouTube's own player, not by ListenDub.
- Facebook: receives a request for the subtitle file and, for a member transcribing a caption-less video, requests for that video's audio bytes. Both go to
fbcdn.netwith no cookies and no ListenDub identifier. - TikTok: receives a request for the signed subtitle file, without cookies, and a request to its own translation endpoint, which does carry your TikTok login cookies because it is the same request their player makes.
- The video site you are watching: outside YouTube, ListenDub may request the subtitle file and the public metadata needed to locate it. Those requests carry no ListenDub identifier, and no login cookies where the site's door is public.
Your choices
- Use Free without an account. Normal playback does not reach ListenDub's servers; error reports may do so as described above.
- Clear the on-device cache by clearing site data for youtube.com.
- Turn error reports off in the popup; this stops new reports and does not affect playback.
- Delete your account and its data by writing to support@listendub.com from the address you signed in with. Sign-in identity, sessions and tokens are erased. Records of payments already made are kept because tax and accounting law requires it; they are not used for anything else.
The Android app
This section covers the ListenDub Android app. The app runs the same dubbing code as the browser extension, so everything above about subtitles, speech synthesis, translation and the video sites applies to the app as written. This section lists only what is different on Android.
A browser inside the app
- The app shows video sites through GeckoView, Mozilla's browser engine, built into the app. Pages you open are loaded by that engine, on your phone, the way a browser would load them.
- Since version 0.1.4 (October 2026) the app opens any public
httpsweb page, so you can translate it; dubbing still works on YouTube, Udemy, Bilibili and TikTok. Plainhttppages, addresses on your local network and links that are not web pages are not opened inside the app; the app asks whether you want to open them in your usual browser, and does nothing unless you say yes. On a page that is not one of the four dubbing sites the app shows the page's address and an “Open in browser” button, which opens it in your usual browser only when you tap it. - The app grants no camera, microphone, location or other device permission to any web page.
- Cookies, logins and cached pages for the sites you visit are kept in the app's own private storage on your phone, separate from your other browsers. ListenDub does not read your login cookies and does not send them to its server. Uninstalling the app, or clearing its storage in Android settings, removes them.
What stays on your phone
- Your settings: app language, the language you want to hear and its voice, and the switches in Settings.
- “Recent”: the last four video pages you watched in the app — the page address, the video title and the site. It exists only to show the list on the home screen and is never sent anywhere. It does not skip private or unlisted videos, so anyone holding your unlocked phone can see it. Clearing the app's storage removes it.
- A crash note: if the app crashes, a description of the crash is written to a file in the app's private storage so the next launch can report it. The full stack trace and the error message never leave the phone.
- The app does not back up its data to your Google account.
What leaves your phone
- Everything described for the free tier above: subtitle text to Microsoft for speech, subtitle text to Google Translate on sites other than YouTube, and the subtitle requests each site's own player makes.
- Page translation, only when you tap “Translate page” — exactly as described above under “Translating a web page”: on the free tier the page's visible text goes from the phone to Google Translate; for members with AI translation on it also goes to ListenDub's server and our machine-translation provider, without the page address.
- Crash and error reports, only while “Send error reports” is on in Settings (on by default). When the app itself fails — a crash, the page engine stopping, or the dubbing engine not starting — it sends ListenDub's server the kind of failure, the name of the error type (never its message), up to eight locations in ListenDub's own code, the app, Android and page-engine versions, and the phone's manufacturer, model and processor type. It carries no URL, no video, no page text, no error message, no account and no identifier of you or your phone. Reports are sent only when something failed. The server groups identical failures per day and keeps them for 90 days, and may alert the ListenDub team through Telegram with a short text made only of those same fields. When dubbing fails to start, the app also offers a “Send error report” button; pressing it sends one report of the same shape even if the switch is off, because you asked for it.
- Links you share into the app are read on the phone to find a web address. Text that is not a link becomes a YouTube search, run inside the app. Nothing is sent to ListenDub.
Membership and Google Play
- Membership in the app is bought through Google Play (a monthly subscription that renews, or a one-week pass that does not). Google handles the payment; ListenDub never sees your card.
- To activate what you bought, the app sends ListenDub's server the Google Play purchase token, the product ID, and a random identifier the app generates for the purchase — not your email, name or Google account. The server checks the purchase with Google and answers whether it is active and until when. The same identifier is used to restore your purchase on a new phone signed in to the same Google account.
- Connecting a Google account is optional and only signs you in to a ListenDub account that already exists, to use a membership you bought on the website. It never creates an account. The app sends Google's sign-in token to ListenDub's server, which reads your Google account ID and email to find that account.
- A membership bought in the app works in the app; a membership bought on the website works with the website account. They are separate.
Advertising in the app (free tier only)
- Free users see a full-screen ad after leaving a video they watched for a while, at most once every three minutes. Ads are never shown while a video is playing. Members see no ads, and the ad SDK is not started at all for them.
- Ads are served by Google AdMob (Google Mobile Ads SDK). To show an ad, Google receives your device's advertising ID (unless you reset or delete it in Android settings), IP address, and device and app information, and may use them to choose and measure ads. What Google does with that data is described in Google's own privacy policy. ListenDub receives no personal data from AdMob.
- In the European Economic Area, the UK and other regions where the law requires it, the app first shows Google's consent form. No ad request is made until consent allows it, and you can reopen the form at any time from Settings > Ad privacy choices.
- You can limit ad personalisation in Android settings (Google > Ads), or remove the ads by becoming a member.
What the app does not contain
- No analytics or crash-reporting libraries from third parties. The one third-party SDK that collects data is Google's ad SDK, described above, which is not started for members.
- No access to your contacts, files, microphone, camera or location. Permissions: internet and network state; Google Play billing; and the advertising ID permission that the ad SDK requires.
Contact
Questions about this policy, and account deletion requests: support@listendub.com
Last updated: 12 October 2026