A command-line tool that downloads your own TV Time data — follows, watch history, ratings, lists, and favorites — to JSON files on your machine, using the login token from your browser.
TV Time is shutting down, and its official export is limited. This grabs the full picture the app itself sees so you can keep it or move it elsewhere.
No account, no server, no database, no dependencies. Just Node and your token.
- Node.js 22.6+ (runs TypeScript and
fetchdirectly, no build step) - A TV Time account you can log into
The tool authenticates as you, using the token your browser already holds after
you log in. It lives in local storage under the key flutter.jwtToken.
Fastest way (copies it without showing it):
- Open app.tvtime.com and log in.
- Open DevTools:
F12(orCtrl+Shift+I;Cmd+Option+Ion Mac). - Go to the Console tab and run:
The token is now on your clipboard — nothing is printed to the screen.
copy(localStorage.getItem('flutter.jwtToken'))
Clicking through instead: in DevTools, open Application (Chrome/Edge) or
Storage (Firefox) → Local Storage → https://app.tvtime.com, find the
flutter.jwtToken row, and copy its value.
Then put it in a local .env file so it stays out of your shell history:
cp .env.example .env # then paste the token into TVTIME_BEARER_TOKENTreat the token like a password — it grants access to your account. It expires when your session does, so you may need to grab a fresh one for a later run. If the tool returns
InvalidJWTToken, your token is stale; repeat the steps above from a logged-in session.
Your user id is the numeric id inside that token. If you don't know it, run
export with any number — it decodes the token and prints your real id.
npm install # dev tooling only; no runtime deps
npm run export -- <user_id> # download everything
npm run analyze -- <path/to/raw-sidecar-export.json> # print a summary
npm run build-import -- <path/to/raw-sidecar-export.json> # normalize + validateExports land in out/tvtime-export/<user_id>/. Full flag reference in
docs/cli.md.
build-import also checks the raw watch counts against TV Time's own stats and
labels the result green (match), yellow (small/unverifiable gap), or red (large
gap), so you know how much to trust the watched-episode data.
Open viewer/index.html in a browser and load your
raw-sidecar-export.json or import.json. It renders your library and stats
locally — nothing is uploaded. Search, filter (series / movies / favorites),
sort (most watched, recently watched, A–Z), and click any title to see how many
episodes you watched and when you last watched it.
Posters need no API key: TV Time embeds public TheTVDB artwork URLs in the export, and the viewer loads them straight from TheTVDB's CDN.
.env,out/, and exports are git-ignored, so you won't commit your token or data by accident.- By default the tool only fetches the account matching your token. It's for your own data; don't point it at anyone else's.
- Not affiliated with TV Time / Whip Media.
The reverse engineering and the design of this tool are my own work. I used AI coding assistants (OpenAI Codex and Anthropic's Claude) to help implement it and move faster.
MIT. Do whatever you want with it.
