Privacy Policy
Last updated: 26 July 2026
Tally (https://tally.williamwong.com) is a single-purpose web application that lets you revisit the videos you have liked on YouTube and re-rate them. This policy explains exactly how Tally accesses, uses, stores, shares, retains, and deletes Google user data.
Use of YouTube API Services
Tally uses YouTube API Services to provide all of its functionality. By using Tally, you are also agreeing to be bound by the YouTube Terms of Service. Google's handling of your information is described in the Google Privacy Policy. In addition to Tally's own deletion mechanisms described below, you can revoke Tally's access to your data at any time via the Google security settings page.
What Google user data Tally accesses
When you sign in with Google, Tally requests:
- Your liked-videos list (YouTube Data API,
videos.listwithmyRating=like, under theyoutube.force-sslscope) — up to 50 of your most recently liked videos: their titles, thumbnails, channel names, and publish dates. - The ability to submit ratings (YouTube Data API,
videos.rate, under the same scope) — used only when you click Like or Dislike on a video in Tally. - Public comments on displayed videos (YouTube Data API,
commentThreads.list, under the same scope) — fetched only when you click "Show comments" on a video, to display that video's existing public comments. Tally does not post, edit, or delete comments. - Your playlists and their contents (YouTube Data API,
playlists.list/playlistItems.list/playlists.insert/playlistItems.insert/playlistItems.delete, under the same scope) — Tally lists your playlists and their videos when you open the "My playlists" tab, creates one privateplaylist named "Tally Archive" on your first Archive click, and adds or removes individual videos only when you click Archive or Remove. - Your basic profile email address (OpenID Connect
openid email profilescopes) — displayed in the app header so you can confirm which account is connected.
How Tally uses this data
The data above is used for exactly one purpose: showing you your own liked videos and submitting the ratings you explicitly click, to your own YouTube account. Tally performs no analytics, no profiling, no advertising, and no use of your data beyond the feature you see on screen. Every API call is triggered by your own action (loading the page or clicking a rating button); nothing runs in the background.
What our backend actually does
These are all the calls our code makes to Google APIs, in the order they happen, with the OAuth scope each one uses:
- OAuth token exchange (
oauth2.googleapis.com/token) — right after you approve the consent screen, we exchange the authorization code for tokens covering theopenid email profileandhttps://www.googleapis.com/auth/youtube.force-sslscopes. The tokens go into secure cookies in your browser; your email (from theemailscope) is shown in the header so you know which account is connected. Nothing is written to any server. videos.list(scope:youtube.force-ssl) — when the page loads, called withmyRating=liketo read up to 50 of your most recently liked videos: title, thumbnail, channel name, publish date. We don't read your analytics, drafts, or private data — only the liked list.videos.rate(scope:youtube.force-ssl) — only when you click Like or Dislike on a card, called with that video's ID and your chosen rating (like,dislike, ornone). This is the same action as pressing the buttons on YouTube itself.commentThreads.list(scope:youtube.force-ssl) — only when you click "Show comments" on a card, called with that video's ID to read its top public comments for display. Strictly read-only.playlists.list(scope:youtube.force-ssl) — when you open the "My playlists" tab, called withmine=trueto list your own playlists (title, item count, privacy status, thumbnail). Also called during your first Archive click to find the "Tally Archive" playlist.playlists.insert(scope:youtube.force-ssl) — called at most once, on your first Archive click, to create a single playlist named "Tally Archive" on your channel, with its privacy status set to private. We never create any other playlist.playlistItems.list(scope:youtube.force-ssl) — when you open one of your playlists in the "My playlists" tab, to display its videos; and during an Archive click, to check whether the video is already archived so we don't create duplicates.playlistItems.insert(scope:youtube.force-ssl) — only when you click "Archive" on a video, to add that video to your private "Tally Archive" playlist.playlistItems.delete(scope:youtube.force-ssl) — only when you click "Remove from playlist" on a video inside one of your playlists, to remove that single entry.
That is the complete list — there are no background jobs, no scheduled tasks, and no other Google API calls anywhere in the codebase.
What we never do
The youtube.force-ssl scope technically permits many operations beyond what Tally needs. Our code never calls any of the following — these API methods do not exist anywhere in our codebase:
videos.delete— we never delete your videos.videos.update— we never change a video's title, description, category, tags, or privacy status.videos.insert— we never upload videos to your channel.comments.insert,comments.update,comments.delete,comments.setModerationStatus— we never post, edit, delete, or moderate comments. Comment access is strictly read-only: when you click "Show comments", we callcommentThreads.listto display a video's existing public comments, and nothing more.subscriptions.list,subscriptions.insert,subscriptions.delete— we never read who you follow or who follows you, and never subscribe or unsubscribe you from anything.playlists.update,playlists.delete— we never rename, modify, or delete any of your playlists. Playlist access is limited to: listing them, creating the single private "Tally Archive" playlist, and adding/removing individual videos when you click Archive or Remove.channels.update,channelSections.*,channelBanners.insert,watermarks.set— we never touch your channel's settings, layout, or branding.captions.*,thumbnails.set,liveBroadcasts.*,liveStreams.*— we never access captions, set thumbnails, or interact with live streaming.
The complete list of YouTube API methods Tally calls is exactly eight: videos.list (your liked videos), videos.rate (the rating you click), commentThreads.list (public comments, read-only, on demand), playlists.list (your playlists), playlists.insert(the single private "Tally Archive" playlist), playlistItems.list(a playlist's videos), playlistItems.insert (the Archive click), and playlistItems.delete (the Remove click).
Beyond API calls, we also commit to the following:
- We never sell data from your account or channel to third parties.
- We never use your data for advertising — neither our own promotion nor any ad network, ours or anyone else's.
- We never use your data to train AI models. Tally sends no audio, video, text, or metadata to any AI, ASR, or translation service — your data is not processed by machine-learning systems of any kind, ours or a vendor's.
- Humans — including the app's operator — never read your data. Your liked videos and their comments are rendered directly in your own browser and are not stored or logged server-side, so there is nothing for anyone to read. The only exceptions would be a suspected-abuse security investigation or your explicit written consent (for example, if you ask for help during a support investigation).
Data Sharing
Tally does not share Google user data with any third parties. Specifically:
- We do not sell, rent, trade, or transfer Google user data to any third party, for any purpose. There are no categories of third-party recipients, because there are no recipients.
- We do not use Google user data for advertising, marketing, retargeting, credit-worthiness or lending decisions, or model training of any kind.
- Tally is hosted on Vercel (our infrastructure provider). Your requests transit Vercel's servers in order to serve the app to you, the same way any website's traffic transits its host. Vercel processes this traffic transiently to deliver the service and does not receive stored copies of your Google user data, because Tally never stores any (see below).
- We would disclose data only if required by law — and since we retain no user data on our servers, there is effectively nothing to disclose.
Data Storage & Protection
Tally stores no Google user data on any server. Tally has no database, no user accounts of its own, and no server-side session store. Our storage and protection practices are:
- OAuth tokens are stored only in your own browser, in cookies flagged
HttpOnly(inaccessible to page JavaScript),Secure(sent only over HTTPS), andSameSite=Lax(not sent on cross-site requests). Tokens are never written to any server-side storage and never appear in server logs. - Video data (titles, thumbnails, ratings) is fetched from the YouTube API at the moment you load the page, passed through to your browser for display, and discarded. It is never written to disk or any datastore.
- All connections are encrypted: your browser connects to Tally exclusively over HTTPS (TLS), and Tally calls Google's APIs exclusively over HTTPS. The
youtube.force-sslscope itself mandates SSL-only API communication. - Access to Tally's hosting and OAuth configuration is limited to the app's developer and protected by the hosting provider's and Google's account security (including two-factor authentication).
Data Retention & Deletion
Retention:Tally retains no Google user data server-side — the retention period for data on our servers is zero. The only data that persists anywhere is the OAuth tokens in your own browser's cookies: the access token cookie expires automatically after at most 1 hour, and the refresh token and email cookies expire automatically after at most 30 days.
Deletion: you can delete all data associated with Tally at any time, in either of two ways:
- Sign out of Tally(the "Sign out" button) — this immediately deletes all Tally cookies, including your tokens, from your browser. Clearing your browser cookies for tally.williamwong.com has the same effect.
- Revoke Tally's access at myaccount.google.com/permissions — this invalidates Tally's tokens on Google's side, after which any tokens remaining in your browser are useless and expire on their own schedule above.
Because no Google user data is ever stored on our servers, these two steps constitute complete deletion — there is no server-side copy to remove. If you have any deletion request or question, contact us (below) and we will respond within 30 days.
How to revoke access in two seconds
At any time, with no explanation needed, you can:
- Open myaccount.google.com/permissions,
- Find "Tally" in the list,
- Click "Remove access".
From that moment, Tally can no longer access anything on your account. Any tokens still in your browser become inert and expire on their own within the periods listed above.
Compliance with Google's policies
Tally's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.
Changes to this policy
If our data practices ever change, we will update this page and its "Last updated" date before the changes take effect.
Contact
For privacy questions or deletion requests, contact the app owner at the support email listed on the app's Google OAuth consent screen.